![[Network] UDP](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fu1QjT%2FbtsNsRAKFeF%2FAAAAAAAAAAAAAAAAAAAAABTF3vDXpMpISD6RNGtcbA5MjLillr-lipEBURzMLTLX%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DwbRKfMF7%252F1b5YLWiRAZkCrPnZu4%253D)
인터넷에서 데이터를 주고받는 방식에는 여러 가지가 있다. 그 중에서도 UDP$_{User \space Datagram \space Protocol}$는 ‘빠르고 단순한’ 전송 방식으로 자주 사용된다.
여기서 데이터그램이란 각 패킷이 서로 독립적으로 전송되는 방식을 의미한다.
UDP는 Connnectionless(비연결형) 프로토콜이다. TCP처럼 사전에 handshaking 과정이 없기 때문에, 각 패킷은 서로 논리적인 연결 없이 독자적으로 전송된다. UDP로 보낸 메시지는 잃어버릴 수도 있고 (손실 가능) 순서가 뒤바뀔 수도 있으며, 중복될 수도 있다.
각 패킷이 ‘자기 갈 길을 가는’ 방식, 그것이 바로 UDP다.
📡 UDP를 쓰는 이유
TCP처럼 신뢰성을 보장해주는 프로토콜이 있는데, 굳이 UDP를 쓸 이유가 있을까? 생각보다 많다.
- 빠르다. 연결을 미리 설정할 필요 없이, 그냥 보내면 된다.
- RTT(round-trip time) 지연 없음
- 가볍다. 헤더가 단 8바이트. TCP보다 훨씬 작다.
- 오버헤드가 적음
- Congestion control이 없다. 네트워크 상황에 상관없이 데이터를 보낼 수 있다.
- 좋게 말하면 자유롭지만, 나쁘게 말하면 무책임하다.
- 구현이 간단하다. 상태 정보를 저장할 필요가 없어 서버 입장에서는 매우 편리하다.
- 데이터그램 기반. 각 패킷에서 독립적으로 처리한다.
- 신뢰성이 없다. 패킷 손실, 중복, 순서 바뀜에 대한 처리가 없다.
속도와 단순함이 중요할 때 UDP는 최고의 선택지가 될 수 있다. 이러한 특성들 덕분에 다양한 상황에서 쓰인다.
- 스트리밍 서비스 (YouTube, Netflix 등)
- 조금의 손실은 괜찮고, 지연은 치명적인 경우
- DNS (도메인 네임 시스템)
- 빠르게 질의응답이 필요
- SNMP (네트워크 관리 프로토콜)
- HTTP/3 (QUIC 기반)
- 신뢰성은 애플리케이션이 직접 구현하고, 전송은 UDP로
📡 UDP Segment
UDP는 데이터를 어떻게 포장해서 보낼까? 아래와 같은 구조로 보낸다. 정말 간단하고 3개만 외우면 된다.
- port number (포트 번호)
- 송신자와 수신자의 포트
- length (길이)
- 전체 세그먼트(헤더 + 데이터)의 길이
- checksum (체크섬)
- 오류 검출용. 필수는 아니지만 대부분의 OS에서 계산함
송신자는 애플리케이션에서 메시지를 받고, UDP 세그먼트를 생성(포트 번호, 길이, 체크섬 포함)하고 IP 계층으로 전달 후 전송한다. 수신자는 IP 계층에서 세그먼트를 수신하고, 체크섬 검증으로 오류를 확인한다. 정상적으로 판단되면 포트 번호를 확인해서 적절한 애플리케이션으로 전달한다.
📡 UDP의 checksum
UDP는 완전히 무책임한 건 아니고, checksum(체크섬)을 통해 기본적인 오류 검출은 한다.
- 1의 보수 덧셈 방식으로 세그먼트 전체를 더해서 체크섬 값을 만든다.
- 수신 측에서도 같은 방식으로 계산해서 비교한다.
하지만 checksum은 몇몇 비트가 바뀌어도 같게 나올 수 있기 때문에 엄격하지 않다.
📡 흐름제어와 혼잡제어?
UDP는 TCP와 달리 흐름제어와 혼잡제어가 없다.
- 흐름제어(Flow Control)
- 수신자의 처리 속도를 고려해 송신 속도를 조절하는 기능 → 수신자 버퍼가 넘치는 걸 방지
- 혼잡제어(Congestion Control)
- 네트워크 전체가 과부하되지 않도록 트래픽을 조절하는 기능 → congestion collapse(혼잡 붕괴) 방지
UDP는 이 두 기능을 제공하지 않기 때문에, 상황에 따라 애플리케이션에서 직접 구현해야 한다. (HTTP/3의 QUIC)
📡 요약
항목 | 내용 |
---|---|
연결 방식 | Connectionless (비연결형) |
신뢰성 | 없음 (애플리케이션에서 구현해야 함) |
속도 | 매우 빠름 |
용도 | 실시간 스트리밍, DNS, HTTP/3 등 |
헤더 크기 | 작음 (8바이트) |
혼잡 제어 | 없음 (TCP는 있음) |
오류 검출 | 체크섬 (간단한 수준) |
references
Computer Networking: A Top-Down Approach, 8th edition
COMP0414 수업 내용
'CSE > 네트워크 (network)' 카테고리의 다른 글
[Network] Go-Back-N, Selective Repeat (0) | 2025.04.20 |
---|---|
[Network] reliable data transfer (0) | 2025.04.20 |
[Network] multiplexing, demultiplexing (0) | 2025.04.20 |
[Network] Fairness (0) | 2025.04.20 |
[Network] TCP Congestion control (0) | 2025.04.20 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!