C.W.K.
Stream
Lesson 04 of 12 · published

TCP vs UDP

~15 min · tcp, udp, transport-layer, protocols

Level 0Pinger
0 XP0/101 lessons0/12 achievements
0/150 XP to next level150 XP to go0% complete

두 transport 철학

Transport 계층의 두 주연 — TCPUDP. 같은 문제(A 에서 B 로 바이트 옮기기)를 정반대 철학으로 풀어. 어느 쪽이 깔려 있는지 알면 네트워크 동작이 미스터리에서 풀려.

TCP — 신뢰성, 순서, 장부

TCP 는 전화 통화야. 연결을 먼저 세우고 (그 유명한 three-way handshake: SYN → SYN-ACK → ACK), 구조화된 대화를 시작. 모든 바이트에 번호 매기고, 받았다고 응답하고, 잃어버리면 재전송해. 패킷이 순서 어긋나면 TCP 가 다시 조립. 끊을 땐 우아하게 4-way shutdown (FIN/ACK).

이 장부 작업이 latency 비용이지만 — 모든 바이트가 순서대로, 정확히 한 번 도착한다는 보장을 얻어. SSH, HTTP/1, HTTP/2, Git, 이메일 — 다 TCP.

UDP — 던지고 잊어

UDP 는 방 건너편으로 소리치는 거야. Handshake 없고, ack 없고, 재전송 없고, 순서 보장 없어. 그냥 패킷 던지고 끝. 왜 이걸 원해? 속도랑 단순함. 왕복 없으니 latency 가 낮고. 재전송 없으니 비디오 스트림이 빠진 프레임 기다리며 멈추지 않아.

나란히 놓기

특성TCPUDP
연결3-way handshake 먼저없음 — connectionless
신뢰성전달 보장 + 재전송없음 — 패킷이 사라져도 모름
순서순서대로 재조립아무 순서로 도착
Latency높음 (handshake + ack 비용)낮음 (그냥 보냄)
헤더 크기20–60 바이트8 바이트
실제 용도SSH, HTTP, 이메일, 파일 전송, DBDNS, 비디오/음성, 게임, WireGuard, QUIC

HTTP/3 가 재밌는 반전이야 — UDP (위에서 도는 QUIC 프로토콜) 위에서 굴러가는데, 신뢰성을 더 높은 layer 에서 여러 독립 stream 으로 다시 쌓아. Stream A 에서 패킷 잃어도 stream B 는 계속 흘러 — TCP 는 한 줄 바이트 stream 이라 근본적으로 못 하는 일.

Code

Handshake 직접 보기·bash
# Capture an SSH handshake to localhost (requires sudo)
sudo tcpdump -i lo0 -n 'port 22 and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

# In another terminal:
ssh localhost echo hi

# You'll see SYN, SYN-ACK, ACK in tcpdump output
# That's the TCP three-way handshake live

External links

Exercise

코드 블록의 tcpdump 출력 봐. localhost 로 가는 SSH 연결에서 — 어느 쪽이 SYN 먼저 보내는지, 어느 쪽이 SYN-ACK 답하는지, 어느 쪽이 ACK 로 닫는지 식별. 그다음 작은 UDP 요청: dig @8.8.8.8 google.com — 그게 UDP, handshake 없어. localhost TCP setup 보다도 즉각인 게 보이지.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.