TCP와 UDP는 IP 위에서 애플리케이션 데이터를 전달하는 전송 계층 프로토콜입니다. 핵심 차이는 단순한 속도보다 전송 과정에서 어떤 기능을 제공하는지에 있습니다.

TCP

TCP는 연결을 맺고 순서가 보장되는 신뢰성 있는 바이트 스트림을 제공합니다. 시퀀스 번호와 확인 응답을 사용해 데이터 순서를 관리하고, 손실된 데이터는 재전송합니다.

  • 흐름 제어: 수신 측이 처리할 수 있는 양을 고려합니다.
  • 혼잡 제어: 네트워크 혼잡에 맞춰 전송량을 조절합니다.
  • 양방향 통신: 하나의 연결에서 양쪽이 데이터를 보낼 수 있습니다.

TCP에는 애플리케이션 메시지 경계가 없습니다. send 두 번이 상대의 read 두 번에 그대로 대응하지 않으므로 길이 정보나 구분자 같은 메시지 규칙이 필요합니다. 연결이 실패할 수 있으므로 신뢰성이 “언제나 전송 성공”을 뜻하지는 않습니다.

UDP

UDP는 데이터그램 단위로 전송하며 메시지 경계를 유지합니다. 프로토콜 자체에서 연결 수립, 순서 보장, 재전송을 제공하지 않습니다.

수신 여부 확인이나 재전송이 필요하다면 애플리케이션 또는 상위 프로토콜에서 구현해야 합니다. 체크섬은 오류 검출 수단이며 전송 성공이나 보안을 보장하는 기능은 아닙니다.

비교

구분 TCP UDP
데이터 단위 바이트 스트림 데이터그램
연결 설정 필요 자체 핸드셰이크 없음
순서·재전송 제공 자체 제공하지 않음
흐름·혼잡 제어 제공 자체 제공하지 않음
대표 활용 파일 전송, HTTP/1.1·HTTP/2 실시간 통신, DNS 질의, QUIC의 기반

UDP는 기본 동작의 부담이 작지만 “항상 TCP보다 빠르다”라고 단정할 수는 없습니다. 손실률, 혼잡, 메시지 크기와 상위 프로토콜에 따라 실제 성능이 달라집니다.

선택 기준

누락 없이 순서대로 받아야 한다면 TCP가 적합한 출발점입니다. 늦게 도착한 과거 데이터보다 최신 데이터가 중요한 실시간 서비스에서는 UDP 기반 설계가 유리할 수 있습니다. 다만 UDP를 선택해도 서비스가 요구하는 신뢰성과 혼잡 제어는 별도로 고려해야 합니다.

참고