Foundry
네트워크
기초
핵심

TCP vs UDP

신뢰성 vs 속도, 연결형 vs 비연결형

TCP vs UDP

핵심 비교

구분TCPUDP
연결연결 지향 (3-way)비연결
신뢰성보장 (재전송)보장 안 함
순서보장보장 안 함
속도상대적 느림빠름
헤더20바이트8바이트
흐름 제어OX

프로토콜 선택 기준

요구사항고를 것
신뢰성이 필요하다TCP웹(HTTP), 이메일, 파일 전송
신뢰성보다 실시간성이 중요하다UDP게임, 영상 스트리밍, VoIP
단순한 요청과 응답이면 된다UDPDNS, DHCP

실무 서비스별 프로토콜

서비스프로토콜이유
웹 (HTTP/1,2)TCP데이터 무결성 필수
HTTP/3 (QUIC)UDPTCP HoL 블로킹 해결
게임 서버UDP프레임 손실보다 지연이 치명적
넷플릭스TCP+UDP적응적 비트레이트(ABR)
DNSUDP짧은 요청-응답, 실패 시 재전송
면접에서 이렇게 나옵니다

Q.TCP와 UDP 차이를 설명해주세요

연결을 맺고 보장하는지가 다릅니다.

항목TCPUDP
연결맺고 시작한다없다. 바로 보낸다
순서 보장있다없다
유실 시재전송한다그냥 잃는다
혼잡 제어있다없다. 직접 만들어야 한다
헤더 크기20바이트 이상8바이트
쓰는 곳웹, 파일 전송, 메일실시간 영상과 음성, DNS, 게임

선택 기준은 늦게 온 데이터가 쓸모 있는지입니다. 파일은 늦어도 맞아야 하므로 TCP, 화상 통화는 늦은 프레임이 무의미하므로 UDP 입니다.

흔한 실수: UDP 를 "신뢰성이 없어 나쁜 것"으로 설명하는 것. 보장을 애플리케이션이 골라서 만들 수 있다는 뜻입니다. 순서 번호와 손실 은닉은 만들고 재전송 대기는 버리는 선택이 가능합니다.

Q.게임 서버에서 UDP를 쓰는 이유는?

재전송을 기다리는 것이 게임에서는 손해이기 때문입니다.

위치 정보를 초당 30번 보낸다
100번째 패킷이 유실됐다

TCP   101번과 102번이 도착해도 순서를 지키려고 붙잡아 둔다
      100번을 재전송받고 나서야 넘긴다 -> 왕복 한 번이 지연에 더해진다
UDP   100번은 버리고 101번을 바로 반영한다 -> 최신 위치가 화면에 보인다

이미 지나간 위치를 늦게 받아도 쓸모가 없습니다. 최신 상태가 옛 상태를 덮어쓰는 성질이라 유실을 견딜 수 있습니다.

다만 UDP 위에 필요한 것은 직접 만듭니다. 순서 번호, 중요한 이벤트(피격, 아이템 획득)의 재전송, 대역폭 추정이 그것입니다.

흔한 실수: UDP 를 쓰면 무조건 빠르다고 답하는 것. 대역폭이 같으면 전송 속도는 비슷하고, 줄어드는 것은 유실 시의 지연입니다. 그리고 혼잡 제어를 만들지 않으면 네트워크를 밀어버려 오히려 나빠집니다.

Q.HTTP/3가 UDP 기반(QUIC)인 이유는?

TCP 계층에서 생기는 앞 막힘을 없애기 위해서입니다.

HTTP/2 는 한 TCP 연결에 여러 스트림을 실었다
그런데 TCP 는 바이트 순서를 지키므로

스트림 A 의 패킷이 유실되면
  TCP 가 뒤에 온 스트림 B, C 의 데이터까지 붙잡아 둔다
  애플리케이션은 무관한 스트림인데도 기다린다

QUIC 은 UDP 위에서 스트림별로 순서를 관리하므로 A 만 기다리고 B, C 는 바로 처리됩니다.

얻는 것내용
스트림 독립한 스트림의 유실이 다른 스트림을 막지 않는다
연결 수립 단축전송과 암호화 협상을 합쳐 1왕복, 재접속은 0왕복
연결 유지IP 가 바뀌어도 연결 식별자로 이어진다. 이동 중에 유용하다

흔한 실수: UDP 라서 신뢰성이 없다고 답하는 것. QUIC 이 재전송과 순서와 혼잡 제어를 모두 구현합니다. UDP 를 고른 이유는 보장을 버리려는 것이 아니라 커널의 TCP 대신 직접 구현하려는 것입니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.