UDP: User Datagram Protocol은 전송 계층의 단순한 프로토콜로, 연결 설정 없이 빠르게 데이터를 전송할 수 있도록 설계되었다
UDP의 특징
“no frills”, “bare bones”
- 불필요한 기능 없이 가장 기본적인 기능만 제공하는 전송 계층 프로토콜이다.
“best effort” 서비스
- 패킷 손실 가능성 있음 (lost)
- 패킷 순서가 뒤바뀐 채 도착할 수 있음 (delivered out-of-order)
- 가능한 한 전달하려는 방식으로 작동하며, 다음과 같은 현상이 발생할 수 있다:
connectionless (비연결성)
- 송신자와 수신자 간에 handshaking(연결 수립 과정)이 없음
- 각 UDP 세그먼트는 독립적으로 처리됨
- 연결 상태를 유지하지 않기 때문에 빠르고 간단함
UDP가 필요한 이유
연결 설정이 없음
- TCP처럼 3-way handshake 과정이 없으므로 RTT 지연을 피할 수 있음
단순성
- 송신자와 수신자는 연결 상태를 유지할 필요 없음 → 자원 소모 적음
작은 헤더 크기
- TCP보다 훨씬 간단한 구조 → 오버헤드가 적음
혼잡 제어 없음
- 네트워크가 혼잡해도, UDP는 제어 없이 빠르게 전송 가능
- 네트워크가 혼잡한 상황에서도 전송을 지속할 수 있음
UDP는 신뢰성은 보장하지 않지만, 속도, 단순성, 낮은 지연이 중요한 애플리케이션(예: 실시간 영상/음성, DNS 등)에 적합하다.
TCP보다 훨씬 가볍고, 상태 유지가 필요 없는 상황에서 효율적인 전송을 지원한다.
UDP의 주요 사용 사례
Streaming Multimedia Applications
- 예: 실시간 영상 스트리밍, 화상 통화 등
- 손실을 일부 허용할 수 있고, 전송 속도에 민감한 애플리케이션에 적합하다.
DNS (Domain Name System)
- 짧고 빠른 질의/응답이 필요한 서비스로, 신뢰성보다 응답 속도가 중요한 경우
SNMP (Simple Network Management Protocol)
- 네트워크 장비 상태를 간단히 질의하거나 설정하는 데 사용됨
HTTP/3
- UDP 위에서 동작하는 새로운 웹 전송 프로토콜. 빠른 연결 성립과 지연 최소화를 목표로 설계됨
UDP를 사용할 때 신뢰성이 필요한 경우
UDP는 기본적으로 신뢰성을 제공하지 않음
신뢰성 추가 (Reliability)
- 예: 데이터 재전송, 확인 응답(ACK) 처리 등
혼잡 제어 (Congestion Control)
- 네트워크 혼잡을 고려한 전송 속도 조절이 필요할 경우, 응용 계층에서 해당 기능을 직접 구현해야 함
- 따라서, 신뢰성이 요구되는 서비스에서는 응용 계층(application layer)에서 다음을 구현해야 함:
UDP는 단순하고 빠르며 가벼운 특성 덕분에 지연에 민감한 애플리케이션에 매우 적합하다.
그러나 신뢰성과 혼잡 제어가 필요한 경우에는 이를 응용 계층에서 보완해야 한다. HTTP/3는 그 대표적인 예시이다.
UDP: Transport Layer Actions in SNMP
구조 설명
SNMP Client와 SNMP Server는 각각 다음과 같은 프로토콜 스택을 가진다:
- application
- transport (UDP)
- network (IP)
- link
- physical
UDP 송신자의 동작 (UDP sender actions)
송신자(SNMP client) 측 UDP 계층에서 수행하는 작업:
- 응용 계층 메시지 전달받음
- 응용 계층(SNMP client)에서 생성된 메시지가 전송 계층(UDP)으로 전달된다.
- UDP 세그먼트의 헤더 필드 결정
- UDP는 세그먼트를 구성하기 위해 헤더 필드 값을 설정한다.
- 이에는 source port number와 destination port number가 포함된다.
- UDP 세그먼트 생성
- SNMP 메시지(payload)에 UDP 헤더를 추가하여 하나의 UDP 세그먼트 생성.
- 이 세그먼트는 [UDP_h | SNMP msg]와 같은 구조를 가진다.
- IP 계층에 세그먼트 전달
- 생성된 세그먼트는 IP 계층으로 전달되어 이후 물리적으로 네트워크를 통해 수신자에게 전송된다.
UDP 수신자의 동작 (UDP receiver actions)
이 그림은 UDP를 사용하는 SNMP 프로토콜의 전송 계층에서 수신 측 동작을 보여준다. 수신자(SNMP server)는 IP 계층으로부터 UDP 세그먼트를 전달받은 후 아래의 단계들을 수행한다.
수신자(SNMP server)에서의 UDP 처리 과정:
- IP 계층으로부터 세그먼트 수신
- 네트워크 계층(IP)으로부터 하나의 UDP 세그먼트를 전달받는다.
- UDP 체크섬 검증
- 세그먼트가 전송 중 손상되지 않았는지를 확인하기 위해 checksum 필드 값을 확인한다.
- 체크섬 값이 일치하지 않으면 오류로 간주하고 해당 세그먼트를 폐기한다.
- 응용 계층 메시지 추출
- UDP 헤더를 제거하고, 남은 데이터(payload)를 추출한다.
- 이 payload는 SNMP 메시지로 구성되어 있다.
- 소켓을 통해 디멀티플렉싱 수행
- UDP는 세그먼트의 목적지 포트 번호를 확인하여, 해당 포트를 사용하는 응용 계층 소켓으로 데이터를 전달한다.
- 이를 디멀티플렉싱(demultiplexing)이라고 한다.
- 예: SNMP 프로세스는 포트 161번 소켓을 사용할 수 있다.
UDP 세그먼트 포맷
이 그림은 UDP(User Datagram Protocol) 세그먼트의 구조를 보여준다. 각 필드가 어떤 역할을 하는지 설명하면 다음과 같다.
UDP 헤더 구조 (총 8바이트 고정)
필드 이름 | 크기 | 설명 |
source port # | 16비트 | 송신자의 포트 번호. 응답이 필요할 때 사용된다. |
destination port # | 16비트 | 수신자의 포트 번호. 목적지 응용 프로그램을 식별하는 데 사용된다. |
length | 16비트 | 전체 UDP 세그먼트의 길이 (헤더 + 데이터 포함) |
checksum | 16비트 | 오류 검출용 필드. 헤더와 데이터를 모두 포함하여 계산된다. |
UDP 데이터 영역 (payload)
- application data (payload): 응용 계층에서 전달된 실제 데이터가 들어가는 부분이다.
- 이 데이터는 송신 애플리케이션에서 생성되어, 수신 측의 애플리케이션으로 전달된다.
주요 특징
- UDP는 단순한 구조를 가지고 있어 오버헤드가 매우 적다.
- 헤더는 고정 크기(8바이트)이므로 빠르고 효율적인 전송이 가능하다.
- 신뢰성 보장 없음: 순서 보장, 손실 복구, 흐름 제어 없음. 필요한 경우 애플리케이션이 직접 구현해야 한다.
UDP는 송신지/수신지 포트 번호를 통해 소켓을 식별하고, checksum으로 최소한의 오류 검출을 제공한다. 데이터는 단순히 헤더 뒤에 붙여 전송되며, 수신 측에서 demultiplexing을 통해 응용 계층으로 전달된다.
UDP Checksum
목적 (Goal)
UDP 체크섬의 목적은 전송 중 발생할 수 있는 비트 뒤바뀜(flip) 등의 오류를 탐지(detect)하는 것이다.
작동 방식 예시
구분 | 1st number | 2nd number | 합계 (Checksum) |
송신 시 | 5 | 6 | 11 |
수신 시 | 4 (오류) | 6 | 10 ≠ 11 |
- 송신 측은 데이터의 합계를 계산하여 checksum으로 전송한다.
- 수신 측은 도착한 데이터를 가지고 다시 checksum을 계산한다.
- 수신 측에서 계산한 checksum과 송신 측에서 받은 checksum이 다르면 오류 감지.
오류 감지 원리
- UDP는 전송한 데이터의 각 부분을 더해 checksum을 생성한다.
- 수신 측은 동일한 방식으로 checksum을 계산하고 송신 측의 checksum과 비교한다.
- 만약 값이 일치하지 않으면 전송 중에 비트 오류가 발생했다는 신호로 간주된다.
한계
- 단순한 합 계산 방식이기 때문에 모든 오류를 탐지하지는 못함.
- 예를 들어, 두 개의 숫자가 뒤바뀌거나 우연히 같은 checksum을 만들어낼 수 있다.
- 하지만 UDP는 신뢰성이 요구되지 않는 전송에 사용되므로, 이 정도 수준의 오류 탐지는 충분하다.
요약
UDP checksum은 전송 중 오류 탐지를 위한 최소한의 기법으로, 전송된 데이터와 함께 송신 측에서 계산된 checksum을 보내고, 수신 측에서 같은 방식으로 다시 계산한 뒤 비교함으로써 오류 여부를 판단한다.
Internet Checksum
목적 (Goal)
전송된 세그먼트에서 발생할 수 있는 비트 오류(flipped bits)를 탐지하기 위한 수단이다.
UDP와 TCP 모두 이 인터넷 체크섬을 활용한다.
송신자(sender) 측 처리
UDP 세그먼트의 전체 내용을 16비트 정수의 시퀀스(sequence of 16-bit integers)로 간주한다.
여기에는 UDP 헤더뿐 아니라 IP 주소와 데이터까지 포함될 수 있다.
- 이 16비트 단위들을 one’s complement sum(1의 보수 덧셈)으로 모두 더한 뒤,
- 그 결과 값을 UDP 체크섬 필드에 저장한다.
수신자(receiver) 측 처리
수신자는 받은 세그먼트의 내용을 바탕으로 자체적으로 체크섬을 다시 계산한다.
그리고 이 값이 세그먼트에 포함되어 있던 체크섬 값과 일치하는지 비교한다.
- 일치하지 않으면: 오류 발생. 세그먼트는 전송 중 손상되었다고 판단.
- 일치하면: 오류가 감지되지 않음, 하지만 실제로는 오류가 있을 수도 있음. 이 방식은 모든 오류를 완벽하게 탐지할 수는 없기 때문이다.
정리
인터넷 체크섬은 매우 간단한 오류 탐지 방법으로, 대부분의 비트 손상 오류를 걸러낼 수 있지만,
충돌된 체크섬의 경우(즉, 오류가 있어도 합이 같아지는 경우)에는 오류를 놓칠 수 있다.
그럼에도 불구하고, UDP 같은 단순 프로토콜에서는 오버헤드가 적고, 속도가 빠르기 때문에 여전히 많이 사용된다.
Internet Checksum: 계산 예시
UDP 또는 TCP에서 사용되는 인터넷 체크섬(internet checksum)은 전송 중 데이터 손상(비트 반전 등)을 탐지하기 위해 사용된다. 아래는 그 계산 방식의 예시이다.
1. 이진수 덧셈
두 값을 더하면 17비트 결과가 나오므로, 가장 왼쪽의 캐리 비트가 발생한다. 이 비트를 wraparound하여 다시 더해야 한다.
2. Wraparound 처리
가장 왼쪽의 캐리 비트(1) 를 오른쪽 16비트 합에 다시 더해줍니다.
3. Checksum 계산
체크섬은 최종 합의 1의 보수(one’s complement)를 취한 값이다.
Internet checksum: weak protection!
상단에 비트가 뒤바뀐 경우:
- 10 → 01, 01 → 10처럼 일부 비트가 서로 반대 방향으로 바뀜.
- 비트가 바뀌었는데도 체크섬 값이 같음 → 오류를 감지하지 못함.
이유: Internet checksum은 단순한 1의 보수 덧셈 기반이라 이런 경우 취약함.
- 서로 영향을 상쇄하는 방향으로 바뀌었기 때문.
단순한 덧셈 기반이라 빠르고 가볍지만,
서로 상쇄되는 오류(비트가 반대로 바뀐 경우 등)에는 약하다.
→ 그래서 UDP의 체크섬은 “약한 보호 메커니즘”이고, TCP는 더 강한 오류 제어 (재전송 등)를 추가로 사용한다.
UDP 요약 정리
UDP(User Datagram Protocol)는 매우 단순하고 가벼운 전송 계층 프로토콜로, “no frills” (군더더기 없는) 프로토콜이라 불린다. 다음은 UDP의 주요 특징과 장점에 대한 요약이다.
특징
- 단순한 구조: 연결 설정 없이 데이터를 전송한다.
- best effort service 제공: 데이터그램은 손실될 수도 있고 순서가 뒤바뀔 수도 있다.
- connectionless 방식: 송신자와 수신자 사이에 별도의 핸드셰이크(handshaking)가 없다.
- 각 UDP 세그먼트는 독립적으로 처리된다.
장점
- 빠른 시작: 연결 설정 과정이 없으므로 RTT(Round-Trip Time) 지연이 발생하지 않음.
- 신속한 전송 가능: 네트워크가 혼잡하거나 연결 상태가 불안정해도 기능 수행 가능.
- 경량 구조: 헤더 사이즈가 작아 오버헤드가 적음.
- 기본적인 오류 감지 기능 제공: 체크섬(checksum)을 통해 전송 오류를 탐지할 수 있음.
응용 계층에서의 확장성
- UDP 위에서 HTTP/3, QUIC, DNS, VoIP 등 다양한 프로토콜이 동작함.
- UDP 자체는 신뢰성 보장 기능이 없지만, 응용 계층에서 필요한 기능을 덧붙여 구현할 수 있다.
핵심 요약
UDP는 연결이 필요 없는 간단하고 빠른 데이터 전송이 필요한 경우에 적합하며, 낮은 지연과 높은 유연성을 제공한다. 신뢰성, 순서 보장, 혼잡 제어 등이 필요한 경우에는 응용 계층 또는 TCP와 같은 프로토콜의 도움을 받아야 한다.
'CS 지식 > 네트워크' 카테고리의 다른 글
[네트워크] RDT(reliable data transfer)의 개념과 진화, FSM 설명 - 신뢰할 수 있는 데이터 전송 프로토콜 (0) | 2025.05.05 |
---|---|
[네크워크] 멀티플렉싱과 디멀티플렉싱 - TCP, UDP, 연결지향 (0) | 2025.04.24 |
[네트워크] 비디오 스트리밍 원리와 DASH, P2P, CDN 소개 (0) | 2025.04.10 |
[네트워크] DNS(Domain Name System)와 메세지 포맷, 보안 (1) | 2025.04.04 |
[네트워크] 이메일 시스템과 프로토콜(SMTP, IMAP, POP, HTTP) (1) | 2025.04.04 |
댓글