Transmission Control Protocl은 인터넷에서 데이터를 전송하는 주요 프로토콜임. 신뢰성을 보장한다는 것이 가장 큰 특징임.

| 계층 | 이름 | 역할 |
|---|---|---|
| 전송 계층 | TCP | 컴퓨터 둘이 “신뢰할 수 있는” 데이터 통로를 만든다. |
| 보안 덮개 | TLS | 그 통로 위에 자물쇠를 씌워 엿보지 못하게 한다. |
| 애플리케이션 | HTTP 1.1 / 2 / 3 | 그 통로를 이용해 웹페이지·API 요청/응답을 주고받는다. |

필수 필드 : 데이터를 잃지 않고 순서 그대로 받았는지 확인하고자 함.
Src/Dst Port(16b) · Seq · Ack · Data Offset · Flags(SYN/ACK/FIN/RST/PSH/URG/ECE/CWR) · Window Size · Checksum · Urgent Ptr.
동작
3-Way Handshake : TCP 연결을 초기화 할 때 사용

SYN (x) → SYN+ACK (x+1,y) → ACK (y+1)데이터 흐름
4-Way 종료 : 세션을 종료하기 위해 수행

FIN → ACK → FIN → ACK, TIME_WAIT 2 × MSL.


세그먼트 #100이 손실된다.
그 뒤 세그먼트는 정상적으로 도착하므로 수신 측은 ACK 100만 반복해서 보낸다.
송신 측이 세 번 연속 같은 ACK를 보면 #100을 바로 재전송한다. (Fast Retransmit)
동시에 cwnd를 절반으로 깎고, 그 뒤 한 번의 전체 ACK가 오면 선형 증가 모드로 돌아간다. (Fast Recovery)
| 알고리즘 | 성장 패턴 | 감속 기준 | 특징 |
|---|---|---|---|
| Tahoe | Slow-Start → AIMD | 패킷 Loss | 초기 고안(1988) |
| Reno | Fast Recovery 도입 | 3 DupACK / RTO | 장수 표준 |
| Cubic | Cubic 함수 | 패킷 Loss | Linux 기본, 고-B/W |
| BBR v2 | Model-based (최대 B/W, 최소 RTT 추정) | Queue Delay 증가 | 저지연·고율, Google 배포 |
| 이름 | 주체 | 의미 |
|---|---|---|
| rwnd | 수신 측 | “내 애플리케이션 버퍼에 여유가 이만큼 있으니 그 이상은 잠깐 멈춰 줘.” |
| cwnd | 송신 측 | “망이 감당할 만하다고 추정하는 한도 내에서 이만큼까진 날려도 되겠다.” |
| ssthresh | 송신 측 | “cwnd가 이 값을 넘으면 더 이상 지수 증가하지 말고 선형으로 천천히 늘려라.” |
rwnd (수신 창) – “내 버퍼가 이만큼 비었으니 그 이상은 잠깐 멈춰.”
cwnd (혼잡 창) – “망이 감당할 수 있다고 내가 ‘추정’한 최대치.”
ssthresh (슬로스타트 임계값) – “여기부터는 조심해서 늘려.”
덕분에 다음 번엔 지수 성장이 ssthresh 까지만, 그 이후는 선형 성장으로 변합니다.

손실이 났으면 처음부터 다시 함.
- 회복 속도는 느리지만 혼잡 붕괴 재발을 막음.
cwnd = 1MSScwnd += 1MSS → RTT마다 2배 증가sshthresh(slow-start threshold) 값에 도달하면 Congestion Avodance로 전환됨.
Tahoe + Fast Recovery
- 손실은 있었지만 망이 완전히 막힌게 아니면 속도를 절반을 줄이고 계속 선형 증가.
Q. 혼잡이 발생한 근처의 크기로 cwnd를 조절하면 되는데, 왜 절반으로 줄이는가?
A1. 손실은 라우터 큐가 꽉 찬 결과지만,
“얼마나 꽉 찼는지”·“다른 송신자도 얼마나 보내고 있는지”는 알 수 없습니다.
A2. 큐를 빠르게 비우면서도 ‘처리량 0’까지 떨어지지 않는 경험적 최적점
A3. 여러 송신자가 같은 링크를 쓸 때 동시에 손실을 겪으면 동시에 ½ 로 줄여야
각자 차지하던 비율 이 유지
A4. cwnd를 아주 조금만 내리고 금세 다시 올리면 오버슈트-언더슈트가 계속되어 그래프가 발진함. (과도현상)

tinygram flood 발생함. HOL 지연
- 앞선 요청이 DB/쿼리/IO로 오래걸리면 그 뒤의 요청들도 TCP 버퍼에 묶여 연쇄적으로 지연됨.


TCP 통신에서 중간에 하나가 빠지면 그 뒤 블록도 모조리 재전송하는 GO-Back-N 방식으로, 10MB 링크에서 딱 1KB 빠져도 다시 10MB를 다시 보내는 낭비가 발생함.
동작
효과

모바일 앱 / CDN 썸네일처럼 짧은 연결 수백 번을 만드는 경우 SYN - SYN/ACK - ACK - DATA로 2RTT
프로토콜 흐름
효과
주의
- TFO는 “SYN 안에 첫 HTTP 요청 데이터까지 실어 보낸다” → 연결 RTT를 아낀다.
- 서버는 쿠키·권한만 즉석 확인 후 TCP 완료를 기다리지 않고 응답 생성에 들어가므로 TTFB 가 크게 준다.
- 모바일·짧은 다중 연결 환경에서 실제로 10 ~ 30 % TTFB 단축이 반복 검증됐다.
- 기존 TCP를 대체한 새로운 전송층 또는 아키텍처로 갈아타는 방식.
- 목표는 “TCP가 주는 호환성과 신뢰성은 유지하면서, 단점 — HOL 블로킹·긴 핸드셰이크·고정 헤더 등 — 을 덜어 보자” 입니다.
| 핵심 아이디어 | 구체적 장치 |
|---|---|
| 1-RTT(재접속 0-RTT) 암호화 | TLS 1.3 핸드셰이크를 전송층과 합침 |
| 멀티스트림 & HOL 제거 | 패킷이 아니라 프레임 단위 재전송 |
| 연결 지속성 | IP 바뀌어도 ConnectionID로 세션 유지 |
| 유저 공간 구현 | 커널 패치 없이 라이브러리 교체만으로 업그레이드 |
| 특징 | 설명 |
|---|---|
| 멀티스트림 | 하나의 연결에 여러 논리 메시지 → HOL 블로킹 최소 |
| 멀티홈 | 연결 생성 후 다른 IP(인터페이스)로 투명 Fail-over |
| 메시지 경계 유지 | “Datagram + 신뢰성” 하이브리드 |
Twitch Low-Latency, Zoom, CitiStreamer…
| 선택 방식 | 얻는 것 |
|---|---|
| 애플리케이션이 직접 ACK / 재전송 / FEC | TCP보다 지연 예측 가능 (필요 패킷만 재송) |
| UDP 헤더 그대로 | NAT 친화성, 커스텀 헤더 설계의 자유 |
단점