TCP와 UDP의 차이: 연결·신뢰성·순서·혼잡 제어·헤더·지연·용도 비교

TCP와 UDP는 모두 IP 위에서 동작하고 포트 번호로 애플리케이션을 구별하는 전송 계층 프로토콜입니다. TCP는 데이터를 보내기 전에 3-way 핸드셰이크로 연결을 수립하고, 확인 응답(ACK)으로 도착을 확인하며, 잃어버린 데이터는 재전송하고, 보낸 순서대로 수신 애플리케이션에 넘깁니다. 또한 수신 측의 빈 버퍼(흐름 제어)와 네트워크의 혼잡(혼잡 제어)에 맞춰 보내는 양을 조절합니다. UDP는 이런 일을 전혀 하지 않고 데이터를 데이터그램으로 그냥 보내므로, 헤더가 작고 보내기 전에 기다릴 필요가 없습니다. 확실한 전달이 중요하면 TCP를, 낮은 지연이 중요하고 필요한 나머지는 애플리케이션이 처리하는 경우에는 UDP를 씁니다.

비교 항목TCPUDP
연결 수립연결형. 3-way 핸드셰이크(SYN → SYN+ACK → ACK) 뒤에 데이터를 보내므로, 처음에 1왕복(RTT)의 대기가 생깁니다비연결형. 준비 없이 바로 데이터를 보낼 수 있습니다
확인 응답과 재전송ACK로 도착을 확인하고, 재전송 타임아웃이나 중복 ACK로 손실을 감지해 잃어버린 데이터를 다시 보냅니다확인 응답도 재전송도 없습니다. 잃어버린 데이터는 그대로 사라집니다
순서순서 번호로 데이터를 재정렬해 보낸 순서대로 전달하며, 중복은 제거합니다도착한 순서대로 전달합니다. 순서 바뀜과 중복이 일어날 수 있습니다
데이터 경계경계가 없는 바이트 스트림. 메시지의 시작과 끝은 애플리케이션이 정합니다한 번의 송신이 하나의 데이터그램이 되므로 메시지 경계가 유지됩니다
흐름 제어와 혼잡 제어있음. 수신 윈도로 수신 측 버퍼가 넘치지 않게 하고, 혼잡 윈도로 보내는 양을 혼잡에 맞춥니다없음. 필요하면 애플리케이션이 직접 송신 속도를 조절합니다
헤더 크기옵션 없이 20바이트(옵션 포함 최대 60바이트)8바이트(출발지·목적지 포트, 길이, 체크섬)
지연연결 수립에 1왕복이 들고, 손실 후에는 뒤의 데이터도 재전송이 도착할 때까지 기다립니다준비도 재전송 대기도 없어 지연이 작지만, 일부 데이터가 빠질 수 있습니다
전송 대상의 종류1대1(유니캐스트)만유니캐스트와 브로드캐스트, 멀티캐스트
대표 용도HTTP/1.1과 HTTP/2의 웹, HTTP를 통한 동영상 전송, 이메일(SMTP), SSH, 파일 전송DNS 질의, DHCP, 음성 통화나 생방송 영상 같은 실시간 통신, 온라인 게임, HTTP/3이 쓰는 QUIC

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

TCP
데이터가 빠지거나 순서가 바뀌면 곤란할 때. 웹 페이지, 파일, 이메일, 데이터베이스 연결 등 대부분의 애플리케이션의 기본입니다.
UDP
늦게 도착하느니 조금 잃는 편이 나은 실시간 통신이나, 질의 한 번과 응답 한 번으로 끝나는 짧은 교환에 씁니다. 브로드캐스트와 멀티캐스트, 그리고 QUIC처럼 애플리케이션이 자체적으로 신뢰성을 만드는 경우에도 씁니다.

자주 묻는 질문

UDP는 신뢰성이 없으니 피해야 하나요?

목적에 따라 다릅니다. UDP가 생략하는 것은 도착 확인과 재전송, 순서 보장, 송신 속도 조절입니다. 이것들이 필요 없거나 애플리케이션이 자기 방식으로 처리하고 싶다면 UDP가 잘 맞습니다. 예를 들어 음성 통화에서는 늦게 도착한 소리는 쓸모가 없으므로 재전송을 기다리기보다 넘어가는 편이 낫습니다. 다만 UDP로 많은 데이터를 보내는 애플리케이션은 네트워크를 혼잡하게 만들지 않도록 송신 속도를 스스로 제어해야 합니다.

QUIC은 왜 UDP 위에 만들어졌나요?

QUIC(RFC 9000)은 재전송, 순서 보장, 혼잡 제어, TLS 1.3 암호화를 합친 전송 프로토콜입니다. IP 위에 직접 싣는 완전히 새로운 프로토콜은 경로상의 NAT와 방화벽을 통과하지 못하는 경우가 많고, 운영체제의 지원도 기다려야 합니다. UDP 위에 만들면 기존 네트워크를 통과할 수 있고 애플리케이션 안에서 구현하고 갱신할 수 있습니다. HTTP/3은 QUIC 위에서 동작합니다.

DNS는 UDP만 쓰나요?

일반적인 이름 질의는 UDP 53번 포트를 쓰며 질의 한 번과 응답 한 번으로 끝납니다. 응답이 너무 커서 UDP로 보낼 수 없을 때와 존 전송에는 TCP를 쓰며, DNS 구현은 TCP도 지원해야 합니다(RFC 7766).

TCP의 흐름 제어와 혼잡 제어는 무엇이 다른가요?

흐름 제어는 수신 측 버퍼가 넘치지 않게 하는 것으로, 수신 측이 빈 공간을 수신 윈도로 알립니다. 혼잡 제어는 경로상의 네트워크가 과부하되지 않게 하는 것으로, 송신 측이 패킷 손실 같은 징후로 혼잡을 추정해 혼잡 윈도를 늘리거나 줄입니다. 실제로 보낼 수 있는 양은 두 윈도 중 작은 쪽으로 정해집니다.

이해도 확인

TCP/IP의 4계층 모델에서 TCP와 UDP가 속하는 계층은?

  1. A응용 계층
  2. B인터넷 계층
  3. C전송 계층
정답과 해설 보기

정답: C. 전송 계층

TCP/IP 모델은 아래에서부터 링크 계층(네트워크 인터페이스 계층), 인터넷 계층, 전송 계층, 응용 계층의 4개 계층으로 나타냅니다. TCP와 UDP는 전송 계층의 프로토콜로, 포트 번호를 사용하여 단말 안의 어느 애플리케이션으로 가는 통신인지를 구별합니다. 인터넷 계층의 IP는 단말에서 단말까지 패킷을 전달하는 일을 담당합니다. HTTP와 DNS는 응용 계층의 프로토콜입니다. OSI 참조 모델에 대응시키면 전송 계층은 4계층, 인터넷 계층은 3계층에 해당합니다.

UDP의 특징으로 올바른 것은?

  1. A연결을 설정하지 않고 재전송이나 순서 제어를 하지 않으므로 헤더가 작고, 보내기 전까지의 대기도 없다
  2. B연결을 설정하고, 도달하지 못한 데이터를 재전송하며, 수신 측에서 순서도 맞춘다
  3. CIP 주소를 사용하지 않고 MAC 주소만으로 목적지 단말에 전달한다
정답과 해설 보기

정답: A. 연결을 설정하지 않고 재전송이나 순서 제어를 하지 않으므로 헤더가 작고, 보내기 전까지의 대기도 없다

UDP는 IP 위에 포트 번호와 간단한 오류 검출(체크섬)만 더한 가벼운 프로토콜로, 헤더는 8바이트입니다(TCP는 옵션 없이 20바이트). 연결 절차가 없고 도달 확인이나 재전송도 하지 않으므로, 조금 손실되더라도 지연되지 않는 편이 좋은 음성 통화나 라이브 영상, 한 번의 질의와 응답으로 끝나는 DNS 등에 사용됩니다. 신뢰성이 필요하면 애플리케이션 쪽에서 보완합니다. 예를 들어 HTTP/3에서 사용되는 QUIC은 UDP 위에서 재전송과 암호화를 구현합니다. 연결 설정, 재전송, 순서 제어를 수행하는 것은 TCP입니다.

TCP에서 연결을 설정하는 3-way 핸드셰이크에서 주고받는 패킷의 순서로 올바른 것은?

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
정답과 해설 보기

정답: C. SYN → SYN+ACK → ACK

3-way 핸드셰이크에서는 먼저 클라이언트가 SYN으로 연결을 요청하면서 자신이 보낼 데이터의 첫 번호(초기 시퀀스 번호)를 알립니다. 서버는 SYN+ACK로 그것을 받았음을 확인(ACK)하는 동시에 자신의 초기 시퀀스 번호를 알립니다. 마지막으로 클라이언트가 ACK를 돌려보내면 양방향 통신의 준비가 갖추어집니다. 세 번의 교환으로 양쪽 방향의 번호를 서로 확인함으로써, 늦게 도착한 오래된 패킷으로 인한 잘못된 연결 등을 막습니다. 이 때문에 TCP에서는 데이터를 보내기 시작할 때까지 적어도 1왕복 시간(RTT)이 걸립니다. FIN은 연결을 종료할 때 사용합니다.

  1. TCP의 흐름 제어에서 수신 측이 윈도 크기(수신 윈도)를 송신 측에 알리는 목적으로 올바른 것은?
  2. TCP 혼잡 제어의 기본적인 개념으로 올바른 것은?
  3. TCP의 송신 측이 세그먼트가 손실되었다고 판단하여 재전송하는 계기로 올바른 것은?

네트워크 기초 문제 풀기

주요 용어 설명

3-way 핸드셰이크(Three-way Handshake)
TCP에서 연결을 설정하는 절차. 클라이언트의 SYN, 서버의 SYN+ACK, 클라이언트의 ACK의 세 번의 교환으로 서로의 초기 시퀀스 번호를 확인한다.
포트 번호(Port Number)
TCP나 UDP에서 단말 안의 어느 애플리케이션으로 가는 통신인지를 구별하는 0~65535의 번호. HTTP의 80, HTTPS의 443, DNS의 53 등 0~1023은 잘 알려진 포트(well-known port)라고 한다.
OSI 참조 모델(OSI Reference Model)
통신 기능을 물리 계층·데이터 링크 계층·네트워크 계층·전송 계층·세션 계층·표현 계층·응용 계층의 7개 계층으로 나누어 정리한 모델. 각 계층의 역할을 나누어 생각하기 위한 공통의 언어로 쓰인다.
DNS(도메인 네임 시스템)
Domain Name System의 약자. www.example.com 같은 도메인 이름과 통신에 사용하는 IP 주소를 대응시키는, 전 세계의 서버에서 분산 관리되는 구조.
DHCP
Dynamic Host Configuration Protocol의 약자. 네트워크에 연결한 단말에 IP 주소, 서브넷 마스크, 기본 게이트웨이, DNS 서버 등의 설정을 기한을 두고 자동으로 할당하는 프로토콜.
TLS
Transport Layer Security의 약자. 통신의 암호화, 변조 검출, 인증서에 의한 서버 인증을 수행하는 프로토콜. HTTPS는 HTTP를 TLS로 보호한 것이다.
HTTP(하이퍼텍스트 전송 프로토콜)
웹 브라우저와 웹 서버 등의 사이에서 HTML이나 이미지, 데이터를 주고받기 위한 응용 계층의 프로토콜. 클라이언트가 메서드, URL, 헤더, 본문으로 이루어진 요청을 보내고, 서버가 상태 코드, 헤더, 본문으로 이루어진 응답을 돌려준다. 프로토콜로서는 무상태이며, 로그인 같은 상태는 Cookie 등을 사용하여 유지한다. HTTP/1.1은 텍스트 형식으로 지속 연결을 사용하고, HTTP/2는 하나의 TCP 연결 위에서 여러 스트림을 다중화하며, HTTP/3은 UDP 위의 QUIC을 사용한다. TLS로 보호한 것을 HTTPS라고 한다.

관련 비교