UDP Datagram

UDP 데이터그램 손실, 순서, 재전송 책임 분리

UDP는 연결과 신뢰성을 제공하지 않으므로 애플리케이션이 손실, 순서, 중복, timeout을 직접 설계해야 합니다.

01

소켓 준비

UDP 소켓은 listen/accept 없이 주소와 포트 기준으로 datagram을 주고받습니다.

SOCK_DGRAM
02

sendto

각 datagram마다 목적지 주소를 지정해 독립적인 패킷을 보냅니다.

메시지 경계
03

라우팅과 손실

네트워크 혼잡, 방화벽, MTU 문제로 일부 datagram이 사라질 수 있습니다.

best effort
04

recvfrom

수신자는 보낸 주소와 payload를 함께 받아 애플리케이션 규칙으로 해석합니다.

source addr
05

애플리케이션 복구

필요하면 sequence, ack, retry, timeout을 직접 붙입니다.

custom reliability
경계
메시지 단위 보존 UDP는 datagram 경계가 보존되지만 큰 payload는 조각화 위험이 있습니다.
MTU 고려
신뢰성
보장 없음 전달, 순서, 중복 제거를 보장하지 않아 앱이 필요 여부를 결정합니다.
ACK 설계
지연
낮은 제어 비용 재전송 대기와 연결 수립 비용이 없어 실시간성에 유리할 수 있습니다.
손실 허용 전제

재전송 책임 범위

패킷 크기 MTU를 넘는 큰 datagram은 조각화와 손실 위험이 커집니다.
순서 필요성 순서가 중요한 메시지만 sequence를 붙이고 모든 것을 TCP처럼 만들지 않습니다.
NAT와 방화벽 UDP는 중간 장비에서 timeout과 차단 정책의 영향을 크게 받습니다.