핵심 인사이트 (3줄 요약)

  1. 본질: 빠른 회복(Fast Recovery)은 앞 장의 '빠른 재전송(3 Dup-ACK)'이 터졌을 때, "야, 어차피 대답은 계속 잘 오고 길은 뚫려 있는데 뭣 하러 속도를 1부터 찌질하게 다시 시작(Slow Start)하냐? 그냥 속도 절반만 깎고 곧바로 혼잡 회피(정속 주행) 모드로 넘어가 버려!"라며 슬로우 스타트를 과감하게 생략해 버리는 스피드 보존 기술이다.
  2. TCP Reno vs TCP Tahoe: 옛날 구석기 시대의 타호(Tahoe) 버전은 패킷 1개만 잃어버려도 무조건 속도(CWND)를 1로 박살 냈다. 하지만 레노(Reno) 버전에서 이 '빠른 회복' 기능이 추가되면서, 1개 잃어버렸을 땐 속도가 1로 떨어지지 않고 절반만 깎이게 되어 현대 인터넷의 톱니바퀴 그래프(Sawtooth)를 완성했다.
  3. 중복 ACK 뻥튀기 꼼수: 빠른 회복 중에는 수신자가 징징거리며 보내는 가짜 영수증(중복 ACK) 하나하나를 "어쨌든 내 패킷이 길을 무사히 통과했다는 증거"로 역이용하여, 오히려 내 CWND 창문을 임시로 1개씩 늘려(Inflate) 빈 공간에 새 패킷을 우겨넣는 무서운 기지를 발휘한다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: 3개의 중복 ACK(Dup-ACK) 수신으로 '빠른 재전송'이 발동되었을 때, 네트워크가 심각한 혼잡 상태가 아니라고 판단하여 Slow Start(CWND=1) 과정을 생략하고, 즉시 CWND를 절반으로만 줄인 뒤 혼잡 회피(Congestion Avoidance) 단계로 진입하는 TCP Reno의 핵심 알고리즘.

  • 필요성: 100Mbps로 신나게 달리다가 패킷 딱 1개가 유실됐다. 구형 TCP(Tahoe)는 벌벌 떨면서 속도를 1Mbps(CWND=1)로 확 낮춰버렸다. 다시 100Mbps까지 올라가는데 5초나 걸렸다. 영화 다운로드가 뚝뚝 끊겼다. "아니, 지금 3번이나 똑같은 대답(3 Dup-ACK)이 날아온다는 건, 내가 쏜 패킷 3개가 무사히 목적지에 도착했다는 뜻이잖아! 길이 막힌 게 아니라 뻥 뚫려있는 거라고!! 왜 속도를 1로 박살 내? 쫄지 말고 딱 반만 깎고 계속 달려!!" 이것이 패스트 리커버리의 위대한 철학이다.

  • 💡 비유:

    • 구형 (Tahoe): 고속도로 1차선을 시속 100km로 달리다가, 1차선에 작은 싱크홀(패킷 1개 유실)이 생겨 차가 덜컹했습니다. 운전자는 멘붕에 빠져 차를 아예 갓길에 세운 뒤 시속 1km(CWND=1)부터 다시 액셀을 천천히 밟습니다.
    • 빠른 회복 (Reno): 똑같이 덜컹했습니다. 하지만 옆에 2, 3, 4차선으로 차들이 쌩쌩 달리는 걸 눈으로 확인(3 Dup-ACK)했습니다. 운전자는 멈추지 않고 브레이크만 살짝 밟아 시속 50km(절반)로 속도만 줄인 뒤, 멈춤 없이 계속 주행을 이어갑니다.

📢 섹션 요약 비유: 빠른 회복(Fast Recovery)은 육상 경기에서 넘어졌을 때 대처법입니다. 넘어졌다고 **"출발선(Slow Start)으로 다시 돌아가서 뛰는 멍청한 짓"**을 하지 않고, **"넘어진 그 자리에서 툭툭 털고 일어나 속도만 조금 줄인 채 레이스를 이어가는 불굴의 생존 본능"**입니다.


Ⅱ. Fast Recovery의 동작 시퀀스와 그래프 변화 (Deep Dive)

1. 상태 전이의 기적 (Tahoe vs Reno)

  • 상황: CWND = 32 로 달리는 중에 3 Dup-ACK (가벼운 유실) 발생.
  • TCP Tahoe (옛날 방식):
    • ssthresh = 16 (현재의 절반) 으로 저장.
    • CWND = 1 로 곤두박질!
    • 1 -> 2 -> 4 -> 8 -> 16 (Slow Start의 지루한 워밍업 다시 반복).
  • TCP Reno (빠른 회복 탑재) ★현대 표준:
    • ssthresh = 16 으로 저장.
    • CWND = 16 으로 절반만 깎고 방어 완료!
    • 17 -> 18 -> 19 (Slow Start 아예 건너뛰고 곧바로 선형 증가 모드 돌입).

2. 인플레이션(Inflation) 꼼수 (수학의 마술)

사실 CWND=16으로 세팅하는 것과 동시에, 이면에서는 기가 막힌 꼼수가 하나 더 돌아간다. 내가 3 Dup-ACK를 받았다는 건, 수신자가 3개의 패킷을 받았다는 뜻이다.

  1. "어? 수신자가 3개를 받았으니까 인터넷 길거리에 3개의 빈 공간이 났겠네?"
  2. 내 컴퓨터는 억지로 CWND = ssthresh(16) + 3(중복 횟수) = 19 로 창문을 3개 더 뻥튀기(Inflate) 시킨다.
  3. 그리고 만약 수신자가 계속 징징대며 4번째 중복 ACK, 5번째 중복 ACK를 계속 쏘면? "오! 4개, 5개 무사히 도착했단 뜻이네!" 라며 중복 ACK가 올 때마다 CWND를 20, 21로 계속 임시로 늘려주면서, 그 빈 공간으로 새로운 데이터 패킷을 계속 쑤셔 넣는다.
  4. 마침내 "어, 잃어버렸던 거 다 잘 받았어!(정상 ACK)"가 도착하면, 뻥튀기했던 창문을 다시 원래 ssthresh(16) 값으로 팍 쪼그라뜨린(Deflate) 뒤 깔끔하게 정속 주행을 시작한다. (이것이 멈춤 없는 스피드의 진짜 비밀이다).
 ┌─────────────────────────────────────────────────────────────┐
 │                TCP Reno (Fast Recovery)의 그래프 모양            │
 ├─────────────────────────────────────────────────────────────┤
 │ CWND 크기                                                     │
 │ 32 |         /(3 Dup-ACK 발생!)                             │
 │    |       /  |                                             │
 │ 16 |     /    |                 * ─ * ─ * ◀ 절반만 깎이고 즉시 회복! │
 │    |   /      |               /                             │
 │  8 | /        |             /                               │
 │  4 |/         |           /                                 │
 │  2 |          |         /                                   │
 │  1 |          |       /   ◀ (1로 떨어지지 않는다!!)               │
 │    |____________________________________ 시간(RTT)            │
 │                                                             │
 │   ▶ "1로 떨어지는 푹 파인 골짜기(Slow Start)가 사라지고, 상어 이빨     │
 │      모양의 톱니바퀴(Sawtooth) 그래프가 아름답게 완성된다."           │
 └─────────────────────────────────────────────────────────────┘

3. 실무 T/S (Timeout 앞에서는 자비가 없다)

빠른 회복은 어디까지나 "3 Dup-ACK"라는 가벼운 찰과상일 때만 발동한다. 만약 해저 케이블이 완전히 끊어져서 영수증이 아예 단 1장도 오지 않는 **'타임아웃(Timeout)'**이 터진다면? 아무리 똑똑한 TCP Reno라도 자비 없이 CWND=1로 곤두박질치고 슬로우 스타트를 다시 밟아야 한다. (이건 진리다).

📢 섹션 요약 비유: 인플레이션(Inflation) 꼼수는 **"빈자리 채워 넣기 편법"**입니다. 내 앞에 10명이 줄을 서 있는데, 누군가 "내 앞사람 도망갔어요!(Dup-ACK)"라고 징징댈 때마다, 지배인(송신자)은 "오? 빈자리 1개 났네?" 하고 밖에 대기하던 새 손님(새 패킷)을 즉시 그 빈자리로 쏙쏙 밀어 넣어 식당(네트워크)의 가동률을 100% 꽉 차게 유지하는 극강의 회전율 관리입니다.