안녕하세요 jin입니다.
오늘의 포스팅 주제는 소켓 통신입니다.
1. 우선 소켓통신이란?
소켓은 TCP/IP 기반 네트워크 통신에서 데이터가 송수신이 되는 마지막 엔드포인트라고 말합니다.
소켓통신은 두개든 세개이든, 여러개의 소켓을 통해, 서버 그리고 클라이언트간에 데이터를 주고 받는
양방향 연결 지향성 통신이며,
소켓통신은 주로 꾸준히 연결을 유지하면서 실시간으로 데이터를 주고받아야하는,
어플에서 주로 사용됩니다.
소켓통신은 위 설명과 같이. 서버 클라이언트로 구성되며, 서버는 데이터를 받고 처리하고,
클라이언트는 데이터를 서버에 보내고, 서버에서 제공을 받을 수 있습니다.
근데 여기서 궁금한게, 서로가 어떻게 연결되는지가 궁금해지는데요.
소켓은 프로토콜, IP주소, 그리고 포트 넘버로 정의되는데요.
프로토콜은 통신 규약 약속,
포트는 네트워크 상에서 통신하기 위해 프로세스가 내부적으로 할당 받아야하는 고유한 숫자
(같은 호스트내에서 서로 다른 프로세스가 같은 포트넘버를 가질수 없습니다.
즉 같은 컴퓨터 내에서 프로그램을 식별하는 번호)
정리하자면, 소켓은 두 호스트를 연결해주는 인터페이스 역할을 한다고 생각하시면 됩니다.
2. 소켓통신의 흐름

서버(Server)
클라이언트 소켓의 연결 요청을 대기, 연결 요청이 오면 클라이언트 소켓을 생하여, 통신이 가능하게 만듭니다.
위 그림과 같이 socket() 함수를 이용하여 소켓을 생성 후 bind() 함수로 IP Port 번호 설정
listen() 클라이언트의 접근 요청으로 수신 대기열을 만들어 여러명의 클라이언트를 대기 시킬지 결정합니다.
마지막으로 accept()함수를 사용하여 클라이언트와의 연결을 기다립니다.
클라이언트(Client)
socket() 함수를 이용하여 소켓을 열고, connect()함수를 이용하여 통신 할 서버의 IP,Port번호로 통신 시도
통신을 시도시에, 서버가 accpet()함수를 이용하여, socket descrptor를 반환 함으로서 클라이언트와
서버가 서로 read(), write()를 반복하며 통신 합니다
3. 소켓 종류
소켓의 종류는 두가지로 나뉩니다.
1. 스트림(TCP)
- 양방향으로 바이트 스트림을 전송, 연결 지향성
- 오류 수정, 전송처리, 흐름제어 보장
- 송신된 순서에 따라 중복되지 않게 데이터 수신
- 소량의 데이터보다 대량의 데이터 전송에 적합
2. 데이터그램(UDP)
- 비연결형 소켓
- 데이터의 크기에 제한이 있음
- 확실하게 전달이 보장되지 않음, 데이터가 손실이 되어도, 오류가 발생되지않음
- 실시간 멀티미디어 정보를 처리하기 위해 주로 사용 ex) 전화, 게임
4. Socket 통신과 HTTP 통신의 서로 다른특징
Socket 통신의 특징
- Server와 Client가 서로 연결을 유지하는 양방향 통신이다.
- Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우 사용
- 실시간 동영상 스트리밍이나 온라인 게임 같은 경우에 자주 사용
HTTP 통신의 특징
- Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신
- Server로부터 응답을 받은 후에는 연결이 바로 종료
- 실시간 연결이 아니고. 필요한 경우에만 서버에 요청을 보내는 상황에 유용
- 요청을 보내 Server의 응답을 기다리는 어플 개발에 주로 사용됨
오늘은 Socket통신에 대해서 포스팅 해보았는데요.
궁금하신 사항이나, 틀린부분이있으면 댓글 남겨주시면 감사하겠습니다.
