본문으로 건너뛰기

안동민 개발노트

본문 시작

QUIC과 전송 계층의 진화

QUIC이 UDP 위에 다중 스트림·TLS·손실 복구·연결 이동을 통합해 TCP 기반 웹의 지연 문제를 줄이는 방식을 이해합니다.

TCP는 인터넷의 기반이며 오랫동안 안정적으로 동작해 왔습니다.

하지만 웹이 더 짧은 지연 시간, 더 많은 동시 요청, 모바일 네트워크 전환을 요구하면서 TCP 위에 기능을 계속 덧붙이는 방식의 한계가 드러났습니다.

QUIC은 이 문제를 해결하기 위해 UDP 위에 새 전송 기능을 구현한 프로토콜입니다.

UDP를 쓰지만 단순히 “UDP 위의 TCP”는 아닙니다.

스트림 다중화, TLS 1.3 기반 보안, 손실 복구, 혼잡 제어, 연결 마이그레이션을 하나의 전송 계층으로 통합합니다.

QUIC은 TCP 한계를 UDP 위 전송 계층으로 우회한다

QUIC은 UDP 데이터그램 위에 스트림, 보안, 손실 복구, 연결 식별을 직접 올린 전송 프로토콜이다.

  1. 기존 TCP 경로

    진화 속도 커널과 중간 장비 영향이 커서 새 기능 배포가 느리다. HOL 하나의 TCP 바이트 스트림 손실이 여러 HTTP/2 스트림을 함께 막을 수 있다. 이동성 IP/Port 4-tuple이 바뀌면 연결 유지가 어렵다.

  2. QUIC 경로

    구현 위치 사용자 공간 라이브러리로 빠르게 배포할 수 있다. 스트림 스트림별 손실 복구로 다른 스트림의 대기를 줄인다. Connection ID 경로가 바뀌어도 같은 연결인지 식별할 수 있다.


HTTP 버전별 진화와 한계

QUIC을 이해하려면 HTTP의 진화와 전송 계층의 병목을 구분해야 합니다.

HTTP/1.1은 여러 요청을 효율적으로 병렬 처리하기 어렵고, HTTP/2는 하나의 TCP 연결 안에서 스트림을 다중화했습니다.

그러나 HTTP/2도 TCP 위에 있기 때문에 패킷 손실이 발생하면 TCP의 순서 보장 때문에 여러 HTTP/2 스트림이 함께 막힐 수 있습니다.

HTTP 진화는 요청 병렬성과 전송 병목을 줄이는 방향이었다

HTTP/2는 애플리케이션 요청 큐를 줄였고, HTTP/3는 TCP 수준 병목까지 QUIC으로 옮겨 줄인다.

  1. HTTP/1.1
  2. TCP 연결 여러 개
  3. keep-alive, pipelining
  4. 요청 병렬성

    제한적

이 현상을 TCP 수준의 Head-of-Line Blocking이라고 부릅니다.

HTTP/2는 애플리케이션 레벨의 요청 큐 문제를 크게 줄였지만, TCP가 하나의 순서 있는 바이트 스트림이라는 사실은 바꾸지 못했습니다.

HTTP/2는 요청 줄서기는 줄였지만 TCP 손실에는 함께 멈춘다

여러 스트림을 한 TCP 연결에 섞어 보내면 연결 수는 줄어든다. 하지만 TCP 바이트 하나가 손실되면 뒤에 온 프레임도 순서 복구를 기다린다.

  1. 1
    HTTP/1.1

    요청마다 연결을 늘리거나 파이프라이닝 순서 대기를 감수한다.

  2. 2
    HTTP/2

    프레임 멀티플렉싱으로 요청 줄서기는 줄지만 TCP 손실은 연결 전체에 전파된다.

  3. 3
    HTTP/3

    QUIC 스트림 단위 복구로 한 스트림 손실이 다른 스트림을 덜 막는다.

  4. 4
    개선된 점

    브라우저 연결 수 제한과 요청 대기 줄이기에는 HTTP/2가 효과적이다.

  5. 5
    남은 한계

    TCP 순서 보장은 연결 전체 병목이므로 손실률과 RTT를 함께 봐야 한다.

상황HTTP/2에서 보이는 현상왜 문제인가
프레임 A2 손실같은 TCP 연결의 뒤 프레임이 대기스트림이 달라도 TCP 순서 복구 전까지 애플리케이션에 못 올라간다.
모바일 RTT 증가작은 손실도 체감 지연으로 확대재전송 왕복 시간이 길수록 전체 연결이 늦어진다.
HTTP/3 전환손실 범위가 스트림 단위로 축소모든 병목을 없애지는 않지만 연결 단위 멈춤은 줄인다.

QUIC의 핵심 구조

QUIC은 UDP 데이터그램 위에서 동작하지만, 애플리케이션이 쓰기 편한 전송 기능을 자체적으로 제공합니다.

RFC 9000은 QUIC을 UDP 기반의 다중화되고 안전한 전송 프로토콜로 정의합니다.

QUIC은 UDP 위에 보안 전송 기능을 직접 올린다

UDP는 바닥만 제공하고, QUIC 구현체가 스트림, TLS 1.3, 손실 복구, 혼잡 제어를 담당한다.

  1. HTTP/3

    HTTP semantics를 QUIC stream에 올린다.

  2. QUIC

    TLS 1.3, stream, loss recovery, congestion control

  3. UDP

    데이터그램 전달. 연결 상태는 QUIC이 관리한다.

  4. IP

    경로와 주소 지정

기능TCP + TLSQUIC
연결 수립TCP handshake 뒤 TLS handshake전송 handshake와 TLS 1.3 handshake 통합
재연결TCP 연결과 TLS 재협상 필요조건이 맞으면 0-RTT application data 가능
HOL Blocking하나의 바이트 스트림 손실이 전체 전달 지연스트림별 전달, 단 같은 스트림 안 HOL은 존재
암호화 범위TLS가 TCP payload 보호QUIC packet 대부분 보호, 일부 헤더는 노출
연결 식별IP/Port 4-tuple 중심Connection ID로 경로 변경 대응
구현 위치주로 커널 TCP 스택주로 사용자 공간 구현
배포 속도OS/커널 업데이트 영향 큼라이브러리·애플리케이션 업데이트 가능
혼잡 제어커널 TCP 구현QUIC 구현체가 손실 복구·혼잡 제어 수행

연결 수립 시간 비교

TCP + TLS에서는 먼저 TCP 연결을 만들고, 그 위에서 TLS 핸드셰이크를 진행합니다.

TLS 1.3 기준으로도 일반적으로 새 연결은 TCP 1 RTT와 TLS 1 RTT가 필요합니다.

QUIC은 전송과 암호화 협상을 통합해 새 연결에서 1 RTT로 application data 전송을 시작할 수 있습니다.

QUIC은 새 연결에서 TCP와 TLS 왕복을 합친다

TCP+TLS는 연결과 보안 협상을 순서대로 거치지만, QUIC은 전송 handshake와 TLS 1.3을 함께 진행한다.

  1. 1
    TCP + TLS 1.3
  2. 2
    1 RTT

    RTT TCP SYN, SYN/ACK

  3. 3
    1 RTT

    RTT TLS 1.3 handshake

  4. 4
    Data

    그 뒤 application data

재방문 또는 재연결 상황에서는 0-RTT가 가능할 수 있습니다.

0-RTT는 이전 연결에서 얻은 정보를 이용해 첫 왕복 전부터 application data를 보낼 수 있는 기능입니다.

하지만 replay attack 위험이 있으므로 멱등 요청처럼 재전송되어도 안전한 요청에 제한적으로 써야 합니다.

0-RTT는 빠르지만 replay-safe 요청에만 제한한다

0-RTT 데이터는 첫 왕복 전에 보내므로, 공격자가 재전송해도 안전한 요청인지 먼저 판단해야 한다.

  1. GET /catalog 가능 후보 읽기

    요청이며 재전송돼도 상태 변경이 없다.

  2. POST /payment 금지 중복 결제처럼 상태 변경

    반복될 수 있다.

  3. PUT /profile 정책 필요 멱등 설계

    idempotency key가 있어야 검토 가능하다.

RTT가 큰 해외 서버나 모바일 네트워크에서는 이 차이가 체감 성능에 영향을 줄 수 있습니다.

다만 실제 지연 시간은 DNS, TLS 인증서 검증, 서버 처리, 네트워크 손실, UDP 차단 여부까지 함께 영향을 받습니다.


연결 마이그레이션

TCP 연결은 보통 소스 IP, 소스 포트, 목적지 IP, 목적지 포트의 4-tuple로 식별됩니다.

스마트폰이 Wi-Fi에서 LTE로 바뀌면 소스 IP와 경로가 바뀌므로 기존 TCP 연결을 유지하기 어렵습니다.

Connection ID는 IP가 바뀌어도 같은 QUIC 연결을 찾게 한다

TCP는 4-tuple 변화에 약하지만, QUIC은 Connection ID와 path validation으로 새 경로를 검증한다.

  1. 1. 기존 경로

    기존 경로 Wi-Fi에서 Connection ID=8f30 으로 통신한다.

  2. 2. 경로 변경

    경로 변경 LTE로 전환되어 IP와 포트가 바뀌지만 같은 Connection ID를 보낸다.

  3. 3. 검증 후 유지

    검증 후 유지 서버는 path validation 뒤 같은 연결로 이어갈 수 있다.

QUIC은 Connection ID를 사용해 연결을 식별할 수 있고, 경로가 바뀌면 path validation을 통해 새 경로를 확인합니다.

이 덕분에 모바일 네트워크 전환에서 기존 연결을 유지할 가능성이 높아집니다.

단, 네트워크 정책, NAT, 방화벽, 서버 구현, path validation 결과에 따라 연결 유지 여부가 달라질 수 있습니다.


HTTP/3와 QUIC의 관계

HTTP/3는 HTTP semantics를 QUIC 전송 위에 올린 버전입니다.

HTTP/3는 HTTP/2의 개념을 이어받지만, TCP가 아니라 QUIC 스트림과 QUIC 연결을 사용합니다.

HTTP/3는 HTTP 의미를 QUIC 전송 위에 올린다

메서드, 상태 코드, 헤더 같은 HTTP semantics는 유지하고, 전송은 TCP 대신 QUIC stream을 사용한다.

  1. HTTP semantics GET, POST

    status code, headers, cache rules는 계속 HTTP 규칙이다.

  2. HTTP/3 framing 요청

    응답을 QUIC stream에 맞는 프레임으로 실어 보낸다.

  3. QUIC transport 스트림별 전송, TLS

    1.3, 손실 복구 를 담당한다.

  4. UDP/IP 네트워크 장비에

    UDP/443 트래픽으로 보인다.

IETF 표준 기준으로 QUIC 핵심 전송은 RFC 9000(2021년), QUIC-TLS는 RFC 9001(2021년), 손실 복구와 혼잡 제어는 RFC 9002(2021년), HTTP/3는 RFC 9114(2022년)에 정의되어 있습니다.

HTTP/3 지원 확인
# curl이 HTTP/3를 지원하도록 빌드되어 있어야 함
curl -I --http3 https://www.google.com

# Alt-Svc 헤더로 HTTP/3 후보 확인
curl -sI https://www.google.com | grep -i alt-svc

# 예: h3=":443"; ma=2592000
# h3는 HTTP/3 엔드포인트를, ma는 Alt-Svc 유효 시간을 뜻함

QUIC의 현실적 고려사항

QUIC은 지연 시간과 손실 회복, 모바일 이동성에서 장점이 있지만 모든 환경에서 더 빠르다고 단정할 수는 없습니다.

UDP 차단, 관측·디버깅 도구, CPU 비용, 서버/클라이언트 구현 품질, 0-RTT 정책을 함께 고려해야 합니다.

QUIC 도입은 지연 시간과 운영 제약을 함께 본다

QUIC은 항상 빠른 마법이 아니라, 손실·RTT·UDP 정책·CPU 비용을 함께 측정해야 하는 선택지다.

  1. 높은 RTT handshake 왕복 절감 0-RTT

    replay-safe 요청으로 제한

  2. 손실 네트워크 stream 간 HOL

    감소 구현체의 손실 복구 품질 확인

  3. 기업/학교망 HTTP/3 후보 UDP/443 차단

    TCP fallback 필요

  4. 저지연 LAN 체감 차

    작을 수 있음 CPU와 관측 도구 비용 비교

환경QUIC 기대 효과주의점
높은 RTThandshake RTT 절감 효과가 큼0-RTT는 replay-safe 요청에 제한
손실이 있는 네트워크스트림 간 HOL Blocking 감소손실 복구와 혼잡 제어 구현 품질
모바일 경로 전환Connection ID 기반 migration 가능path validation과 정책에 좌우
저지연 LANTCP 대비 체감 차이가 작을 수 있음CPU/구현 오버헤드가 더 보일 수 있음
기업·학교 네트워크UDP/443 차단 또는 rate limit 가능TCP fallback 필요
대용량 파일 전송환경에 따라 TCP가 충분히 효율적일 수 있음실제 측정으로 판단

멀티캐스트, 브로드캐스트, 애니캐스트

유니캐스트, 브로드캐스트, 멀티캐스트, 애니캐스트는 “누구에게 보내는가”를 나타내는 통신 패턴입니다.

엄밀히는 전송 계층만의 기능이라기보다 IP와 링크 계층 주소 지정, 라우팅, 애플리케이션 설계와 함께 이해해야 합니다.

통신 패턴수신자범위주로 쓰는 맥락사용 사례
유니캐스트특정 1개전역TCP/UDP웹, 이메일, 파일 전송
브로드캐스트같은 네트워크의 모든 장치주로 LAN링크 계층/IPv4 일부ARP, DHCP discovery
멀티캐스트그룹 가입자설정에 따라IP multicast + UDP 등IPTV, 일부 실시간 배포
애니캐스트가까운 하나의 인스턴스전역BGP 라우팅DNS, CDN edge

같은 데이터를 여러 수신자에게 보낼 때 멀티캐스트는 네트워크 효율을 높일 수 있습니다.

다만 공용 인터넷에서 임의 멀티캐스트가 널리 제공되는 것은 아니며, 라우팅과 네트워크 장비 지원이 필요합니다.

UDP는 연결 설정이 없고 데이터그램 단위로 보내므로 멀티캐스트·브로드캐스트와 함께 쓰이기 쉽습니다.

TCP는 연결 지향이라 기본적으로 1:1 통신에 맞춰져 있습니다.


전송 계층 면접 총정리

주제질문핵심 답변
QUICQUIC이 UDP 위에 구현된 이유?TCP는 커널·중간장비 영향이 커서 진화가 느리고, UDP 위 사용자 공간 구현은 배포가 빠름
QUIC0-RTT의 보안 위험?replay attack 가능성이 있어 멱등 요청처럼 재실행 안전한 요청에 제한
QUIC연결 마이그레이션이란?Connection ID와 path validation으로 IP/Port 변경 후에도 연결을 이어갈 수 있는 기능
HTTP/3HTTP/2 대비 장점?QUIC 기반 스트림, TCP 수준 HOL Blocking 감소, 연결 설정 지연 감소
통신 패턴유니캐스트/멀티캐스트 차이?유니캐스트는 1:1, 멀티캐스트는 그룹 수신자에게 네트워크가 복제 전달
애니캐스트CDN과 DNS에서 활용하는 이유?같은 IP를 여러 위치에서 광고하고 라우팅이 가까운 인스턴스로 보냄

다음 장에서는 브라우저에 도메인 이름을 입력하면 벌어지는 일, DNS의 세계를 들여다보겠습니다.