TCP · UDP — 패킷·핸드셰이크·흐름/혼잡 제어
TCP · UDP — 패킷·핸드셰이크·흐름/혼잡 제어
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ TCP 3-way handshake / 4-way close
- ▸✅ TCP vs UDP 선택 기준
- ▸✅ TCP 흐름 제어 + 혼잡 제어
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
TCP vs UDP — 정확 vs 빠름
TCP (Transmission Control Protocol):
- ▸연결 지향 (3-way handshake)
- ▸신뢰성 (재전송·순서 보장·중복 제거)
- ▸흐름·혼잡 제어 (네트워크 상태 따라 속도 조절)
- ▸용도: HTTP·SSH·이메일·DB
UDP (User Datagram Protocol):
- ▸비연결 (handshake X)
- ▸빠름 (오버헤드 적음)
- ▸신뢰성 ❌ (앱이 책임)
- ▸용도: DNS·VoIP·게임·실시간 영상·QUIC
비교:
QUIC (HTTP/3) — UDP 위에 신뢰성:
- ▸Google 개발, RFC 9000 (2021)
- ▸TCP+TLS 오버헤드 회피
- ▸모바일·실시간 환경에 강함
- ▸YouTube·Google·Cloudflare 도입
TCP 3-way + 4-way Handshake
3-way Handshake (연결):
1. SYN — Client: "연결 요청 (seq=x)"
2. SYN-ACK — Server: "수락 + 내 seq=y"
3. ACK — Client: "확인 (ack=y+1)"
이후 양방향 데이터 전송.
4-way Handshake (종료):
1. FIN — Client: "종료할게"
2. ACK — Server: "알았어. 잠시만 (남은 데이터 정리)"
3. FIN — Server: "나도 끝"
4. ACK — Client: "확인"
TIME_WAIT (2 × MSL):
- ▸마지막 ACK 가 손실되면 재전송 필요
- ▸새로 같은 포트 재사용 시 옛 패킷 혼동 방지
- ▸Linux 기본 60초
왜 4번? 종료는 양쪽 모두 데이터 정리 필요. 연결처럼 SYN+ACK 묶을 수 없음.
흐름 제어 + 혼잡 제어
Flow Control (흐름 제어) — 수신자 처리 속도에 맞춰:
- ▸수신자가 Window Size 광고
- ▸송신자는 그만큼만 보냄
- ▸수신 버퍼 가득 차면 Window Size = 0 → 송신 일시 정지
Sliding Window:
Congestion Control (혼잡 제어) — 네트워크 상태에 맞춰:
4 가지 알고리즘:
1. Slow Start — 매 RTT 마다 윈도우 2배 (지수 증가)
2. Congestion Avoidance — 임계값 후 선형 증가 (RTT 당 +1)
3. Fast Retransmit — 중복 ACK 3개 받으면 즉시 재전송
4. Fast Recovery — Slow Start 안 가고 Congestion Avoidance 로
현대 알고리즘:
RTT (Round Trip Time) — 왕복 시간. 네트워크 핵심 지표:
- ▸서울 → 서울: 1-5ms
- ▸서울 → 도쿄: 30ms
- ▸서울 → 캘리포니아: 150ms
- ▸서울 → 유럽: 250ms
> 💡 모바일 네트워크 는 RTT 가 매우 가변적 → BBR 같은 지연 기반 알고리즘 유리.
🤖 AI 에게 이렇게 요청해보세요
이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.
- ▸"이 작업에 TCP vs UDP 어느 게 맞는지 진단해줘"
- ▸"TCP 3-way handshake 를 Wireshark 캡처 형식으로 시뮬레이션해줘"
왜 이게 토큰을 줄이나
개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.