"TCP는 믿을 수 있고 UDP는 빠르다"는 한 줄 요약은 맞지만, 왜 그런지를 모르면 "그래서 내 서비스는 뭘 써야 하지?"에서 막힙니다. 차이는 연결을 맺느냐, 도착을 보장하느냐 두 축에서 갈립니다.
핵심 차이: 연결과 보장
TCP는 통신 전에 3-way handshake로 연결을 맺고, 보낸 데이터가 도착했는지 확인(ACK)하며, 빠진 건 재전송하고 순서도 맞춰줍니다. 그만큼 절차가 붙어 느려질 수 있습니다. UDP는 연결 없이 그냥 패킷을 던지고 끝입니다. 도착 여부·순서를 보장하지 않는 대신 군더더기가 없어 빠르고 가볍습니다.
| 구분 | TCP | UDP |
|---|---|---|
| 연결 | 연결형 (handshake) | 비연결형 |
| 신뢰성 | 도착 보장·재전송 | 보장 없음 |
| 순서 | 순서 보장 | 순서 보장 없음 |
| 속도·오버헤드 | 상대적으로 느림·무거움 | 빠름·가벼움 |
| 헤더 크기 | 20바이트 이상 | 8바이트 |
| 대표 용도 | HTTP·SSH·DB | DNS·영상스트리밍·게임 |
언제 무엇을 쓰나
- 데이터가 하나도 빠지면 안 될 때 → TCP: 웹페이지(HTTP/HTTPS), 파일 전송, SSH, 데이터베이스 연결. 글자 하나만 누락돼도 의미가 깨지는 경우입니다.
- 약간의 손실보다 지연이 더 치명적일 때 → UDP: 실시간 영상·음성, 온라인 게임, DNS 조회. 프레임 하나 빠지는 것보다 끊김 없이 빠른 게 중요합니다.
DNS가 UDP를 쓰는 이유가 좋은 예입니다. 짧은 질의·응답 한 번에 handshake 비용을 들이는 건 낭비라서 가볍게 던지고, 응답이 없으면 다시 묻습니다. 반대로 응답이 크면 TCP로 넘어가기도 합니다. 최근 HTTP/3는 UDP 위에 신뢰성을 다시 얹은 QUIC을 쓰는데, 이는 "UDP=비신뢰"라는 공식이 절대 규칙은 아님을 보여줍니다.
직접 확인하기
지금 서버가 어떤 프로토콜로 듣고 있는지 ss로 볼 수 있습니다.
로컬 터미널
ss -tlnp # TCP 리슨 소켓 (-t)
ss -ulnp # UDP 소켓 (-u)
OUTPUT
Netid State Local Address:Port
tcp LISTEN 0.0.0.0:443
tcp LISTEN 0.0.0.0:22
udp UNCONN 0.0.0.0:53
443(HTTPS)·22(SSH)는 tcp LISTEN, 53(DNS)은 udp UNCONN으로 나타나는 게 위 표와 정확히 맞아떨어집니다. UDP는 연결 상태가 없어 UNCONN으로 표시됩니다.
요점 정리
- TCP = 연결·도착 보장·순서 보장, 대신 무겁다.
- UDP = 비연결·보장 없음, 대신 빠르고 가볍다.
- 선택 기준: 손실을 못 견디면 TCP, 지연을 못 견디면 UDP.
ss -tlnp·ss -ulnp로 내 서버의 프로토콜·포트를 직접 확인하세요.
TCP 연결 과정과 패킷을 직접 들여다보며 익히는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.