본문 바로가기

OSI Model

16. UDP (4계층 Transport Layer전송 계층)

(4계층 Transport Layer전송 계층)



UDP(User Datagram Protocol)

UDP(User Datagram Protocol)는 인터넷에서 사용하는 프로토콜중 중 구조가 가장 간단하다. 

하부의 IP 프로토콜을 이용해 비연결형 서비스 지원하는 UDP는 작지만 빠른 전송이 가능하다

 

*특징

• 비연결형 서비스를 제공한다.

• 헤더와 전송 데이터에 대한 체크섬 기능을 제공한다.

• Best Effort 전달 방식을 지원한다.

 

UDP는 상위 계층에서 받은 데이터를 IP 프로토콜에 전달하지만 전송한 데이터그램이 목적지까지 제대로 도착했는지는 확인하지 않는다. 

따라서 TCP보다 신뢰성이 떨어져 일반 응용 프로그래머가 덜 선호한다. 하지만 프로토콜을 처리하는 기능이 작아 TCP보다 데이터 처리가 빠르므로 데이터 전송 시간에 민감한 응용 환경에서는 UDP를 사용하는 것이 유리하다.

 

UDP 헤더

UDP 헤더(UDP Header)의 구조다. TCP보다 단순하여 의미와 기능을 쉽게 파악할 수 있다. 

또한 프로토콜에서 수행하는 기능도 간단해 프로토콜 오버헤드가 작은 편이다.

 

UDP 헤더

 

 

UDP 헤더 상단에 있는 숫자는 비트 수고, 각 필드의 의미는 다음과 같다.

 Source Port/Destination Port(송신 포트/수신 포트) : 송수신 프로세스에 할당된 네트워크 포트번호다. 

호스트에서 실행되는 프로세스를 구분하는 데 이용한다. 

호스트는 IP 프로토콜의 IP 주소로 구분하므로, 인터넷에서 실행되는 네트워크 프로세스의 고유 구분자는 호스트의 IP 주소와 프로세스 포트 번호의 조합이다. 

UDP 포트 번호는 TCP포트 번호와 독립적으로 관리되고 할당된다.

 

 Length(길이) : 프로토콜 헤더를 포함한 UDP 데이터그램의 전체 크기다. 단위는 바이트고, UDP 헤더의 크기가 8바이트므로 최솟값은 8이다.

 

 Checksum(체크섬) : 프로토콜 헤더와 데이터에 대한 체크섬 값을 제공하여 수신자가 데이터그램 변형 오류를 감지할 수 있도록 해준다.

 IP 프로토콜에서는 헤더만 체크섬을 계산하지만, UDP에서는 데이터까지 체크섬을 계산한다. 수신자는 체크섬 오류를 발견하면 해당 데이터그램을 버린다. 

 

UDP의 체크섬 기능은 옵션이므로 필드 값이 0이면 송신자가 체크섬 계산을 하지 않았다는 의미가 되어, 수신 프로세스에서는 체크섬으로 오류검출 기능을 수행하지 않는다.

 

UDP 데이터그램의 Length 필드는 크기가 16비트므로 데이터그램의 최대 크기는 이론상 65,535(0~216-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를 사용하는 응용 프로그램에 내부에 데이터 순서 번호 기능이 구현되어야 한다.