Chapter 3.3 UDP
Computer Networking : A Top Down Approach 7th Edition, Global Edition Jim Kurose, Keith Ross
UDP : User Datagram Protocol [RFC768]
User Datagram Protocol의 축약어로 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종이다.
UDP는 TCP와 달리 Transport-layer Protocol이 할 수 있는 최소 기능인 Multiplexing과 Demultiplexing, 오류 검사(checksum)만으로 동작한다.
UDP는 Segment를 송신하기 전에 TCP 처럼 상대방과의 연결이 잘 이루어졌는지 확인(3-way handshake) 하지 않는다.
* TCP 3-way Handshake 란?
TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.
TCP 3-way handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에
먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
이러한 이유로 비연결형(connectionless)이라고 한다.
connectionless:
•no handshaking between UDP sender, receiver
•each UDP segment handled independently of others
UDP의 사용
- 도메인 이름 서비스(DNS)
- IPTV
- 음성 인터넷 프로토콜(VoIP)
- TFTP, RTSP, RIP, OSPF
- NTP(Network Time Protocol)
- IP Tunnel
- Online game(Client - Server)
UDP를 사용하는 애플리케이션 계층 프로토콜의 하나인 DNS의 경우, 브라우져가 서버와의 데이터 교환을 위해서는 DNS를 통해 서버 컴퓨터의 IP주소를 알아낸다.
UDP 특징
1. Finer application-level control over what data is sent, and when
(애플리케이션 레벨이 데이터 송신에 대해서 정교한 제어를 할 수 있다.)
UDP의 경우, 애플리케이션 프로세스가 데이터를 UDP에게 전달하자마자 UDP는 데이터를 Segment로 만들고 즉시 아래의 Network-layer로 전달한다.
이에 반해 TCP는 혼잡제어(congestion control) 매커니즘을 가지고 있어서 이를 이용해 호스트들 사이의 링크가 혼잡해지면 TCP 송신자를 조절한다. 또한, 목적지로부터 Segment의 수신 여부 확인(ACK)응답을 받기 전까지 계속해서 Segment를 재전송하게 된다.
TCP의 이러한 특징은 실시간(Real-time) 어플리케이션(예: 라이브 방송)에서는 적합하지 않다. 영상의 픽셀에서 점(.)의 크기만한 픽셀을 받지 못하였다고 버퍼링에 걸리는 것은 매우 비효율적이기 때문이다. 최소한의 전송률만을 요구하고 지나지게 지연되는 전송은 적절하지 않다.
이러한 실시간 어플리케이션의 경우 UDP를 사용한다면 기본 세그먼트 전달 외에 필요한 추가 기능을 구현할 수 있다.
2. No connection establishment(연결 설정이 없다)
위에서 설명하였 듯 UDP는 connectionless 이다. TCP처럼 데이터 전송을 시작하기 전에 3-way handshake를 사용하지 않는다.
3. No connection state(연결 상태가 없다)
TCP는 종단 시스템(End system)에서 연결 상태를 유지한다. 이 연결상태에는 수신버퍼, 송신버터, 혼잡제어 파라미터, sequence number, ACK number 가 포함된다. 허나 UDP는 연결 상태를 유지하는 기능의 프로토콜이 아니므로 이 파라미터 중 아무것도 기록하지 않는다. 따라서 일반적으로 특정 어플리케이션에 할당된 서버는 애플리케이션이 TCP보다 UDP가 더 많은 클라이언트를 수용할 수 있다.
4. Small packet header overhead(작은 패킷 헤더 오버헤드)
TCP가 Segment 마다 20byte의 헤더 오버헤드를 갖는 반면, UDP는 겨우 8byte의 오버헤드를 가진다.
UDP segment header
애플리케이션 데이터는 UDP 세그먼트의 data 필드에 위치한다. 즉, 실질적으로 보내려고 하는 data가 위치하는 곳이다.
그 위에 위치한 4가지의 필드들은 이 data를 주고 받기 위한 최소한의 형식적인 필드이다. (최소 기능으로만 동작한다는 것은 위에서도 언급하였음) 체크섬(checksum)은 Segment에 오류가 발생했는지 검사하기 위해 수신 호스트에 의해 사용된다.
한눈에 봐도 UDP가 좀 더 가벼워(=만들기 간단, 빠름) 보인다.
UDP checksum
체크섬은 오류를 검출하기 위해 사용한다.
간단히 말해서 지금 받은 데이터가 출발지로부터 목적지까지 이상없이 잘 받아졌는가 확인할 때 사용한다는 것이다.
송신측
송신측에서 UDP는 세그먼트를 16byte로 나누어 서로 더하고
treat segment contents, including header fields, as sequence of 16-bit integers
이에 대하여 1의 보수를 수행하며, 덧셈 과정에서 발생하는 overflow는 자리 올림을 한다.
checksum: addition (one’s complement sum) of segment contents
이 결과는 UDP 세그먼트의 체크섬 필드에 삽입된다.
sender puts checksum value into UDP checksum field
수신측
수신측에서는 체크섬을 포함한 모든 16비트 워드를 더한다. 위 그림에서 만약 패킷에 어떤 오류도 존재하지 않는다면 소신자에서의 합은 1111 1111 1111 1111 이 될 것이다. 만약 비트 중 하나라도 0이 있다면 (가령 1011 1111 1111 1111) 패킷에 오류가 발생했음을 알 수 있다.
UDP는 오류가 있는지 없는지 검사를 하지만 오류가 있다고 해서 어떠한 일도 하지 않는다.
'전공 공부 정리' 카테고리의 다른 글
Computer Network[05] - principle of reliable data transfer(2) (0) | 2020.03.25 |
---|---|
Computer Network[04] - principle of reliable data transfer(1) (0) | 2020.03.23 |
MySQL 기본 쿼리 명령어 (0) | 2020.03.19 |
Computer Network[02] - Multiplexing / Demultiplexing (0) | 2020.03.13 |
[Database] Database Management System & SQL (0) | 2020.03.12 |