[Network] UDP

jiny·2026년 2월 11일

Computer Science

목록 보기
10/16

1. UDP란?

✨ 기본 정의

UDP(User Datagram Protocol)'보내는 사람(User)''데이터 덩어리(Datagram)'를 단순히 '던지는(Protocol)' 방식이다.

데이터그램(Datagram): 독립적인 관계를 지니는 패킷으로, 각 패킷이 서로 독립적으로 전송된다. 마치 편지를 보낼 때 각 편지가 독립적으로 배달되는 것과 비슷하다.

  • 비연결형(Connectionless): 상대방이 받을 준비가 되었는지 확인하지 않고 보낸다.
  • 비신뢰성(Unreliable): 데이터가 중간에 사라지거나 순서가 뒤바뀌어도 신경 쓰지 않는다.
  • 초경량(Lightweight): 확인 절차가 없으므로 속도가 매우 빠르고 헤더가 가볍다.

쉽게 비유하자면,

  • TCP전화 통화이다.
    "여보세요?"(연결 확인) ➡️ "네, 들립니다"(응답) ➡️ 대화(데이터 전송) 과정을 거친다.
  • UDP종이비행기 날리기이다.
    일단 날리면(전송), 상대가 잘 받았는지 확인할 수 없지만 날리는 속도는 훨씬 빠르다.

2. TCP & UDP 탄생 배경

✨ 문제 1: 프로세스 구분 불가

IP 주소는 네트워크 상에서 특정 컴퓨터(Host)를 찾아가는 데 사용된다. 하지만 컴퓨터 안에는 카카오톡, 유튜브, 게임 등 여러 개의 프로그램(Process)이 동시에 인터넷을 사용하고 있다.

  • 문제점: 택배(데이터)가 아파트(컴퓨터) 앞까지는 잘 도착했는데, 경비실에서 "이게 어느 집(프로그램)으로 가는 건가요?"라고 물었을 때 대답할 정보가 없는 것과 같다.
  • 해결책 (포트 번호): 각 프로그램마다 고유한 '방 번호(Port Number)'를 부여했다.덕분에 IP로 컴퓨터를 찾고, 포트 번호로 그 안의 정확한 프로그램을 찾아갈 수 있게 되었다.

✨ 문제 2: 오류 처리 미흡

IP는 데이터를 보내는 데만 집중하는 '비신뢰성' 프로토콜이다. 전송 중에 데이터가 사라지거나 망가져도 IP 스스로는 아무것도 할 수 없다.

  • ICMP의 한계: ICMP는 도로 위의 '전광판'이나 '교통 방송' 같은 역할이다. "앞에 사고 났어요!"라고 알려주기는 하지만, 사고 난 차를 견인하거나 짐을 다시 보내주지는 않는다.

    ICMP(Internet Control Message Protocol): 네트워크 장비에서 오류 메시지를 전송받는 프로토콜 (예: ping 명령어)

  • 해결책 (TCP와 UDP)
    • TCP (꼼꼼한 관리자): 데이터가 잘 도착했는지 일일이 확인하고, 순서가 바뀌면 바로잡고, 잃어버리면 다시 보내달라고 요청한다.
    • UDP (빠른 배달원): 복잡한 확인 절차 없이 일단 빠르게 던져준다. 오류 처리는 필요하다면 사용하는 프로그램(애플리케이션)이 직접 하도록 맡긴다.

✨ 한눈에 보는 프로토콜 계층 구조


3. TCP vs. UDP: 오류 처리 방식

✨ TCP의 오류 처리 방식

TCP는 데이터가 목적지에 안전하게 도착할 때까지 모든 과정을 감시한다.

  • 순서 번호(Sequence Number): 데이터 조각마다 번호를 붙인다. 덕분에 조각들이 뒤섞여 도착해도 원래 순서대로 조립할 수 있다.
  • 확인 응답(ACK): 데이터를 받은 쪽에서 "잘 받았어!"라고 신호를 보낸다. 만약 이 신호가 안 오면 보낸 쪽은 "문제가 생겼구나"라고 판단하고 자동으로 다시 보낸다(재전송).
  • 흐름 제어 & 혼잡 제어: 받는 쪽이 감당할 수 있을 만큼만 보내고, 네트워크가 막히면 속도를 줄여서 오류 발생 가능성을 미리 차단한다.

    ⭐ TCP는 신뢰성이 중요한 파일 전송, 이메일 등에 적합하다.

✨ UDP의 오류 처리 방식

UDP는 복잡한 확인 절차를 생략하고 오직 '데이터 무결성'만 최소한으로 확인한다.

  • 체크섬(Checksum): 헤더에 포함된 체크섬을 통해 데이터가 전송 중에 깨졌는지만 확인한다.
  • 오류 발견 시 대응: 만약 체크섬 확인 결과 데이터가 망가졌다면? UDP는 그냥 그 데이터를 버린다. 다시 보내달라고 요청하거나 고치려 하지 않는다.
  • 애플리케이션의 역할: "데이터가 하나쯤 없어져도 괜찮아(예: 실시간 영상)"라면 그대로 두고, "그래도 이건 중요해"라고 판단되면 개발자가 직접 프로그램 코드에 재전송 로직을 짜넣어야 한다.

    ⭐ UDP는 0.1초가 중요한 온라인 게임, 실시간 스트리밍, DNS 조회 등에 사용된다. 조금 손실되더라도 끊김 없이 빠르게 전달하는 게 더 중요하기 때문이다.


4. UDP의 핵심 성격

(1) 비연결형 (Connectionless)

  • TCP처럼 연결(3-way-handshake)을 만들고 유지하지 않는다.
  • 보낼 때 "그냥 보냄", 받을 때 "그냥 받음"에 가깝다.

(2) 메시지 지향 (message-oriented)

  • TCP바이트 스트림(byte-stream), UDP메시지(데이터그램) 단위이다.
  • "한 번 send한 덩어리 = 한 개 UDP 데이터그램"이라는 경계가 유지되는 편이라서 요청/응답형에 잘 맞는다.

(3) 비신뢰성 (Unreliable)

  • UDP는 전달 보장, 순서 보장, 중복 방지를 보장하지 않는다.
  • 단, 체크섬으로 손상(corruption) 검출은 할 수 있다.

5. UDP 헤더 구조

UDP 헤더는 총 8바이트(64비트)로 고정되어 있다.

✨ 헤더 필드

각 필드는 16비트(2바이트)씩 할당되어 있다.

  • Source Port (송신 포트): 데이터를 보내는 프로그램의 번호이다. 16비트이므로 포트 번호의 범위가 0~65,535가 되는 것이다.
  • Destination Port (수신 포트): 데이터를 받을 프로그램의 번호이다. 역시 16비트를 사용하여 목적지 프로그램을 식별한다.
  • Length (길이): 'UDP 헤더(8바이트) + 데이터'의 전체 길이를 바이트 단위로 나타낸다. 최솟값은 8(데이터가 없을 때)이며, 이론상 최대 65,535바이트까지 표현 가능하다.
  • Checksum (체크섬)
    • 전송 중에 데이터가 변형되지 않았는지 확인하는 최소한의 안전장치이다.
    • 송신 측에서 헤더와 데이터를 특정 계산법으로 합산해 기록하면, 수신 측에서 똑같이 계산해 값이 맞는지 대조한다. 틀리면 가차 없이 버린다.
    • IPv4 시절에는 네트워크 계층(IP)과 전송 계층(UDP) 모두에서 이중으로 에러를 체크할 수 있었다.
      • IPv4 헤더 체크섬: IPv4 헤더 자체에 체크섬 필드가 있어, 라우터들이 이동 중에 IP 주소가 변형되지 않았는지 확인했다.
      • UDP의 선택: "IP 계층에서 이미 헤더를 검사하고 있으니, 데이터가 조금 깨져도 상관없는 실시간 서비스라면 UDP 체크섬 계산은 생략해서 속도를 높이자"라는 논리가 가능했다.
      • 0의 의미: UDP 헤더의 체크섬 필드에 0을 채워 보내면, 수신 측은 "아, 체크섬을 계산하지 않았구나"하고 검사 없이 데이터를 수락한다.
    • IPv6로 넘어오면서 인터넷 설계 철학이 크게 바뀌었다. 라우터가 매번 체크섬을 계산하는 시간을 줄여서 전송 속도를 극대화하기로 한 것이다.
      • IP 헤더 체크섬 삭제: IPv6 헤더에는 체크섬 필드가 아예 없다. 라우터는 이제 헤더 검사를 하지 않고 패킷을 훨씬 빠르게 전달한다.
      • UDP 체크섬의 필수화: IP 계층에서 에러 검사를 하지 않기 때문에, 만약 UDP에서도 체크섬을 안 하면 IP 주소가 오염되어 엉뚱한 곳으로 배달된 패킷을 걸러낼 방법이 아예 사라진다.
      • 강력한 규칙: 따라서 IPv6에서 UDP 체크섬은 무조건 필수이다. 만약 체크섬이 0인 패킷이 도착하면, 수신 측은 이를 오류로 간주하고 즉시 폐기(Discard)한다.

✨ TCP 헤더와 비교

비교 항목UDP 헤더TCP 헤더
크기고정 8바이트최소 20 ~ 최대 60바이트
주요 필드포트, 길이, 체크섬순서 번호, 확인 응답 번호, 윈도우 크기, 플래그 등
오버헤드매우 낮음 (가벼움)높음 (무거움)
비유주소만 적힌 포스트잇수십 장의 계약서가 담긴 서류 봉투

✨ UDP가 단순한 이유

UDP의 철학은 "복잡한 건 위(애플리케이션 계층)에서 알아서 해라, 나는 오직 빠르게 전달만 한다"이다.

  • 속도 최우선: 헤더가 작을수록 네트워크 장비(라우터 등)가 처리해야 할 양이 줄어들어 전송 속도가 빨라진다.
  • 효율성: 아주 작은 데이터를 보낼 때(예: DNS 쿼리), 배보다 배꼽이 더 큰 상황(데이터보다 헤더가 더 큰 상황)을 방지한다.

6. UDP를 사용하는 이유

✨ UDP의 핵심 장점

  1. 극강의 전송 효율 (Low Overhead)
    • 연결 과정 생략: TCP처럼 통신 전 "준비됐니?"라고 묻는 3-way handshake 과정이 없다. 데이터를 보내고 싶을 때 즉시 던질 수 있어 초기 지연 시간(Latency)이 거의 없다.
    • 가벼운 헤더: TCP 헤더(20~60바이트)에 비해 UDP는 단 8바이트만 사용한다. 전송하는 데이터가 작을수록 이 차이는 상대적으로 더 커진다.
  1. 실시간성 보장 (No Head-of-Line Blocking)
    • TCP는 중간에 패킷 하나만 사라져도 그걸 다시 받느라 뒤에 오는 데이터들이 줄줄이 대기해야 한다(HOL Blocking).
    • UDP는 뒤를 돌아보지 않는다. 패킷 하나가 사라져도 다음 패킷을 즉시 처리하므로, 실시간 서비스에서 화면이 멈추는 현상을 최소화한다.
  1. 일대다 통신 가능 (Multicast / Broadcast)
    • TCP는 1:1 연결(Unicast)만 가능하지만, UDP는 한 번에 여러 명에게 데이터를 뿌리는 것이 가능하다. 사내 방송이나 대규모 네트워크 장비 설정에 필수적이다.

✨ 구체적인 사용 사례와 이유

  1. 실시간 서비스
    • 온라인 게임: 내 캐릭터의 위치 정보가 0.1초 늦게 전달되는 것보다, 중간에 한 번 정보가 누락되더라도 최신 위치를 바로 받는 게 게임 플레이에 훨씬 유리하다.
    • 화상 회의 (Zoom/Skype): 목소리가 1초 뒤에 들리는 것보다, 아주 잠깐 '치직' 소리가 나고 대화가 이어지는 것이 자연스럽다.
  1. 짧은 요청과 응답
    • DNS (도메인 네임 시스템): "google.com 주소가 뭐야?"라는 짧은 질문을 위해 TCP의 복잡한 연결 과정을 거치는 것은 낭비이다.
    • 다만, 데이터가 512바이트를 넘거나 서버 간 동기화(Zone Transfer) 시에는 TCP를 쓰기도 한다.
  1. 네트워크 인프라 관리
    • DHCP: 컴퓨터가 처음 켜졌을 때 IP 주소를 할당하는 과정이다. 아직 내 IP도 모르는 상태에서 1:1 연결(TCP)을 맺을 수는 없기에, 전체 네트워크에 뿌리는 UDP 브로드캐스트를 사용한다.

✨ TCP vs. UDP 선택 기준 가이드


7. DNS가 UDP를 사용하는 이유

✨ UDP를 선택한 이유

  1. 오버헤드 최소화 (No Connection)
    • TCP: 데이터를 주고받기 전 "안녕? 나 데이터 보내도 돼?"(3-way handshake)라는 절차가 필요하다.
    • UDP: 이런 절차 없이 바로 질문("google.com 주소 뭐야?")을 던진다.
    • 결과: 단 한 번의 요청과 응답으로 끝나기 때문에 서버의 부담이 적고 응답 속도가 매우 빠르다.
  1. 패킷 하나에 쏙 들어가는 크기
    • 대부분의 DNS 질문과 답변은 매우 짧다. UDP 패킷 하나에 충분히 담길 정도(보통 512바이트 이하)이기 때문에 굳이 복잡한 TCP를 쓸 이유가 없다.
  1. 똑똑한 애플리케이션 계층
    • UDP는 신뢰성이 없지만, DNS 프로그램 자체가 '타임아웃''재전송' 기능을 가지고 있다.
    • 만약 응답이 안 오면 DNS가 알아서 다시 물어보기 때문에 전송 계층의 도움 없이도 충분히 안정적이다.

✨ DNS가 TCP를 사용하는 경우

하지만 모든 상황에서 UDP가 만능은 아니다. 다음과 같은 특수 상황에서는 53번 포트 그대로 TCP를 사용한다.

상황설명이유
Zone TransferDNS 서버끼리 전체 주소록 데이터를 동기화할 때데이터 양이 방대하고, 단 하나의 정보라도 틀리면 안 되기 때문
응답 크기 초과응답 데이터가 512바이트를 넘을 때UDP의 제한 용량을 넘어서면 데이터가 잘림(Truncation) 현상이 발생하기 때문
보안 강화 (DNSSEC)디지털 서명 등이 포함되어 응답이 길어질 때보안 정보는 용량이 크고 정확한 전달이 필수적이기 때문

8. TCP vs. UDP 비교표

특성TCPUDP
연결 방식연결형 (Connection-oriented)비연결형 (Connectionless)
신뢰성높음 (재전송, 순서 보장)낮음 (보장 없음)
속도상대적으로 느림빠름
헤더 크기20~60바이트8바이트
순서 보장보장됨보장 안 함
전송 단위Stream (바이트 스트림)Datagram (데이터그램)
오류 제어강력함 (자동 재전송)기본적 (Checksum만)
흐름 제어있음없음
혼잡 제어있음없음
사용 예시웹(HTTP), 이메일(SMTP), 파일 전송(FTP)스트리밍, 게임, DNS, VolP

9. UDP 동작 원리 예시

✨ 온라인 게임

온라인 게임(FPS, MOBA 등)에서는 0.1초의 지연이 승패를 결정짓는다. 여기서 UDP는 '최신 상태 유지'에 집중한다.
게임 서버는 1초에 수십 번씩 플레이어들의 위치 정보를 보낸다.

  • 정상 상황: (10, 10) → (11, 11) → (12, 12) 순서로 위치 정보가 도착한다.
  • 패킷 손실 발생: (11, 11) 정보가 중간에 사라졌다면?
    • TCP라면: (11, 11)을 다시 받을 때까지 (12, 12) 정보를 처리하지 않고 기다린다. 화면이 멈추는 '렉(Lag)'이 발생한다.
    • UDP라면: (11, 11)은 무시하고 바로 도착한 (12, 12) 정보를 사용한다. 캐릭터가 아주 살짝 순간이동한 것처럼 보일 수 있지만, 게임은 끊김 없이 계속된다.

✨ 영상 스트리밍

유튜브 라이브나 Zoom 화상 회의 같은 실시간 스트리밍에서도 UDP의 진가가 발휘된다.
영상은 수많은 '프레임(장면)'의 연속이다.

  • 패킷 손실 발생: 영상 데이터 조각 하나가 사라지면 화면의 특정 부분이 깨지거나(깍두기 현상) 아주 잠깐 지연된다.
  • UDP의 선택: "깨진 조각을 다시 받느라 전체 영상을 멈추게 할 순 없어!"라며 다음 장면을 계속 재생한다.
  • 결과: 시청자는 "어? 방금 화면이 살짝 깨졌네?"라고 느끼지만, 방송은 실시간으로 계속 이어진다. 만약 TCP를 썼다면 화면이 뱅글뱅글 돌며(버퍼링) 실시간 흐름을 놓치게 될 것이다.

10. 최신 트렌드: UDP의 화려한 부활 (HTTP/3 & QUIC)

UDP가 '신뢰성 없는 프로토콜'이라는 오명을 벗고, 현대 웹의 주인공으로 화려하게 부활한 배경에는 QUICHTTP/3가 있다.

✨ 왜 다시 UDP인가? (TCP의 한계)

인터넷 속도는 비약적으로 빨라졌지만, 30년 넘은 TCP의 구조적 문제가 발목을 잡기 시작했다.

  • 연결 지연 (Handshake Latency): TCP는 연결을 맺을 때(3-way handshake)와 보안 연결(TLS)을 설정할 때 여러 번 왔다 갔다 해야 한다. 이 과정에서 발생하는 지연 시간이 현대 웹에서는 너무 길게 느껴져게 된 것이다.
  • HOLB (Head-of-Line Blocking) 문제: HTTP/2는 하나의 TCP 연결에 여러 데이터를 실어 보낸다. 하지만 TCP는 '순서'를 너무 엄격히 따져셔, 패킷 하나만 유실되어도 나머지 데이터가 모두 멈춰버리는 치명적인 단점이 있다.
  • 느린 개선 속도: TCP는 운영체제(OS) 커널 수준에서 구현되어 있어, 새로운 기능을 추가하거나 수정하려면 전세계의 OS를 다 업데이트해야 하는 어려움이 있다.

✨ QUIC: UDP의 날개에 TCP의 지능을 달다

구글은 "차라리 아무 기능 없는 UDP를 가져다가, 그 위에 우리가 필요한 기능을 직접 만들자!"라고 결정했다. 그것이 바로 QUIC이다.

QUIC의 핵심 혁신 기능은 다음과 같다.

  • 빠른 연결 설정 (0-RTT / 1-RTT): 첫 연결 시 보안 설정과 데이터 전송을 동시에 진행한다. 한 번 연결했던 서버라면 기다림 없이(0-RTT) 바로 데이터를 전송할 수 있다.
  • 독립적인 스트림 (HOLB 해결): 여러 파일을 보낼 때, 패킷 하나가 사라져도 해당 파일만 영향을 받고 나머지는 정상적으로 전송된다. UDP의 독립적인 특성을 활용한 것이다.
  • 연결 마이그레이션 (Connection ID): TCP는 IP 주소가 바뀌면(Wi-Fi에서 LTE로 전환 시) 연결이 끊긴다. 하지만 QUIC은 고유한 'Connection ID'를 사용하므로, IP가 바뀌어도 끊김 없이 통신을 이어갈 수 있다.

✨ HTTP/1.1 vs. HTTP/2 vs. HTTP/3

구분HTTP/1.1HTTP/2HTTP/3
기반 프로토콜TCPTCPUDP (QUIC)
연결 방식여러 개의 TCP 연결하나의 TCP 연결 (멀티플렉싱)하나의 UDP 연결 (QUIC)
HOLB 문제발생 (애플리케이션 계층)발생 (전송 계층)해결 (독립적 스트림)
보안 (TLS)별도 설정 필요별도 설정 필요기본 내장 (TLS 1.3)

0개의 댓글