C
네트워크/TCP_UDP/Lesson 03

TCP · UDP — 패킷·핸드셰이크·흐름/혼잡 제어

45분·theory

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

비교:

항목TCPUDP
연결필수 (3-way)없음
헤더20-60 byte8 byte
신뢰성보장X
순서보장X
속도중간빠름
용도웹·DB·파일실시간·DNS

QUIC (HTTP/3) — UDP 위에 신뢰성:

  • Google 개발, RFC 9000 (2021)
  • TCP+TLS 오버헤드 회피
  • 모바일·실시간 환경에 강함
  • YouTube·Google·Cloudflare 도입

TCP 3-way + 4-way Handshake

3-way Handshake (연결):

code
Client                              Server
  │   ── SYN, seq=x         ──▶     │
  │                                  │
  │   ◀── SYN-ACK, seq=y, ack=x+1   │
  │                                  │
  │   ── ACK, ack=y+1       ──▶     │
  │                                  │
  │       [연결 확립 — 데이터 전송 시작]

1. SYN — Client: "연결 요청 (seq=x)"
2. SYN-ACK — Server: "수락 + 내 seq=y"
3. ACK — Client: "확인 (ack=y+1)"

이후 양방향 데이터 전송.

4-way Handshake (종료):

code
Client                              Server
  │   ── FIN              ──▶       │
  │   ◀── ACK              ─        │   (서버 데이터 정리 중)
  │                                  │
  │   ◀── FIN              ─        │
  │   ── ACK              ──▶       │
  │       [TIME_WAIT — 2*MSL 대기]

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:

code
보낸 데이터        보낼 수 있음        못 보냄
[──ACK 받음──][──아직 ACK 안 옴──][──Window 밖──]
                   └─ Window Size ─┘

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 로

현대 알고리즘:

알고리즘특징
Reno·NewReno표준 (오래된 Linux 기본)
CUBICLinux 기본 (2.6+) — 고대역폭·고지연
BBR (2016, Google)YouTube·Google 사용. 지연 기반

RTT (Round Trip Time) — 왕복 시간. 네트워크 핵심 지표:

  • 서울 → 서울: 1-5ms
  • 서울 → 도쿄: 30ms
  • 서울 → 캘리포니아: 150ms
  • 서울 → 유럽: 250ms

> 💡 모바일 네트워크 는 RTT 가 매우 가변적 → BBR 같은 지연 기반 알고리즘 유리.

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 작업에 TCP vs UDP 어느 게 맞는지 진단해줘"
  • "TCP 3-way handshake 를 Wireshark 캡처 형식으로 시뮬레이션해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

TCP · UDP — 패킷·핸드셰이크·흐름/혼잡제어 - 네트워크