UDP의 구조

UDP의 구조

1. UDP란?

UDP 개념

┌─────────────────────────────────────────────────────────────┐
│               UDP (User Datagram Protocol)                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  정의:                                                      │
│  • 전송 계층에서 동작하는 비연결형 프로토콜                 │
│  • 신뢰성보다 속도와 효율성을 중시                          │
│  • 간단한 헤더 구조 (8바이트 고정)                          │
│                                                             │
│  핵심 특징:                                                 │
│  ─────────────────────────────────────────                  │
│  • 비연결형 (Connectionless)                                │
│  • 신뢰성 보장 없음 (No Reliability)                        │
│  • 순서 보장 없음 (No Ordering)                             │
│  • 빠른 전송 (Fast)                                         │
│  • 낮은 오버헤드 (Low Overhead)                             │
│  • 브로드캐스트/멀티캐스트 지원                             │
│                                                             │
│                                                             │
│  이름 유래:                                                 │
│  ─────────────────────────────────────────                  │
│  User Datagram Protocol                                     │
│  └─┬─┘ └──┬───┘                                            │
│    │      └─ 데이터그램: 독립적인 데이터 패킷               │
│    └─ 사용자: 애플리케이션 레벨                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

TCP vs UDP 비교

┌─────────────────────────────────────────────────────────────┐
│                      TCP vs UDP                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [TCP - 연결 지향형]                                        │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│  전화 통화와 비슷:                                          │
│  1. 전화를 건다 (3-Way Handshake)                           │
│  2. 대화를 나눈다 (데이터 전송)                             │
│  3. 전화를 끊는다 (4-Way Handshake)                         │
│                                                             │
│  [송신측]              [수신측]                             │
│     │                     │                                 │
│     │── 통화할래? ────────→│                                 │
│     │←─── 좋아! ──────────┤                                 │
│     │── 시작! ────────────→│                                 │
│     │                     │  연결 설정                      │
│     │                     │                                 │
│     │── 안녕하세요 ───────→│                                 │
│     │←─── 잘 들렸어! ─────┤  확인 응답                      │
│     │── 반가워요 ─────────→│                                 │
│     │←─── 잘 들렸어! ─────┤                                 │
│     │                     │                                 │
│                                                             │
│  • 신뢰성: 확실히 전달됨 ✓                                  │
│  • 속도: 느림 (연결 설정, ACK 대기)                         │
│                                                             │
│                                                             │
│  [UDP - 비연결형]                                           │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│  편지/엽서와 비슷:                                          │
│  1. 편지를 쓴다                                             │
│  2. 우체통에 넣는다                                         │
│  3. 끝! (받았는지 확인 안 함)                               │
│                                                             │
│  [송신측]              [수신측]                             │
│     │                     │                                 │
│     │── 데이터 1 ─────────→│  받음 ✓                        │
│     │                     │                                 │
│     │── 데이터 2 ─────────→│  손실 ✗                        │
│     │                     │                                 │
│     │── 데이터 3 ─────────→│  받음 ✓                        │
│     │                     │                                 │
│     │  (확인 안 함!)       │                                 │
│                                                             │
│  • 신뢰성: 보장 안 됨 (손실 가능)                           │
│  • 속도: 빠름 (연결 없음, ACK 없음)                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. UDP 헤더 구조

UDP 헤더 상세

┌─────────────────────────────────────────────────────────────┐
│                   UDP 헤더 구조 (8바이트 고정)               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   비트: 0                   16                  31          │
│        ├────────────────────┼────────────────────┤          │
│     0  │  출발지 포트        │  목적지 포트        │          │
│        │  (Source Port)     │ (Destination Port) │          │
│        │    16비트          │    16비트          │          │
│        ├────────────────────┼────────────────────┤          │
│    32  │  길이 (Length)     │ 체크섬 (Checksum)  │          │
│        │    16비트          │    16비트          │          │
│        ├────────────────────┴────────────────────┤          │
│    64  │                                         │          │
│        │              데이터 (Data)              │          │
│        │                 ...                     │          │
│        │                                         │          │
│        └─────────────────────────────────────────┘          │
│                                                             │
│  총 헤더 크기: 8바이트 (고정)                               │
│  TCP 헤더: 20~60바이트 (가변)                               │
│                                                             │
│  → UDP가 TCP보다 헤더가 훨씬 간단!                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

각 필드 설명

┌─────────────────────────────────────────────────────────────┐
│                    UDP 헤더 필드 설명                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 출발지 포트 (Source Port) - 16비트                      │
│  ─────────────────────────────────────────                  │
│     • 송신측 애플리케이션의 포트 번호                       │
│     • 범위: 0 ~ 65535                                       │
│     • 선택사항: 응답이 필요 없으면 0으로 설정 가능          │
│                                                             │
│     예시:                                                   │
│     - DNS 쿼리 클라이언트: 52341                            │
│     - 스트리밍 클라이언트: 49152                            │
│                                                             │
│                                                             │
│  2. 목적지 포트 (Destination Port) - 16비트                 │
│  ─────────────────────────────────────────                  │
│     • 수신측 애플리케이션의 포트 번호                       │
│     • 필수 필드                                             │
│                                                             │
│     예시:                                                   │
│     - DNS 서버: 53                                          │
│     - DHCP 서버: 67                                         │
│     - TFTP: 69                                              │
│                                                             │
│                                                             │
│  3. 길이 (Length) - 16비트                                  │
│  ─────────────────────────────────────────                  │
│     • UDP 헤더 + 데이터의 전체 길이 (바이트)                │
│     • 최소값: 8 (헤더만 있는 경우)                          │
│     • 최대값: 65535 (2^16 - 1)                              │
│                                                             │
│     계산:                                                   │
│     길이 = UDP 헤더(8바이트) + 데이터 크기                  │
│                                                             │
│     예시:                                                   │
│     - 데이터 100바이트 → 길이 = 8 + 100 = 108바이트        │
│     - 데이터 1000바이트 → 길이 = 8 + 1000 = 1008바이트     │
│                                                             │
│                                                             │
│  4. 체크섬 (Checksum) - 16비트                              │
│  ─────────────────────────────────────────                  │
│     • 데이터 오류 검출용                                    │
│     • IPv4에서는 선택사항 (0으로 설정 가능)                 │
│     • IPv6에서는 필수                                       │
│     • UDP 헤더 + 데이터 + 의사 헤더를 포함하여 계산        │
│                                                             │
│     목적:                                                   │
│     - 전송 중 데이터 손상 감지                              │
│     - 잘못된 목적지 전달 방지                               │
│                                                             │
│                                                             │
│  의사 헤더 (Pseudo Header):                                 │
│  ─────────────────────────────────────────                  │
│  체크섬 계산 시 IP 헤더의 일부 정보 포함:                   │
│  • 출발지 IP 주소                                           │
│  • 목적지 IP 주소                                           │
│  • 프로토콜 (UDP = 17)                                      │
│  • UDP 길이                                                 │
│                                                             │
│  → IP 주소 오류 감지 가능!                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

TCP 헤더와 비교

┌─────────────────────────────────────────────────────────────┐
│                  TCP 헤더 vs UDP 헤더                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  TCP 헤더 (20~60 바이트):                                   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 출발지 포트 (16비트) │ 목적지 포트 (16비트)         │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 순서 번호 (Sequence Number) - 32비트                │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 확인 응답 번호 (ACK Number) - 32비트                │   │
│  ├──────┬──────┬────────────────────────────────────┤   │
│  │헤더  │예약  │플래그 │    윈도우 크기                │   │
│  │길이  │(6bit)│(6bit) │    (16비트)                   │   │
│  ├──────┴──────┴───────┴──────────────────────────────┤   │
│  │ 체크섬 (16비트)    │ 긴급 포인터 (16비트)          │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 옵션 (0~40 바이트)                                  │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 데이터                                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  UDP 헤더 (8 바이트 고정):                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ 출발지 포트 (16비트) │ 목적지 포트 (16비트)         │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 길이 (16비트)        │ 체크섬 (16비트)              │   │
│  ├─────────────────────────────────────────────────────┤   │
│  │ 데이터                                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│                                                             │
│  TCP에 있지만 UDP에 없는 것:                                │
│  ─────────────────────────────────────────                  │
│  ✗ 순서 번호 → 순서 보장 안 됨                              │
│  ✗ 확인 응답 번호 → 신뢰성 보장 안 됨                       │
│  ✗ 플래그 (SYN, ACK, FIN) → 연결 개념 없음                 │
│  ✗ 윈도우 크기 → 흐름 제어 없음                             │
│  ✗ 옵션 → 확장 기능 없음                                    │
│                                                             │
│  → UDP는 최소한의 기능만 제공!                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. UDP 데이터그램

데이터그램 개념

┌─────────────────────────────────────────────────────────────┐
│                  UDP 데이터그램 (Datagram)                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  정의:                                                      │
│  • UDP 헤더가 붙은 데이터 단위                              │
│  • 독립적으로 전송되는 자기 완결적 패킷                     │
│  • 다른 데이터그램과 무관하게 처리됨                        │
│                                                             │
│                                                             │
│  구조:                                                      │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [애플리케이션 계층]                                        │
│         │                                                   │
│         ↓ 데이터                                            │
│  ┌─────────────────────────────────────────┐                │
│  │            애플리케이션 데이터           │                │
│  │              (예: DNS 쿼리)              │                │
│  └─────────────────────────────────────────┘                │
│         │                                                   │
│         ↓ UDP 헤더 추가 (전송 계층)                         │
│  ┌──────────┬──────────────────────────────┐                │
│  │UDP 헤더  │     애플리케이션 데이터      │                │
│  │(8바이트) │                              │                │
│  └──────────┴──────────────────────────────┘                │
│         ↑                                                   │
│         └──────── UDP 데이터그램 ──────────                 │
│         │                                                   │
│         ↓ IP 헤더 추가 (네트워크 계층)                      │
│  ┌─────┬──────────┬───────────────────────┐                 │
│  │ IP  │UDP 헤더  │  애플리케이션 데이터  │                 │
│  │헤더 │(8바이트) │                       │                 │
│  └─────┴──────────┴───────────────────────┘                 │
│         ↑                                                   │
│         └──────── IP 데이터그램 ────────────                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

데이터그램 특징

┌─────────────────────────────────────────────────────────────┐
│                   데이터그램 vs 세그먼트                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  UDP 데이터그램:                                            │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│  [데이터그램 1]  [데이터그램 2]  [데이터그램 3]             │
│       │               │               │                     │
│       ↓               ↓               ↓                     │
│    독립적          독립적          독립적                   │
│                                                             │
│  • 각 데이터그램은 서로 무관                                │
│  • 순서 보장 없음 (3번이 1번보다 먼저 도착 가능)            │
│  • 연결 상태 없음                                           │
│  • 손실되어도 재전송 안 함                                  │
│                                                             │
│                                                             │
│  TCP 세그먼트:                                              │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│  [세그먼트 1] → [세그먼트 2] → [세그먼트 3]                 │
│       │               │               │                     │
│       └───────────────┴───────────────┘                     │
│                  연결됨                                     │
│                                                             │
│  • 모든 세그먼트가 하나의 연결에 속함                       │
│  • 순서 보장 (Seq 번호)                                     │
│  • 연결 상태 유지                                           │
│  • 손실 시 재전송                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. UDP 통신 과정

비연결형 통신

┌─────────────────────────────────────────────────────────────┐
│                    UDP 통신 과정                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  TCP와 비교:                                                │
│                                                             │
│  [TCP - 연결 지향형]                                        │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [클라이언트]                              [서버]           │
│      │                                        │             │
│      │  1. 연결 설정 (3-Way Handshake)        │             │
│      ├────────────────────────────────────────→│             │
│      │                                        │             │
│      │  2. 데이터 전송 (ACK 확인)             │             │
│      ├────────────────────────────────────────→│             │
│      │←────────────────────────────────────────│             │
│      │                                        │             │
│      │  3. 연결 종료 (4-Way Handshake)        │             │
│      ├────────────────────────────────────────→│             │
│      │                                        │             │
│                                                             │
│  → 총 7단계 (SYN, SYN+ACK, ACK, DATA, ACK, FIN, FIN+ACK)   │
│                                                             │
│                                                             │
│  [UDP - 비연결형]                                           │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [클라이언트]                              [서버]           │
│      │                                        │             │
│      │  데이터 전송 (그냥 보냄!)              │             │
│      ├────────────────────────────────────────→│             │
│      │                                        │             │
│      │  데이터 전송                           │             │
│      ├────────────────────────────────────────→│             │
│      │                                        │             │
│      │  끝! (확인 안 함)                      │             │
│      │                                        │             │
│                                                             │
│  → 총 1단계 (DATA만)                                        │
│                                                             │
│                                                             │
│  UDP가 빠른 이유:                                           │
│  • 연결 설정 없음 → 시간 절약                               │
│  • ACK 대기 없음 → 즉시 다음 데이터 전송                   │
│  • 헤더 작음 → 오버헤드 감소                                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

UDP 전송 예시

┌─────────────────────────────────────────────────────────────┐
│                    DNS 쿼리 예시 (UDP)                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [클라이언트]                          [DNS 서버]           │
│  192.168.1.10:52341                    8.8.8.8:53           │
│      │                                    │                 │
│      │                                    │                 │
│  1. DNS 쿼리 전송                                           │
│  ─────────────────────────────────────────                  │
│      │                                    │                 │
│      │  UDP 데이터그램:                   │                 │
│      │  ┌──────────────────────────────┐ │                 │
│      │  │ UDP 헤더:                    │ │                 │
│      │  │  출발지: 52341               │ │                 │
│      │  │  목적지: 53                  │ │                 │
│      │  │  길이: 40                    │ │                 │
│      │  │                              │ │                 │
│      │  │ 데이터:                      │ │                 │
│      │  │  "google.com의 IP 주소는?"   │ │                 │
│      │  └──────────────────────────────┘ │                 │
│      │                                    │                 │
│      ├───────────────────────────────────→│                 │
│      │                                    │                 │
│      │                                    │  쿼리 처리 중.. │
│      │                                    │                 │
│                                                             │
│  2. DNS 응답 수신                                           │
│  ─────────────────────────────────────────                  │
│      │                                    │                 │
│      │  UDP 데이터그램:                   │                 │
│      │  ┌──────────────────────────────┐ │                 │
│      │  │ UDP 헤더:                    │ │                 │
│      │  │  출발지: 53                  │ │                 │
│      │  │  목적지: 52341               │ │                 │
│      │  │  길이: 44                    │ │                 │
│      │  │                              │ │                 │
│      │  │ 데이터:                      │ │                 │
│      │  │  "142.250.185.78"            │ │                 │
│      │  └──────────────────────────────┘ │                 │
│      │                                    │                 │
│      │←───────────────────────────────────┤                 │
│      │                                    │                 │
│      │  완료!                             │                 │
│                                                             │
│                                                             │
│  특징:                                                      │
│  • 연결 설정 없음 → 즉시 쿼리 전송                          │
│  • 한 번의 요청-응답으로 완료                               │
│  • 빠른 응답 (보통 수십 ms)                                 │
│  • 실패 시 애플리케이션이 재시도                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5. 브로드캐스트와 멀티캐스트

브로드캐스트 (Broadcast)

┌─────────────────────────────────────────────────────────────┐
│                  브로드캐스트 (Broadcast)                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  정의:                                                      │
│  • 네트워크 내 모든 호스트에게 데이터 전송                  │
│  • 1:N 통신 (하나가 모두에게)                               │
│  • UDP만 가능 (TCP는 불가능)                                │
│                                                             │
│                                                             │
│  브로드캐스트 주소:                                         │
│  ─────────────────────────────────────────                  │
│                                                             │
│  네트워크: 192.168.1.0/24                                   │
│  브로드캐스트 주소: 192.168.1.255                           │
│                                                             │
│                                                             │
│  동작 방식:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│        [송신자]                                             │
│        192.168.1.10                                         │
│            │                                                │
│            │ UDP 데이터그램                                 │
│            │ 목적지: 192.168.1.255:67                       │
│            ↓                                                │
│     ┌──────────────┐                                        │
│     │   스위치     │                                        │
│     └──────┬───────┘                                        │
│            │                                                │
│     ┌──────┴──────┬──────────┬──────────┐                  │
│     ↓             ↓          ↓          ↓                  │
│  [수신자1]     [수신자2]  [수신자3]  [수신자4]              │
│  192.168.1.5   192.168.1.6 192.168.1.7 192.168.1.8          │
│     ✓             ✓          ✓          ✓                  │
│   모두 받음!                                                │
│                                                             │
│                                                             │
│  사용 예시:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│  1. DHCP (Dynamic Host Configuration Protocol)              │
│     • 새 컴퓨터가 네트워크 접속                             │
│     • IP 주소가 없음 → 브로드캐스트로 DHCP 서버 찾기       │
│     • "DHCP 서버 있어요?" → 모든 장비에게 전송              │
│                                                             │
│  2. ARP (Address Resolution Protocol)                       │
│     • IP 주소로 MAC 주소 찾기                               │
│     • "192.168.1.5의 MAC 주소는?" → 브로드캐스트           │
│                                                             │
│  3. Wake-on-LAN                                             │
│     • 원격으로 컴퓨터 켜기                                  │
│     • Magic Packet을 브로드캐스트로 전송                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

멀티캐스트 (Multicast)

┌─────────────────────────────────────────────────────────────┐
│                  멀티캐스트 (Multicast)                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  정의:                                                      │
│  • 특정 그룹에 속한 호스트들에게만 데이터 전송              │
│  • 1:N 통신 (선택적)                                        │
│  • UDP만 가능                                               │
│                                                             │
│                                                             │
│  멀티캐스트 주소:                                           │
│  ─────────────────────────────────────────                  │
│  • Class D 주소: 224.0.0.0 ~ 239.255.255.255                │
│  • 예약된 주소:                                             │
│    - 224.0.0.1: 모든 호스트                                 │
│    - 224.0.0.2: 모든 라우터                                 │
│    - 224.0.0.9: RIP 라우터                                  │
│                                                             │
│                                                             │
│  동작 방식:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│        [송신자]                                             │
│        스트리밍 서버                                        │
│            │                                                │
│            │ UDP 데이터그램                                 │
│            │ 목적지: 239.1.1.1:5000                         │
│            ↓                                                │
│     ┌──────────────┐                                        │
│     │   라우터     │                                        │
│     │(멀티캐스트   │                                        │
│     │   지원)      │                                        │
│     └──────┬───────┘                                        │
│            │                                                │
│     ┌──────┴──────┬──────────┬──────────┐                  │
│     ↓             ↓          ↓          ↓                  │
│  [구독자1]     [비구독자]  [구독자2]  [비구독자]            │
│  그룹 가입 ✓      ✗        그룹 가입 ✓    ✗                │
│     ✓                         ✓                            │
│   받음!                      받음!                          │
│                                                             │
│                                                             │
│  브로드캐스트 vs 멀티캐스트:                                │
│  ─────────────────────────────────────────                  │
│                                                             │
│  브로드캐스트:                                              │
│  • 모든 장비에게 전송 (원하든 원하지 않든)                  │
│  • 네트워크 부하 증가                                       │
│  • LAN 내부만 가능 (라우터 통과 불가)                       │
│                                                             │
│  멀티캐스트:                                                │
│  • 원하는 장비만 받음 (그룹 가입 필요)                      │
│  • 네트워크 효율적                                          │
│  • 라우터 통과 가능 (인터넷 가능)                           │
│                                                             │
│                                                             │
│  사용 예시:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│  1. IPTV (Internet Protocol Television)                     │
│     • 실시간 TV 스트리밍                                    │
│     • 시청자만 멀티캐스트 그룹 가입                         │
│                                                             │
│  2. 온라인 게임                                             │
│     • 같은 맵의 플레이어들에게 위치 정보 전송               │
│                                                             │
│  3. 화상 회의                                               │
│     • 참가자들에게만 영상/음성 스트리밍                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

유니캐스트/브로드캐스트/멀티캐스트 비교

┌─────────────────────────────────────────────────────────────┐
│            유니캐스트 vs 브로드캐스트 vs 멀티캐스트          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 유니캐스트 (Unicast) - 1:1 통신                         │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│     [A]                                                     │
│      │                                                      │
│      └──→ [B]                                               │
│                                                             │
│     특징:                                                   │
│     • TCP, UDP 모두 가능                                    │
│     • 가장 일반적인 통신 방식                               │
│     • 목적지 하나                                           │
│                                                             │
│                                                             │
│  2. 브로드캐스트 (Broadcast) - 1:All 통신                   │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│     [A]                                                     │
│      │                                                      │
│      ├──→ [B]                                               │
│      ├──→ [C]                                               │
│      ├──→ [D]                                               │
│      └──→ [E]                                               │
│                                                             │
│     특징:                                                   │
│     • UDP만 가능                                            │
│     • 같은 네트워크(LAN) 내 모든 장비                       │
│     • 라우터 통과 불가                                      │
│                                                             │
│                                                             │
│  3. 멀티캐스트 (Multicast) - 1:Group 통신                   │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━      │
│                                                             │
│     [A]                                                     │
│      │                                                      │
│      ├──→ [B] (가입 ✓)                                     │
│      │    [C] (미가입 ✗)                                   │
│      ├──→ [D] (가입 ✓)                                     │
│      └──→ [E] (가입 ✓)                                     │
│                                                             │
│     특징:                                                   │
│     • UDP만 가능                                            │
│     • 그룹에 가입한 장비만 수신                             │
│     • 라우터 통과 가능 (설정 필요)                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

6. UDP 사용 사례

UDP를 사용하는 프로토콜

┌─────────────────────────────────────────────────────────────┐
│                UDP를 사용하는 주요 프로토콜                  │
├──────────┬────────────────────────────────────────────────┤
│ 프로토콜 │               사용 이유                        │
├──────────┼────────────────────────────────────────────────┤
│   DNS    │ • 빠른 이름 해석 필요                          │
│  (53)    │ • 작은 데이터 (쿼리/응답)                      │
│          │ • 실패 시 재시도 가능                          │
├──────────┼────────────────────────────────────────────────┤
│   DHCP   │ • 브로드캐스트 필요                            │
│ (67,68)  │ • IP 할당 전이라 TCP 불가능                    │
│          │ • 간단한 요청/응답                             │
├──────────┼────────────────────────────────────────────────┤
│   TFTP   │ • 단순한 파일 전송                             │
│  (69)    │ • 임베디드 시스템 (적은 리소스)                │
│          │ • 부팅 이미지 전송                             │
├──────────┼────────────────────────────────────────────────┤
│   SNMP   │ • 네트워크 장비 모니터링                       │
│(161,162) │ • 주기적 상태 수집                             │
│          │ • 빠른 응답 필요                               │
├──────────┼────────────────────────────────────────────────┤
│   NTP    │ • 시간 동기화                                  │
│  (123)   │ • 정밀한 시간 측정 (TCP 오버헤드 회피)         │
│          │ • 주기적 동기화                                │
├──────────┼────────────────────────────────────────────────┤
│   RTP    │ • 실시간 오디오/비디오 스트리밍                │
│          │ • 지연 최소화가 중요                           │
│          │ • 일부 패킷 손실 허용                          │
├──────────┼────────────────────────────────────────────────┤
│   VoIP   │ • 음성 통화                                    │
│          │ • 실시간성 중요                                │
│          │ • 재전송하면 오히려 끊김 발생                  │
└──────────┴────────────────────────────────────────────────┘

UDP가 적합한 경우

┌─────────────────────────────────────────────────────────────┐
│                  UDP 사용 권장 상황                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 실시간성이 중요한 경우                                  │
│  ─────────────────────────────────────────                  │
│     • 온라인 게임 (플레이어 위치 업데이트)                  │
│     • 실시간 스트리밍 (영상, 음성)                          │
│     • VoIP (인터넷 전화)                                    │
│                                                             │
│     이유:                                                   │
│     - 재전송하면 이미 지난 데이터 (의미 없음)               │
│     - 약간의 손실은 허용 가능                               │
│     - 지연이 더 큰 문제                                     │
│                                                             │
│                                                             │
│  2. 작은 데이터를 빠르게 주고받는 경우                      │
│  ─────────────────────────────────────────                  │
│     • DNS 쿼리                                              │
│     • DHCP 요청                                             │
│     • 상태 확인 (Ping, Heartbeat)                           │
│                                                             │
│     이유:                                                   │
│     - 연결 설정이 데이터보다 오버헤드가 큼                  │
│     - 한 번의 요청/응답으로 완료                            │
│                                                             │
│                                                             │
│  3. 브로드캐스트/멀티캐스트가 필요한 경우                   │
│  ─────────────────────────────────────────                  │
│     • DHCP (네트워크 내 모든 장비)                          │
│     • mDNS (로컬 네트워크 서비스 발견)                      │
│     • IPTV (같은 채널 시청자들)                             │
│                                                             │
│     이유:                                                   │
│     - TCP는 1:1 연결만 가능                                 │
│     - UDP만 1:N 통신 지원                                   │
│                                                             │
│                                                             │
│  4. 손실을 애플리케이션에서 처리하는 경우                   │
│  ─────────────────────────────────────────                  │
│     • 커스텀 재전송 로직 구현                               │
│     • 게임 (최신 상태가 중요, 과거 상태 무의미)             │
│                                                             │
│     이유:                                                   │
│     - TCP보다 유연한 제어 가능                              │
│     - 애플리케이션 특성에 맞춤 최적화                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

UDP가 부적합한 경우

┌─────────────────────────────────────────────────────────────┐
│                  TCP 사용 권장 상황                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 데이터 손실이 절대 안 되는 경우                         │
│  ─────────────────────────────────────────                  │
│     • 파일 다운로드                                         │
│     • 이메일 전송                                           │
│     • 금융 거래                                             │
│     • 데이터베이스 쿼리                                     │
│                                                             │
│     → TCP 사용!                                             │
│                                                             │
│                                                             │
│  2. 순서가 중요한 경우                                      │
│  ─────────────────────────────────────────                  │
│     • HTTP 요청/응답                                        │
│     • 파일 전송                                             │
│     • 채팅 메시지                                           │
│                                                             │
│     → TCP 사용!                                             │
│                                                             │
│                                                             │
│  3. 대용량 데이터 전송                                      │
│  ─────────────────────────────────────────────              │
│     • 동영상 파일 업로드                                    │
│     • 백업 파일 전송                                        │
│                                                             │
│     → TCP 사용!                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

7. UDP의 장단점

장점과 단점

┌─────────────────────────────────────────────────────────────┐
│                    UDP 장점                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ✓ 빠른 속도                                                │
│    • 연결 설정 없음                                         │
│    • ACK 대기 없음                                          │
│    • 즉시 데이터 전송 가능                                  │
│                                                             │
│  ✓ 낮은 오버헤드                                            │
│    • 헤더 크기: 8바이트 (TCP: 20~60바이트)                  │
│    • 적은 처리 비용                                         │
│    • 적은 메모리 사용                                       │
│                                                             │
│  ✓ 브로드캐스트/멀티캐스트 지원                             │
│    • 1:N 통신 가능                                          │
│    • 효율적인 그룹 통신                                     │
│                                                             │
│  ✓ 단순함                                                   │
│    • 구현이 간단                                            │
│    • 디버깅 용이                                            │
│                                                             │
│  ✓ 실시간 애플리케이션에 적합                               │
│    • 지연 최소화                                            │
│    • 일정한 전송 속도 유지 가능                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│                    UDP 단점                                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ✗ 신뢰성 없음                                              │
│    • 패킷 손실 가능                                         │
│    • 재전송 메커니즘 없음                                   │
│    • 애플리케이션이 직접 처리 필요                          │
│                                                             │
│  ✗ 순서 보장 없음                                           │
│    • 패킷이 순서 뒤바뀔 수 있음                             │
│    • 애플리케이션이 순서 관리 필요                          │
│                                                             │
│  ✗ 흐름 제어 없음                                           │
│    • 수신측 버퍼 오버플로우 가능                            │
│    • 송신 속도 조절 안 됨                                   │
│                                                             │
│  ✗ 혼잡 제어 없음                                           │
│    • 네트워크 혼잡 시 계속 전송                             │
│    • 혼잡 악화 가능                                         │
│                                                             │
│  ✗ 연결 상태 없음                                           │
│    • 상대방 생존 여부 모름                                  │
│    • 애플리케이션이 상태 관리 필요                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

8. 실무 활용

UDP 소켓 프로그래밍 예시

Python UDP 서버:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

import socket

# UDP 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 주소와 포트 바인딩
server_socket.bind(('0.0.0.0', 9999))

print("UDP 서버 시작... 포트 9999")

while True:
    # 데이터 수신 (연결 없이 바로 수신)
    data, addr = server_socket.recvfrom(1024)

    print(f"수신: {data.decode()} from {addr}")

    # 응답 전송 (연결 없이 바로 전송)
    response = f"받았어요: {data.decode()}"
    server_socket.sendto(response.encode(), addr)


Python UDP 클라이언트:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

import socket

# UDP 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = ('localhost', 9999)

# 데이터 전송 (연결 없이 바로 전송)
message = "안녕하세요 UDP!"
client_socket.sendto(message.encode(), server_address)

# 응답 수신
data, server = client_socket.recvfrom(1024)
print(f"서버 응답: {data.decode()}")

client_socket.close()


TCP와 비교:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

TCP 서버:
  socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # TCP
  server_socket.bind()
  server_socket.listen()     # 연결 대기
  conn, addr = server_socket.accept()  # 연결 수락
  data = conn.recv(1024)     # 연결을 통해 수신
  conn.send(response)        # 연결을 통해 전송

UDP 서버:
  socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # UDP
  server_socket.bind()
  # listen(), accept() 없음!
  data, addr = server_socket.recvfrom(1024)  # 바로 수신
  server_socket.sendto(response, addr)       # 바로 전송

netstat으로 UDP 연결 확인

Windows:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

> netstat -an -p UDP

활성 연결

  프로토콜  로컬 주소              외부 주소              상태
  UDP       0.0.0.0:53             *:*
  UDP       0.0.0.0:67             *:*
  UDP       0.0.0.0:123            *:*
  UDP       192.168.1.10:52341     142.250.185.78:443

• UDP는 연결 상태가 없으므로 "상태" 열이 비어있음
• 외부 주소가 *:*인 경우 대기 중 (서버)


Linux:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

$ ss -u -a

State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
UNCONN  0       0       0.0.0.0:53           0.0.0.0:*
UNCONN  0       0       0.0.0.0:67           0.0.0.0:*
UNCONN  0       0       192.168.1.10:52341   142.250.185.78:443

$ netstat -u -a

• UNCONN: 비연결형 (UDP의 특성)
• Recv-Q/Send-Q: 수신/송신 대기 중인 데이터 크기

Wireshark로 UDP 분석

Wireshark에서 UDP 패킷 확인:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

No.  Time    Source          Dest            Protocol  Info
1    0.000   192.168.1.10    8.8.8.8         DNS       Standard query A google.com
2    0.015   8.8.8.8         192.168.1.10    DNS       Standard query response

패킷 1번 상세:
┌───────────────────────────────────────────────────────────┐
│  User Datagram Protocol                                    │
│  ├─ Source Port: 52341                                    │
│  ├─ Destination Port: 53                                  │
│  ├─ Length: 40                                            │
│  ├─ Checksum: 0x1a2b [correct]                            │
│  └─ [Stream index: 0]                                     │
│                                                           │
│  Data (32 bytes):                                         │
│  • DNS Query for google.com                               │
└───────────────────────────────────────────────────────────┘


유용한 Wireshark 필터:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

udp                         # 모든 UDP 패킷
udp.port == 53              # DNS 패킷
udp.port == 67 || udp.port == 68  # DHCP 패킷
udp.length > 1000           # 1000바이트 이상 UDP
ip.dst == 255.255.255.255   # 브로드캐스트
ip.dst >= 224.0.0.0 && ip.dst <= 239.255.255.255  # 멀티캐스트

핵심 정리

개념설명
UDP비연결형, 빠르고 효율적인 전송 계층 프로토콜
UDP 헤더8바이트 고정 (출발지/목적지 포트, 길이, 체크섬)
UDP 데이터그램UDP 헤더가 붙은 데이터 단위
비연결형연결 설정 없이 데이터 전송 (Connectionless)
신뢰성 없음패킷 손실, 순서 뒤바뀜 가능 (No Reliability)
브로드캐스트네트워크 내 모든 호스트에게 전송 (1:All)
멀티캐스트특정 그룹에 속한 호스트들에게 전송 (1:Group)
빠른 속도연결/ACK 없음, 낮은 오버헤드

UDP 핵심 개념

┌─────────────────────────────────────────────────────────────┐
│                      UDP 요약                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 비연결형 (Connectionless)                               │
│     ─────────────────────────────────────────               │
│     • 연결 설정 없음 → 즉시 전송                            │
│     • 연결 종료 없음 → 오버헤드 최소화                      │
│                                                             │
│  2. 신뢰성 없음 (Unreliable)                                │
│     ─────────────────────────────────────────               │
│     • 패킷 손실 가능 → 재전송 안 함                         │
│     • 순서 보장 안 됨 → 순서 뒤바뀔 수 있음                 │
│                                                             │
│  3. 간단한 헤더 (8바이트)                                   │
│     ─────────────────────────────────────────               │
│     • 출발지 포트 (16비트)                                  │
│     • 목적지 포트 (16비트)                                  │
│     • 길이 (16비트)                                         │
│     • 체크섬 (16비트)                                       │
│                                                             │
│  4. 빠른 속도                                               │
│     ─────────────────────────────────────────               │
│     • 낮은 지연 (Low Latency)                               │
│     • 낮은 오버헤드 (Low Overhead)                          │
│     • 실시간 애플리케이션에 적합                            │
│                                                             │
│  5. 브로드캐스트/멀티캐스트 지원                            │
│     ─────────────────────────────────────────               │
│     • 1:N 통신 가능                                         │
│     • 효율적인 그룹 통신                                    │
│                                                             │
│                                                             │
│  사용처:                                                    │
│  • DNS (빠른 이름 해석)                                     │
│  • DHCP (브로드캐스트)                                      │
│  • 스트리밍 (실시간성)                                      │
│  • 온라인 게임 (낮은 지연)                                  │
│  • VoIP (음성 통화)                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

용어 정리

  • UDP (User Datagram Protocol): 비연결형, 신뢰성 없는 전송 계층 프로토콜
  • 데이터그램 (Datagram): UDP 헤더가 붙은 독립적인 데이터 단위
  • 비연결형 (Connectionless): 연결 설정 없이 데이터를 전송하는 방식
  • 브로드캐스트 (Broadcast): 네트워크 내 모든 호스트에게 데이터 전송 (1:All)
  • 멀티캐스트 (Multicast): 특정 그룹에 속한 호스트들에게 데이터 전송 (1:Group)
  • 유니캐스트 (Unicast): 특정 하나의 호스트에게 데이터 전송 (1:1)
  • 체크섬 (Checksum): 데이터 오류 검출을 위한 값
  • 의사 헤더 (Pseudo Header): 체크섬 계산 시 IP 헤더 정보를 포함한 가상 헤더