본문 바로가기
네트워크, 서버/소켓,프로토콜

(소켓,프로토콜) UDP소켓

by 흥부와놀자 2020. 9. 22.

데이터의 경계

UDP는 TCP와 다르게 데이터의 경계가 있다. 그래서 하나의 패킷이 하나의 데이터가 되는데, 이때문에 UDP소켓이 전송하는 패킷을 데이터그램이라고 부른다.

 

TCP는 데이터의 경계가 없다. send, recv 함수를 통해 해당 소켓의 입출력 버퍼를 읽고 쓰고 하지만 실제 OS가 보낼때 해당 데이터가 나뉘어서 갈수도 있다. 그래서 받는 입장에선 내가 받을 데이터의 용량 만큼 계속 recv해줘야 한다.

 

하지만 UDP는 입출력 버퍼에 먼저 저장되는게 아닌 곧 바로 OS단에서 데이터를 전송한다. 물론 그렇다고 함수가 리턴했을때 바로 데이터를 보냈다고 확신되는건 아니다. 다만 보낸 횟수에 따라 데이터가 나뉘어서 상대 호스트에 전달되기 때문에 3번 send하였으면 상대방도 3번 recv해줘야 한다.

 

다대다 통신

소켓과 소켓이 1:1 통신만 가능한 TCP와 달리 UDP는 하나의 소켓이 여러 주소의 소켓에게 데이터를 전송할 수 있다.

UDP소켓의 sendto함수의 경우 상대 소켓의 주소를 지정하고 데이터를 보내고 해당 주소를 폐기하는 과정을 거친다.

물론 connect하여 주소를 지정하고 폐기하는 과정을 생략하고 해당 상대와만 통신할 수도 있다.

 

헤더

 

TCP헤더
UDP헤더

사실상 헤더만 봐도 UDP와 TCP의 성격이 나온다. TCP는 발신자, 목적지 주소 뿐만아니라 시퀀스넘버, ACK넘버, WIndow사이즈 등 여러 정보를 담고 있다. 하지만 UDP는 딱 주소정보만 포함하고 있는데, 이것이 UDP가 최소한의 정보로 가볍게 보내는 프로토콜임을 알 수있다.

실제 UDP의 역활은 IP계층에서 온 데이터를 맞는 UDP 소켓에 전달해주는 역활 밖에 하지 않는다.