UDP
쥥이
2024. 12. 19. 20:45
IP 계층 위에서 동작하는 표준 전송 프로토콜: TCP와 UDP
- TCP와 UDP는 IP 계층 위에서 동작하는 표준 전송 프로토콜입니다.
- UDP는 단순한 데이터그램 전달을 제공하며, xhost, porty(호스트와 포트) 쌍을 통해 원격 소켓에 데이터를 전달합니다.
- TCP는 더 풍부한 기능을 제공하지만, 원격 소켓이 먼저 연결(connected) 상태여야만 데이터를 전송할 수 있습니다.
16.1 사용자 데이터그램 프로토콜(UDP)
UDP의 개요
- RFC 1122에서는 UDP를 "거의 무의미한(null) 프로토콜"이라고 묘사합니다. 이는 다소 과장된 평가일 수 있지만, UDP는 실제로 매우 간단한 프로토콜입니다.
- UDP는 IP 계층 위에 두 가지 주요 기능을 추가합니다:
- 포트 번호(port numbers)
- 체크섬(checksum)
UDP 헤더
- UDP 헤더는 다음과 같은 필드로 구성됩니다:
- **출발지 포트(Source Port)**와 목적지 포트(Destination Port):
- UDP를 실제로 전송 프로토콜로 만들어주는 핵심 요소입니다.
- 이를 통해 애플리케이션은 단순히 호스트에 연결하는 것이 아니라 개별 서버 프로세스(특정 포트 번호를 소유한 프로세스)에 연결할 수 있습니다.
- 체크섬:
- UDP 데이터, 헤더, 그리고 "가상 IP 헤더(pseudo-IP header)"를 포함하여 전송된 데이터의 무결성을 검증합니다.
UDP의 특성
- 비신뢰성(Unreliable):
- UDP는 시간 초과, 확인 응답(ACK), 재전송 등의 메커니즘을 제공하지 않습니다.
- UDP를 사용하는 애플리케이션은 이러한 기능을 자체적으로 구현해야 합니다.
- 비연결성(Stateless):
- UDP는 비연결성 프로토콜로, 상태를 유지하지 않습니다.
- 한 호스트가 포트를 열어두면, 인터넷상의 어떤 호스트라도 xhost, porty 소켓에 패킷을 보낼 수 있습니다.
- UDP와 TCP 포트 번호의 독립성:
- UDP에서의 포트 번호는 TCP에서의 포트 번호와 별도의 네임스페이스를 가집니다.
UDP 체크섬
- UDP는 16비트 인터넷 체크섬을 사용합니다.
- 체크섬은 UDP 헤더, UDP 데이터, 그리고 가상 IP 헤더를 포함합니다.
- 체크섬 비활성화:
- 드물지만, 체크섬 필드를 모두 0으로 설정하여 체크섬을 비활성화할 수 있습니다.
- NAT 라우터가 IP 주소나 포트를 변경할 경우, UDP 체크섬도 업데이트되어야 합니다.
UDP의 주요 사용 사례
- LAN 내 로컬 전송
- UDP는 **로컬 네트워크(LAN)**에서 자주 사용되며, 간단한 타임아웃 및 재전송 메커니즘을 사용하는 것이 일반적입니다.
- 원격 프로시저 호출(RPC):
- UDP는 RPC 프로토콜의 기반으로 사용됩니다.
- 한 호스트가 다른 호스트에서 프로시저를 호출하고, 매개변수와 반환값을 UDP를 통해 교환합니다.
- 요청-응답(Request-Reply)
- DNS:
- UDP는 요청-응답 구조를 가진 애플리케이션에 적합하며, 추가적인 연결 설정 및 해제 과정이 필요 없습니다.
- 짧은 요청-응답 연속 작업이 예상될 경우, TCP의 오버헤드가 더 효율적일 수 있습니다.
- 실시간 전송(Real-time Transport)
- TCP는 헤드-오브-라인 블로킹(Head-of-Line Blocking) 문제가 있습니다.
- TCP 패킷이 손실되면, 해당 패킷이 재전송될 때까지 이후 데이터는 대기열에서 멈춥니다.
- UDP는 손실된 패킷을 무시할 수 있어, 음성 및 영상과 같은 지연에 민감한 애플리케이션에 적합합니다.
- 예: VoIP와 **RTP(실시간 전송 프로토콜)**는 UDP 위에서 동작합니다.
UDP의 단점 및 악용 가능성
- 플러딩 공격(Flooding Attack)
- UDP는 스푸핑된 출발지 주소를 사용한 플러딩 공격에 자주 악용됩니다.
- 공격자가 작은 메시지를 서버로 보내면, 서버는 큰 응답 메시지를 스푸핑된 주소로 전송하여 피해 대상에게 트래픽 과부하를 발생시킵니다.
- 트래픽 증폭 공격(Traffic Amplification Attack)
- UDP는 서버가 클라이언트의 요청 크기보다 큰 응답을 보낼 경우, 트래픽 증폭에 악용될 수 있습니다.
- 이를 방지하기 위해, 서버는 클라이언트의 요청 크기보다 큰 응답을 제한하거나 클라이언트의 IP 주소를 검증해야 합니다.
- QUIC는 이러한 문제를 해결하기 위한 접근 방식을 사용합니다. (18.15.4.4 참조)