TCP와 UDP 차이
🌿 자라는 중
둘 다 L4(전송 계층)에서 데이터를 실어 나르는 프로토콜이고, 차이는 하나로 요약된다: TCP는 전화 통화, UDP는 쪽지 던지기.
- TCP (Transmission Control Protocol): 연결을 먼저 맺고(3-way handshake), 데이터마다 번호를 붙여 확인(ACK)을 주고받는 전송 프로토콜. 유실되면 알아채고 재전송한다. 느리지만 완전함
- UDP (User Datagram Protocol): 연결도 확인도 없이 그냥 보내는 전송 프로토콜. 유실돼도 복구하지 않는다. 불완전하지만 빠름
- 3-way handshake: TCP가 데이터를 보내기 전에 나누는 세 번의 인사. “여보세요?(SYN) → 네, 들려요(SYN+ACK) → 좋아, 시작!(ACK)”
- ACK (Acknowledgment): “잘 받았다”는 확인 응답. TCP 신뢰성의 핵심 부품
포트 번호로 어떤 프로그램에게 갈 데이터인지 식별하는 것은 둘이 같다 → 계층 구조는 네트워크 계층과 L2·L3 통신 참고.
TCP: 전화 통화
- 데이터를 보내기 전에 반드시 ①~③의 인사(3-way handshake)로 연결을 맺는다
- 데이터마다 번호(시퀀스 번호)를 붙이고, 받는 쪽은 “받았어”(ACK)로 답한다
- ACK가 안 돌아오면 유실로 판단하고 재전송한다. 번호가 있으니 순서가 뒤섞여 도착해도 원래대로 조립할 수 있다
- 이 확인 절차 때문에 왕복 대기가 생기고, 그만큼 느리다
UDP: 쪽지 던지기
화살표가 전부 한 방향이다. 이 “무심함”이 UDP의 단점이자 최대 장점 - 인사(handshake)도 확인(ACK)도 없으니 왕복 대기 시간이 없고, 데이터에 붙는 관리 정보(헤더)도 훨씬 가볍다.
한눈에 비교
| TCP | UDP | |
|---|---|---|
| 비유 | 전화 통화 | 쪽지 던지기 |
| 연결 | 먼저 인사하고 시작 (3-way handshake) | 그냥 보냄 |
| 유실되면 | 알아채고 재전송 | 모름, 끝 |
| 순서 | 번호 붙여서 순서 보장 | 뒤바뀔 수 있음 |
| 속도 | 상대적으로 느림 (확인 비용) | 빠름 |
| 쓰는 곳 | 웹(HTTP), 메일, 파일 전송 | 영상통화, 게임, 스트리밍, DNS |
선택 기준: 다시 받는 게 의미 있는가
어디에 뭘 쓰는지의 기준은 하나다. “잃어버린 데이터를 다시 받는 게 의미가 있는가?”
- 파일 다운로드에서 중간 1%가 빠지면 파일이 깨진다. 늦더라도 완전해야 한다 → TCP
- 영상통화에서 0.1초 전 화면 조각이 유실됐다면? 지금 다시 받아봤자 이미 지나간 장면이다. 버리고 다음 프레임을 보여주는 게 낫다 → UDP. 게임의 캐릭터 위치도 마찬가지 - 옛 위치를 재전송받느니 최신 위치를 받는 게 낫다
정처기 포인트
TCP·UDP는 전송 계층(L4) 프로토콜이고, 이 계층의 전송 단위(PDU)는 **세그먼트(Segment)**다. 시험은 둘의 특징을 바꿔치기하거나 헤더 크기를 묻는 식으로 나온다.
특징 비교 - 바꿔치기 함정 단골.
| TCP | UDP | |
|---|---|---|
| 연결 | 연결형(connection-oriented) | 비연결형(connectionless) |
| 신뢰성 | 있음 (재전송·순서보장) | 없음 |
| 제어 | 흐름제어·혼잡제어 | 없음 |
| 헤더 크기 | 20바이트(옵션 제외) | 8바이트 |
| 전송 방식 | 전이중(full-duplex) | 단순 전송 |
연결 수립·종료 - 숫자 함정.
- 수립 = 3-way handshake (SYN → SYN+ACK → ACK)
- 종료 = 4-way handshake (FIN → ACK → FIN → ACK)
흐름·혼잡 제어 - 용어 단골.
- 흐름제어: 슬라이딩 윈도우(Sliding Window), Stop-and-Wait
- 혼잡제어: 느린 시작(Slow Start), 혼잡 회피
무엇이 무엇을 타나 - 구분 문제.
-
TCP 위: HTTP, FTP, SMTP, Telnet, SSH
-
UDP 위: DNS, DHCP, TFTP, SNMP, 스트리밍·VoIP
-
함정 1: “UDP가 연결형이다” → ✕. 연결형은 TCP.
-
함정 2: 헤더 크기 TCP 20 / UDP 8 바이트를 바꿔 낸다.
-
함정 3: 수립 3-way ↔ 종료 4-way를 헷갈리게.
한 줄: TCP = 연결형·신뢰성·헤더 20·수립 3way/종료 4way, UDP = 비연결·비신뢰·헤더 8·빠름.
연결되는 것들
- HTTP는 TCP 위에서 달린다. Request와 Response가 정확히 전달돼야 하니까. 브라우저에서 페이지 하나 열 때, 보이지 않는 곳에서 ①~③ 전화 인사가 먼저 일어나고 있다 → HTTP Request와 Response
- 반전 - 최신 HTTP/3는 UDP 위에서 달린다. “TCP의 확인 절차가 너무 느리니, 빠른 UDP 위에 필요한 신뢰성만 직접 다시 만들자”는 발상(QUIC)
- DNS가 UDP(53번 포트)를 쓰는 이유도 같은 논리다. “도메인 → IP” 질문 하나에 답 하나라, 전화 개통까지 할 필요가 없다. 패킷 캡처를 보면 DNS는 UDP, 웹은 TCP인 걸 바로 확인할 수 있다