3.3 비연결형 트랜스포트 : UDP
RFC 768에서 정의된 UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다. UDP는 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않는다.
UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에 핸드셰이크를 사용하지 않는다. 이런 이유로 UDP를 비연결형이라고 한다.
UDP가 유용한 경우
- 무슨 데이터를 언제 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어 : 애플리케이션 프로스세가 데이터를 UDP에게 데이터를 전달하자마자 UDP는 데이터를 UDP 세그먼트로 만들고, 그 세그먼트를 즉시 네트워크 계층으로 전달한다.
- TCP는 혼잡 제어 메커니즘을 갖고 있다. 혼잡 제어 메커니즘은 목적지 호스트들과 출발지 호스들 사이에서 하나 이상의 링크가 과도하게 혼잡해지면, 트랜스포트 계층 TCP 송신자를 제한한다.
- TCP는 신뢰적인 전달이 얼마나 오래 걸리는지에 관계없이 목적지가 세그먼트의 수신 여부를 확인응답 할 때까지 데이터의 세그먼트 재전송을 계속 한다.
- 연결 설정이 없음 : TCP는 세 방향 핸드셰이크(three-way handshake)를 사용한다. 반면 UDP는 공식적인 사전준비 없이 전송한다. 그러므로 UDP는 연결을 설정하기 위한 어떤 지연도 없다.
- 연결 상태가 없음 : UDP는 연결 상태가 없으므로 애플리케이션 프로그램이 TCP보다 UDP에서 동작할 때 일반적으로 좀 더 많은 액티브 클라이언트를 수용할 수 있다.
- 작은 패킷 오버헤드 : TCP는 세그먼트마다 20바이트의 헤더 오버헤드를 갖지만, UDP는 단지 8바이트의 오버헤드를 갖는다.
UDP는 혼잡 제어를 하지 않는다.
- 혼잡 제어는 네트워크가 폭주 상태에 빠지는 것을 막기 위해 필요하다.
- UDP가 혼잡 제어를 하지 않으면 UDP 송신자에 의해 발생한 높은 손실률은 그 손실률을 감소시키기 위해 TCP 송신자들이 속도를 줄이도록 할 것이다.
애플리케이션이 신뢰성을 제공한다면 UDP는 신뢰적인 데이터 전송을 할 수 있다.
- QUIC 프로토콜은 UDP상에서 애플리케이션 계층에 신뢰성을 구현했다.
3.3.1 UDP 세그먼트 구조
- 포트번호
- 목적지 호스트가 목적지 종단 시스템에서 동작하는(역다중화 기능을 수행하는) 정확한 프로세스에게 애플리케이션 데이터를 넘기게 해준다.
- 체크섬(checksum)
- 세그먼트에 오류가 발생했는지를 검사하기 위해 수신 호스트가 사용한다.
- 길이
- 헤더를 포함하는 UDP 세그먼트의 길이(바이트 단위)를 나타낸다.
- 애플리케이션 데이터
- UDP 데이터그램의 데이터 필드에 위치한다.
3.3.2 UDP 체크섬
UDP 체크섬은 오류 검출을 위한 것이다. 체크섬은 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사하는 것이다.
많은 링크 계층 프로토콜이 오류 검사를 제공하는데도 불가하고 UDP가 체크섬을 제공하는 이유
- 출발지와 목적지 사이의 모든 링크가 오류 검사를 제공한다는 보장이 없다.
- 주어진 링크 간의 신뢰성과 메모리의 오류 검사가 보장되지도 않고, 종단 간의 데이터 전송 서비스가 오류 검사를 제공해야 한다면, UDP는 종단 기반으로 트랜스포트 계층에서 오류 검사를 제공해야 한다.
- 종단과 종단의 원칙(end-end principle)의 예다.
UDP는 오류 검사를 제공하지만, 오류를 회복하기 위한 어떤일도 하지 않는다.
'네트워크' 카테고리의 다른 글
연결지향형 트랜스포트 : TCP (1) | 2024.02.14 |
---|---|
신뢰적인 데이터 전송의 원리 (0) | 2024.02.01 |
트랜스포트 계층 개요, 다중화와 역다중화 (0) | 2024.01.26 |
DNS (1) | 2024.01.22 |
웹과 HTTP (0) | 2024.01.15 |