UDP

youngwiki

상위 문서: Transport Layer

개요

UDP(User Datagram Protocol)는 transport layer에서 작동하는 프로토콜로, application layer와 network layer간의 데이터를 전달을 담당한다. 동일 계층에서 사용하는 또 다른 프로토콜로는 TCP가 있다.

UDP의 특징

UDP는 Transport Layer가 수행해야 하는 기능 중 가장 최소한만을 수행한다. 즉, UDP는 multiplexing/demultiplexing 와 간단한 오류 검사만을 제공할 뿐, TCP가 제공하는 다양한 서비스들, reliable data transfer를 제공하지 않는다. 이는 UDP가 segment를 전송하기 전, 송수신 transport layer간의 handshaking을 거치지 않는 connectionless 프로토콜이기 때문이다. 사실, 애플리케이션 개발자가 TCP 대신 UDP를 선택한다면, 해당 애플리케이션은 거의 직접 IP와 대화하게 되는 셈이다.

UDP는 애플리케이션 프로세스로부터 message를 받아, multiplexing/demultiplexing 서비스를 위한 송수신 port 번호 필드와 다른 두 개의 필드를 헤더 파일로 붙이고, 그 segment를 network layer를 넘긴다. Network layer는 이 segment를 IP datagram에 캡슐화하고, 그 segment를 수신 호스트에 best-effort으로 전달하려 한다. Segment가 수신 호스트에 도착하면, UDP는 목적지 port 번호를 사용해 해당 데이터를 올바른 애플리케이션 프로세스에 전달한다. 하지만 UDP만 써도 신뢰성있는 전송이 가능하며, 이는 애플리케이션에서 구현된다.

또한 UDP는 TCP와는 달리 congestion control[1]을 지원하지 않는다. 이는 전체 네트워크에 대해서는 부하를 거는 등의 문제를 일으키는 요소이기도 하지만, UDP에 한정하여보면 TCP의 congestion control로 인한 혜택을 직접적으로 볼 수 있는 부분이기도 하다.

UCP가 사용되는 곳

TCP는 신뢰성 있는 데이터 전송(reliable data transfer)을 제공하는데, UDP는 그렇지 않다. 그럼에도 여전히 UDP가 사용되는 이유는 다음과 같다:

  • TCP는 혼잡 제어와 신뢰성 보장을 위해 데이터를 전송하기 전 handshaking을 하고, 이외에도 전송을 늦추거나 재전송을 한다.
    • 이는 실시간 오디오/비디오 스트리밍, 온라인 게임, VoIP등 전송 속도 보장, 낮은 지연이 더욱 중요하다.
      즉 이러한 앱들은 약간의 손실 허용은 허용되므로 재전송이나 지연이 최소화되는 UDP가 사용된다.
    • DNS는 빠른 질의-응답이 중요하기 때문에 UDP를 사용한다.
  • TCP는 수신/송신 버퍼, congestion control parameter, 데이터의 순서 등의 state들을 저장하지만, UDP는 이를 저장하지 않는다.
    이를 통해 서버가더 많은 클라이언트를 처리할 수 있다.
  • 또한 UDP는 TCP에 비해 segment의 헤더 파일이 더 작고 빠르다.

UDP segment structure

UDP 세그먼트는 크게 두 부분으로 나뉘어 있다:

  • 헤더 (Header): 8바이트
  • 데이터 (Payload): 애플리케이션이 전달하는 실제 데이터

또한 UDP의 헤더는 아래 표와 같이 구성된다.

필드 이름 크기(byte) 설명
Source Port # 2바이트 (16비트) 송신 측 포트 번호 – 응답 받을 때 사용됨
Destination Port # 2바이트 (16비트) 수신 측 포트 번호 – 목적 애플리케이션 식별용
Length 2바이트 (16비트) 헤더 + 데이터 전체 길이(byte)
Checksum 2바이트 (16비트) 오류 검사용 필드 (데이터 손상 여부 확인)

각주

  1. traffic congestion이 전송 속도를 줄이는 메커니즘