TCP 빠른 재전송 동작 원리: 3-Duplicate ACK를 통한 네트워크 지연 해소법





TCP 빠른 재전송(Fast Retransmit) 완벽 가이드

TCP 빠른 재전송(Fast Retransmit) 동작 원리: 패킷 손실을 극복하는 스마트한 흐름 제어

네트워크 통신 중 패킷 손실은 피할 수 없는 현상입니다. 하지만 손실이 발생할 때마다 송신자가 타이머가 만료될 때까지 기다린다면, 우리가 누리는 실시간 스트리밍이나 고속 다운로드는 불가능했을 것입니다. TCP는 이러한 문제를 해결하기 위해 ‘빠른 재전송(Fast Retransmit)’이라는 영리한 기법을 사용합니다. 본 포스팅에서는 타임아웃을 기다리지 않고도 유실된 패킷을 즉각 감지하고 복구하는 빠른 재전송의 핵심 메커니즘을 심도 있게 분석해 보겠습니다.

1. TCP 빠른 재전송(Fast Retransmit)의 정의와 목적

TCP 빠른 재전송은 송신 측이 재전송 타이머(Retransmission Timeout, RTO)가 만료되기 전이라도, 수신 측으로부터 동일한 확인 응답(Duplicate ACK)을 특정 횟수 이상 받으면 패킷 유실로 간주하고 즉시 해당 패킷을 다시 보내는 방식입니다.

이 기법의 가장 큰 목적은 ‘네트워크 지연 시간(Latency)의 최소화’입니다. RTO는 보통 왕복 시간(RTT)보다 넉넉하게 설정되기 때문에, 타이머에만 의존할 경우 네트워크 흐름이 일시적으로 중단되는 ‘홀(Hole)’ 현상이 발생합니다. 빠른 재전송은 이 대기 시간을 과감히 생략하여 통신의 연속성을 보장합니다.

2. 동작 원리의 핵심: 3-Duplicate ACK

빠른 재전송이 작동하는 결정적인 트리거는 바로 ‘3번의 중복 ACK’입니다. 왜 하필 3번일까요? 이를 이해하기 위해서는 TCP의 수신 과정을 살펴봐야 합니다.

2.1 수신측의 중복 ACK 발생 과정

수신 측은 데이터 패킷을 순서대로 받기를 기대합니다. 만약 1, 2, 4, 5번 패킷이 도착하고 3번이 유실되었다면, 수신 측은 4번과 5번을 받을 때마다 “나는 아직 3번이 필요해”라는 의미로 ‘ACK 3’을 반복해서 보냅니다. 이것이 중복 ACK입니다.

2.2 왜 3번인가? (The Threshold of 3)

네트워크 경로가 여러 갈래일 경우, 패킷의 순서가 단순히 뒤바뀌어(Out-of-Order) 도착할 수 있습니다. 1~2번의 중복 ACK는 단순히 순서가 바뀐 것일 가능성이 높지만, 3번 이상 중복 응답이 온다면 이는 순서의 문제가 아니라 실제로 패킷이 유실되었을 확률이 매우 높다고 판단하는 것입니다.

3. 타임아웃 재전송 vs 빠른 재전송 비교

두 메커니즘의 차이를 이해하면 빠른 재전송이 네트워크 성능에 얼마나 기여하는지 명확해집니다.

비교 항목 타임아웃 재전송 (RTO) 빠른 재전송 (Fast Retransmit)
판단 근거 설정된 타이머 시간 만료 3번의 중복된 ACK 수신
대응 속도 상대적으로 느림 (RTO 대기) 매우 빠름 (즉각 반응)
혼잡 제어 영향 Slow Start 단계로 진입 (보수적) Fast Recovery 단계로 진입 (공격적)
주요 장점 확실한 손실 복구 네트워크 처리량(Throughput) 유지

4. 빠른 재전송의 상세 동작 단계

실제 패킷 흐름을 시나리오별로 재구성하면 다음과 같습니다.

  1. 정상 전송: 송신자가 패킷 1, 2, 3, 4, 5를 연속해서 보냅니다.
  2. 패킷 유실: 중간의 패킷 2번이 네트워크 혼잡으로 사라집니다.
  3. 중복 응답: 수신자는 패킷 3을 받고 ‘ACK 2’를 보냅니다. 이어 패킷 4를 받고 또 ‘ACK 2’, 패킷 5를 받고 다시 ‘ACK 2’를 보냅니다.
  4. 즉시 재전송: 송신자는 세 번째 ‘ACK 2’를 받는 순간, 2번 패킷에 대한 타이머가 끝나지 않았음에도 즉시 2번 패킷을 재전송합니다.
  5. 복구 완료: 수신자는 유실되었던 2번을 받으면, 이미 받아두었던 3, 4, 5번을 포함해 ‘ACK 6’을 보내며 정상 흐름을 회복합니다.

5. 빠른 회복(Fast Recovery)과의 결합

빠른 재전송은 단독으로 쓰이기보다 ‘빠른 회복(Fast Recovery)’ 알고리즘과 짝을 이룹니다. 타임아웃이 발생하면 TCP는 네트워크가 매우 혼잡하다고 판단하여 전송 속도를 최소치로 줄이지만, 빠른 재전송이 발생했다는 것은 “일부 패킷은 유실되었지만, 나머지 패킷은 수신측에 잘 도착하고 있다”는 증거이기도 합니다.

따라서 TCP는 전송 속도를 극단적으로 줄이는 대신, 혼잡 윈도우 크기를 절반 정도로만 줄이고 다시 빠르게 속도를 올리는 방식을 택합니다. 이것이 현대 인터넷이 끊김 없이 부드럽게 작동하는 핵심 원리 중 하나입니다.

결론: 효율적 네트워크를 위한 TCP의 지혜

TCP 빠른 재전송은 단순히 손실을 메우는 기술이 아니라, 네트워크의 상태를 지능적으로 판단하여 최적의 전송 효율을 찾아가는 과정입니다. 3번의 중복 ACK라는 단순하면서도 강력한 논리를 통해 신뢰성과 속도라는 두 마리 토끼를 모두 잡았습니다. 개발자나 엔지니어로서 이러한 하부 프로토콜의 원리를 이해하는 것은, 상위 어플리케이션의 성능 최적화를 위한 가장 견고한 밑거름이 될 것입니다.

처음 공부할 때는 왜 굳이 3번일까 의구심이 들었지만, 확률론적 관점에서 ‘순서 바뀜’과 ‘유실’을 구분하는 가장 경제적인 수치라는 점을 깨닫고 네트워크 프로토콜의 설계 미학에 감탄했습니다.