본문 바로가기
COMPUTER SCIENCE/Network

[Network] Transport Layer - Connectionless Transport: UDP

by 민트맛녹차 2022. 12. 8.

UDP 는 application process 의 message 를 가져와 몇 가지 filed 를 붙여 만든 segements 를 network layer 로 보낸다. network layer 는 segement 를 IP datagram 으로 캡슐화해 best-effort 시도를 한다. segment 가 host 에 도착하면 port number 를 사용해 올바른 process 로 data 를 전달한다.

UDP 는 segment 전송 전에 sender 와 receiver 사이에 handshaking 이 없어, conntectionless 하다고 한다.

UDP 를 사용하는 대표적인 application-layer protocol 로 DNS 가 있다. DNS application 이 DNS query message 를 만들고 보낼 때 UDP 를 사용한다.

TCP 는 reliable transfer service 를 제공해 UDP 보다 나아보이지만, 몇몇 application 은 다음과 같은 이유들로 UDP 의 사용이 더 적절하다. 

  • Finer application-level control over what data is sent, and when : UDP 는 application process 가 data 를 전달하면 UDP segements 로 캡슐화하여 network layer 로 즉시 전달한다. 반면, TCP 는 congetsion-control mechanism 을 가지고 전달 시간에 상관 없이 destination 이 segment 의 수신을 확인할 때 까지 segment 를 재전송한다. 따라서 minimum sending rate 를 요구하는 real-time applications 는 segment trasmission 의 delay 를 원하지 않고 data loss 를 견딜 수 있으므로 UDP 를 사용한다. 
  • No connection establishment : TCP 는 데이터 전송 전에 three-way handshaking 을 통해 TCP connection 을 만들어 delay 가 생기는반면, UDP 는 어떠한 전처리들 없이 데이터를 전송한다.
  • No connection state : TCP 는 end systems 에서 TCP 의 reliable data transfer 과 congestion control 에 필요한 connection state 를 유지한다. 반면, UDP 는 connection state 를 유지하지 않아 특정 appplication 의 server 에서 TCP 보다 더 많은 active clients 를 지원하도록 한다.
  • Small packet header overhead : TCP segment 는 20 bytes 의 header overhead 를 갖지만, UDP 는 8 bytes 의 header overhead 를 가진다.

UDP 는 network management(SNMP) 에 사용되는데 network 가 stressed state 이여도 작동해야 하기 때문이다. realiable, congestion-controlled data transfer 은 이러한 환경에서 성공하기 어렵다. DNS 또한 UDP 를 사용한다. multimedia application 은 적은 양의 packet loss 를 견딜 수 있고, TCP's congestion control 에 반응이 나쁘기 때문에 주로 UDP 를 사용한다. 

UDP 의 congestion control 의 부재는 UDP sender 와 reciver 사이에 high loss rates 를 초래한다. 따라서 application layer 에서 reliability 를 추가해 UDP 의 reliable data transfer 를 가능하게 한다. 그 예로, QUIC  protocol 은 Google Chrome brower 에 사용되며, UDP 위의 application-layer protocol 에서 reliability 를 구현한다.

 

 

UDP Segment Structure

UDP header 는 모두 4개의 fields 를 가지고, 2 bytes(16 bits) 의 크기를 가진다. port numbers 는 destionation host 가 올바른 pocess 로 application data 를 보내주도록 한다. length field 는 UDP segment(header + data) 의 bytes 수를 명시한다. data field 의 크기가 UDP segment 마다 다르기 때문에 length value 를 명시해야한다. checksum 은 receiving host 가 segment 에 error 가 있는지 확인하기 위해 사용된다. 참고로 checksum 은 IP header 의 일부 filed 에대해서도 계산된다.

 

UDP Checksum

UDP checksum 은 error detection 을 위해 제공된다. 즉, UDP segments 내의 bits 가 전송 중에 변환되었는지 확인하기 위해 사용된다. 

sender 는 다음의 과정을 통해 UDP checksum field 를 채운다.

  1. header field 를 포함한 segment 의 contents 를 16-bit 로 바꾸어 더한다.
  2. 만약 더하는 중 carryout 이 생긴다면 해당 값을 결과에 다시 더한다.
  3. sum 값에 1의 보수를 취해 checksum 을 구한다
  4. 구한 checksum 값을 UDP checksum field 에 넣는다.

receiver 는 전달받은 segment 의 checksum 을 계산한다. 계산된 checksum 이 checksum filed 와 일치한다면 error 가 감지되지 않은것이고, 일치하지 않는다면 error 가 감지된 것이다. 

비록 UDP 가 error checking 을 제공하더라도, error 를 회복하기 위해 아무것도 하지 않는다. UDP 의 구현체들은 손상된 segment 를 무시하거나, 경고와 함께 손상된 segment 를 전달한다. 

 

참조
Computer Networking _ A Top Down Approach, 7th, converted
https://code-lab1.tistory.com/25

댓글