3.3 Connectionless Transport: UDP
만약 우리가 트랜스포트 계층 프로토콜의 설계에 관심이 있다고 하자. 그렇다면, 이 프로토콜은 적어도 네트워크 계층과 해당하는 애플리케이션 레벨 프로세스 간의 데이터를 넘겨주기 위해서 multiplexing과 demultiplexing 서비스를 제공해야 한다.
[RFC 768]에 정의된 UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 통신한다. UDP는 multiplexing과 demultiplexing 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않는다. 다시 말해, 애플리케이션이 UDP로 통신한다면, 이는 IP와 직접 통신하는 것과 다름없다.
UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층의 개체들과 수신 트랜스포트 계층 개체들 사이에 handshake를 사용하지 않는다는 점에 주의하자. 이런 이유로 UDP를 connectionless라고 부른다.
DNS는 일반적으로 UDP를 사용하는 애플리케이션 계층 프로토콜의 예이다. 호스트에서 DNS Application이 Query를 생성할 때, DNS Query Message를 작성하고, UDP에게 메시지를 넘겨 준다. 목적지 종단 시스템 상에서 동작하는 UDP 개체와 호스트 측의 UDP는 어떠한 handshake도 수행하지 않고 메시지에 헤더 필드를 추가한 후에 최종 세그먼트를 네트워크 계층으로 넘겨준다. 네트워크 계층은 UDP 세그먼트를 데이터그램으로 encapsulation하고 name 서버에 데이터그램을 송신한다. 만약 query host가 응답을 수신하지 못하면, query를 다른 name server로 송신하거나, 요청한 애플리케이션으로 응답을 수신할 수 없다는 것을 통보한다.
그렇다면, 이렇게 비신뢰적이며, 연결지향적이지 않은 UDP를 굳이 쓰는 이유는 무엇일까?
다음의 경우 UDP가 더 적합하다.
• Finer application-level control over what data is sent, and when (애플리케이션 레벨이 데이터 송신에 대해서 정교한 제어를 할 수 있다) : UDP에서 애플리케이션 프로세스가 데이터를 UDP에게 전달하자마자 UDP는 데이터를 UDP 세그먼트로 만들고 즉시 해당 세그먼트를 네트워크 계층으로 전달한다. 이에 반해, TCP는 congestion control mechanism을 가지고 있다. TCP는 하나 이상의 링크가 과도하게 복잡해지면, 트랜스포트 계층의 TCP 센더를 조절한다. 또한 TCP 는 신뢰적인 전달이 얼마나 오래 걸리는지에 관계없이 목적지가 세그먼트 수신 여부를 확인해줄 때까지 데이터를 계속 보낼 것이다. Real-time Application은 종종 최소의 전송률만을 요구하고, 지나치게 지연되는 세그먼트 전송을 원하지 않는다. 그리고 조금의 데이터 손실은 허용할 수도 있으므로, TCP의 서비스 모델은 이들 애플리케이션의 요구와는 맞지 않는다. 이들 애플리케이션은 UDP를 사용할 수 있고, 애플리케이션의 한 부분으로서 UDP의 기본 세그먼트 전달 외에 필요한 어떤 추가 기능을 구현할 수 있게 된다.
• No connection establishment (연결 설정이 없다) : UDP는 TCP와 달리 "three-way handshaking"이 없다. 따라서 UDP는 연결을 설정하기 위한 어떠한 지연 시간도 갖지 않는다.
• No connection state (연결 상태가 없다) : TCP는 종단 시스템 간의 연결 상태를 유지한다. 이 연결 상태에는 수신 버퍼와 송신 버퍼, congestion control parameter, sequence number and acknowledgement number parameters가 포함된다. 이에 비해 UDP는 그 어떤 상태 정보도 기록하지 않는다. 따라서 UDP는 TCP보다 더 많은 클라이언트를 수용할 수 있다.
• Small packet header overhead (작은 패킷 헤더 오버헤드) : TCP가 세그먼트마다 20 BYTES 의 헤더 오버헤드를 갖는 반면 UDP는 겨우 8 bytes의 오버헤드만을 갖는다.
Application | Application-Layer Protocol | Underlying Transport Protocol |
---|---|---|
Electronic mail | SMTP | TCP |
Remote terminal access | Telnet | TCP |
Web | HTTP | TCP |
File transfer | FTP | TCP |
Remote file server | NFS | Typically UDP |
Streaming multimedia | typically proprietary | UDP or TCP |
Internet telephony | typically proprietary | UDP or TCP |
Network management | SNMP | Typically UDP |
Name translation | DNS | Typically UDP |
예를 들어, Network management를 위한 SNMP는 TCP보다 UDP가 좋다. 이는, 네트워크가 혼잡한 상태에 있을 때 자주 동작하기 때문인데, 이런 혼잡한 상태에서는 신뢰적이거나 혼잡 제어된 데이터를 전송하는 것은 수행하기 어렵기 때문이다. 또한 DNS는 TCP의 연결 설정을 피하기 위해서 UDP에서 동작한다.
'IT > Network' 카테고리의 다른 글
[Wiki] PPPOE는 무엇일까? (2) | 2018.03.08 |
---|---|
[Network] Load Balancing and Clustering (로드밸런싱과 클러스터링) (0) | 2018.01.15 |
[Network] Transport Layer (트랜스포트 계층) - 3.2 다중화와 역다중화 (0) | 2018.01.15 |
[Network] Transport Layer (트랜스포트 계층) - 3.1 트랜스포트 계층 서비스 및 개요 (0) | 2018.01.13 |
[Network] Application Layer (애플리케이션 계층) - 2.6 비디오 스트리밍 및 DASH 정리 (2) | 2018.01.12 |