목차
UDP 프로토콜
UDP User Datagram Protocol 는 인터넷에서 사용하는 프로토콜 중 구조가 가장 간단하다.
하부의 IP 프로토콜을 이용해 비연결형 서비스를 지원하는 UDP는 작지만 빠른 전송이 가능하며, 다음과 같은 특징이 있다.
- 비연결형 서비스를 제공한다.
- 헤더와 전송 데이터에 대한 체크섬 기능을 제공한다.
- Best Effort 전달 방식을 지원한다.
UDP는 상위 계층에서 받은 데이터를 IP 프로토콜에 전달하지만,
전송한 데이터그램이 목적지까지 제대로 도착했는지 확인하지 않는다.
➡ TCP보다 신뢰성이 떨어져 일반 응용 프로그래머들 사이에서는 덜 선호되고 있다.
➡ 하지만 프로토콜을 처리하는 기능이 작아 TCP보다 데이터 처리가 빠르므로 데이터 전송 시간에 민감한 응용 환경에서는 UDP를 사용하는 것이 유리하다.
UDP 헤더 구조
TCP보다 단순해 의미와 기능을 쉽게 파악할 수 있다.
또한 프로토콜에서 수행하는 기능도 간단해 프로토콜의 오버헤드가 작은 편이다.
UDP 헤더의 상단에 있는 숫자는 비트 수이고, 각 필드의 의미는 다음과 같다.
[Source Port/Destination Port(송신 포트/수신 포트)]
- 송수신 프로세스에 할당된 네트워크 포트 번호이다.
- 호스트에서 실행되는 프로세스를 구분하는 데 이용한다.
- 호스트는 IP 프로토콜의 IP 주소로 구분하므로, 인터넷에서 실행되는 네트워크 프로세스의 고유 구분자는 호스트의 IP 주소와 프로세스 포트 번호의 조합이다.
- UDP 포트 번호는 TCP 포트 번호와 독립적으로 관리되고 할당된다.
[Length(길이)]
- 프로토콜 헤더를 포함한 UDP 데이터그램의 전체 크기이다.
- 단위는 바이트이고, UDP 헤더의 크기가 8바이트이므로 최솟값은 8이다.
[Checksum(체크섬)]
- 프로토콜 헤더와 데이터에 대한 체크섬 값을 제공하여 수신 프로세스가 데이터그램 변형 오류를 감지할 수 있다.
- IP 프로토콜은 헤더만 체크섬을 계산하지만, UDP는 데이터까지 체크섬을 계산한다.
- 수신 프로세스는 체크섬 오류를 발견하면 해당 데이터그램을 버린다.
- UDP의 체크섬 기능은 옵션이므로 필드 값이 0이면 송신 프로세스가 체크섬 계산을 하지 않았다는 의미가 되어, 수신 프로세스는 체크섬으로 오류 검출 기능을 수행하지 않는다.
➡ 이경우는 IP와 UDP는 모두 사용자 데이터에 대한 오류 검사를 수행하지 않는 결과를 야기한다.
UDP 데이터그램의 Length 필드는 크기가 16비트이므로 데이터그램의 최대 크기는 이론상 65,535(0~2 16 -1)바이트이다.
그러나 응용 프로그램을 포함한 다른 계층과의 연관성 문제를 고려하여 일반적으로 8,192바이트를 넘지 않게 사용한다.
UDP는 TCP보다 구조가 아주 단순해 전송 효율이 좋으며, 고속 전송이 필요한 환경에 유용 하다.
특히 덩치가 큰 TCP를 구현하기에는 메모리 등이 작은 네트워크 장비에서 사용하기 적합하다.
UDP의 데이터그램 전송
UDP는 비연결형 서비스를 이용하여 데이터그램을 전송하며, 각 데이터그램은 전송 과정에서 독립적으로 중개된다.
그리고 데이터그램이 목적지까지 도착할 수 있도록 최선을 다하지만, 반드시 목적지에 도착하는 것을 보장하지 않는다.
또한 슬라이딩 윈도우 프로토콜과 같은 흐름 제어 기능도 제공하지 않아, 버퍼 오버플로 Buffer Overflow 에 의한 데이터 분실 오류가 발생할 수 있다.
이와 같은 이유로 UDP를 사용해 데이터그램을 전송할 때는 오류 발생 가능성을 항상 염두에 두어야 한다.
오류 유형은,
- 데이터그램 분실: 데이터가 목적지에 도착하지 못함.
- 도착 순서 변경: 데이터그램의 도착 순서가 바뀜
UDP에서의 데이터그램 분실
아래 그림은 전송 과정에서 데이터그램을 분실하는 오류를 설명한다.
송신 프로세스가 전송한 데이터그램 네 개가 첫 번째 라우터에서 두 번째 라우터로 전송되는 과정에서 3번 데이터그램에 오류가 발생하여 다음 라우터에 도착하지 못했다.
UDP는 분실 오류를 복구하는 기능을 수행하지 않으므로, 수신 프로세스에는 1, 2, 4번 데이터그램만 도착한다.
UDP에서의 데이터그램 분실 오류는 상위 계층 스스로 데이터 분실을 확인해 복구해야 한다.
UDP 헤더 구조에서 알 수 있듯이, 데이터의 순서 번호 기능을 제공하지 않으므로 데이터그램 분실 여부를 확인할 수 없다.
➡ 응용 프로그램에서 데이터 분실을 감지하려면 순서 번호와 유사한 기능을 프로그램 내부에 구현해야 한다.
UDP에서의 데이터그램 도착 순서 변경
아래 그림은 데이터그램의 전송 순서가 뒤바뀌어 수신 프로세스에 도착한 경우이다.
UDP 는 각 데이터그램을 개별 전송 경로를 선택하여 전송한다.
따라서 그림처럼 1번과 2번 데이터 그램은 아래쪽 경로로, 3번과 4번 데이터그램은 위쪽 경로로 전달될 수 있다.
또한 각 경로에서 데이터를 얼마나 빠르게 전송할 수 있는지도 예측할 수 없다.
그림에서 위쪽 경로를 선택한 3, 4번 데이터그램이 수신 프로세스에 먼저 도착하여 최종적인 도착 순서가 3, 4, 1, 2번으로 변경되었다.
데이터그램 분실 오류의 경우와 마찬가지로 도착 순서 변경 오류를 해결할 수 없는 이유는 데이터의 순서 번호 기능이 없기 때문이다.
➡ 도착 순서 변경 오류를 해결하려면 UDP를 사용하는 응용 프로그램의 내부에 순서 번호 기능이 구현되어야 한다.