Skip to content

User Datagram Protocol

사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)은 인터넷 프로토콜 스위트의 주요 프로토콜 가운데 하나이다. 1980년에 데이빗 리드가 설계하였고, 현재 IETF의 RFC 768로 표준으로 정의되어 있으며, TCP와 함께 데이터그램으로 알려진 단문 메시지를 교환하기 위해서 사용된다. UDP는 유니버설 데이터그램 프로토콜(Universal Datagram Protocol)이라고 일컫기도 한다.

UDP의 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다. UDP는 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정한다.

UDP를 사용하는 네트워크 애플리케이션에는 도메인 이름 서비스 (DNS), IPTV, 음성 인터넷 프로토콜 (VoIP), TFTP, IP 터널, 그리고 많은 온라인 게임 등이 있다.

UDP와 TCP 비교

TCP는 데이터를 주고 받을 양단 간에 먼저 연결을 설정하고 설정된 연결을 통해 양방향으로 데이터를 전송하지만, UDP는 연결을 설정하지 않고 수신자가 데이터를 받을 준비를 확인하는 단계를 거치지 않고 단방향으로 정보를 전송한다.

  • 신뢰성 - TCP는 메시지 수신을 확인하지만 UDP는 수신자가 메시지를 수신했는지 확인할 수 없다.
  • 순서 정렬 - TCP에서는 메시지가 보내진 순서를 보장하기 위해 재조립하지만 UDP는 메시지 도착 순서를 예측할 수 없다.
  • 부하 - TCP보다 속도가 일반적으로 빠르고 오버헤드가 적다.

Packet structure

UDP Header

Offsets

Octet

0

1

2

3

Octet

Bit

 0

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

0

0

Source port

Destination port

4

32

Length

Checksum

Brief

UDP는 IP에 두가지 기능을 추가 하였다.

  • 포트 번호
  • Checksum

IP와 마찬가지로 UDP도 연결성이 없고 안정성을 추구하지 않는다. TCP는 PMTUD 알고리즘으로 IP단편화를 피하지만 UDP는 없다. 그래서 IP단편화가 종종 발생한다. UDP 기반 응용 프로그램은 대게 IPv4재조립 버퍼 최소 크기인 576 바이트 보다 작은 데이터그램 크기를 이용해 IP단편화를 피한다. 576에서 8바이트는 UDP 헤더, 20바이트는 IP헤더에서 쓰므로 UDP 사용 가능 크기는 548이다.

UDP vs TCP

TCP는 데이터를 주고 받을 양단 간에 먼저 연결을 설정하고 설정된 연결을 통해 양방향으로 데이터를 전송하지만, UDP는 연결을 설정하지 않고 수신자가 데이터를 받을 준비를 확인하는 단계를 거치지 않고 단방향으로 정보를 전송한다.

  • 신뢰성 - TCP는 메시지 수신을 확인하지만 UDP는 수신자가 메시지를 수신했는지 확인할 수 없다.
  • 순서 정렬 - TCP에서는 메시지가 보내진 순서를 보장하기 위해 재조립하지만 UDP는 메시지 도착 순서를 예측할 수 없다.
  • 부하 - TCP보다 속도가 일반적으로 빠르고 오버헤드가 적다.

UDP 패킷 파편화

Q:

I've read a number of articles about UDP packet sizes but have been unable to come to a conclusion on whats correct.
A number of services restrict the largest UDP packet to 512 bytes (like dns)
Given the minimum MTU on the internet is 576 , and the size of the IPv4 header is 20 bytes, and the UDP header 8 bytes. This leaves 548 bytes available for user data
Would I be able to use packets up to the size of 548 without packet fragmentation? Or is there something the creators of DNS knew about, and that why they restricted it to 512 bytes.
Could I even go higher than 548 bytes safely?

A:

It is true that a typical IPv4 header is 20 bytes, and the UDP header is 8 bytes.
However it is possible to include IP options which can increase the size of the IP header to as much as 60 bytes.
In addition, sometimes it is necessary for intermediate nodes to encapsulate datagrams inside of another protocol such as IPsec (used for VPNs and the like) in order to route the packet to its destination.
So if you do not know the MTU on your particular network path, it is best to leave a reasonable margin for other header information that you may not have anticipated.
A 512-byte UDP payload is generally considered to do that, although even that does not leave quite enough space for a maximum size IP header.

UDP Broadcast

UDP Multicast

See also

Favorite site

References


  1. Things_to_consider_when_using_UDP_-Meetup-_TOAST_Cloud.pdf