개요

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

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

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

UDP와 TCP 비교

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

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

패킷 구조

UDP 헤더는 4개의 필드로 구성되며, 그 각각은 2바이트(16비트)로 이루어져 있다.

비트 내용
16 bit 출발 포트
16 bit 도착 포트
16 bit 헤더 길이
16 bit 체크섬
32 bit 출발 IP 주소
32 bit 도착 IP 주소

체크섬

송신 측에서 udp는 세그 먼트 안에 있는 모든 16비트 워드 단위로 더하고 이에 대하여 다시 1의 보수를 수행하며, 덧셈 과정에서 발생하는 오버플로는 "윤회식 자리올림"을 한다.
수신자에서는 체크섬을 포함한 4개의 모든 16비트 워드들을 더한다. 만약 패킷에 어떤 오류도 있지 않다면, 수신자에서의 합은 2진수 자리에 1만이 있을 것이다. (1의 보수를 취한것과 1의 보수를 취하지 않은 것을 더하면 2 진수 자리에 1 밖에 있을 수 없다.) 만약 비트 중에서 하나라도 0이 있다면 패킷에 오류가 발생한 것이다.
사실 UDP는 IP 헤더의 일부 필드도 계산한다. UDP는 오류 검사를 제공하지만 오류를 회복하기 위한 어떤 일도 하지 않는다.