패킷 재전송이 이루어지는 방법





TCP 신뢰성 보장 메커니즘과 ARQ 알고리즘 심층 분석

데이터 무결성을 위한 네트워크의 고군분투 패킷 재전송은 어떻게 이루어질까?

우리가 인터넷을 통해 웹페이지를 열거나 대용량 파일을 다운로드할 때, 데이터는 작은 단위인 ‘패킷(Packet)’으로 쪼개져 전송됩니다. 하지만 복잡한 네트워크 경로를 거치는 과정에서 일부 패킷은 손실되거나 순서가 뒤바뀌기도 합니다. 그럼에도 불구하고 우리가 온전한 데이터를 수신할 수 있는 이유는 전송 계층(Transport Layer)의 핵심 프로토콜인 TCP가 정교한 패킷 재전송(Retransmission) 메커니즘을 수행하기 때문입니다.

1. 패킷 재전송의 본질: 왜 네트워크는 다시 말해야 하는가?

패킷 교환 방식의 네트워크에서 패킷 손실은 피할 수 없는 현상입니다. 라우터의 버퍼 오버플로우, 링크의 전기적 잡음, 혹은 경로 변경 등 다양한 물리적/논리적 결함이 원인이 됩니다. 이러한 불완전한 환경 위에서 신뢰성을 구축하는 것이 바로 재전송의 목적입니다.

패킷 손실의 주요 원인과 신뢰성 통신의 필요성

신뢰할 수 없는 매체 위에서 신뢰할 수 있는 통신을 구현하기 위해 TCP는 수신측으로부터 잘 받았다는 신호인 ‘ACK(Acknowledgment)’를 기다립니다. 만약 일정 시간 내에 이 신호가 오지 않는다면, 송신측은 데이터가 증발했다고 판단하고 동일한 패킷을 다시 송신합니다. 이것이 재전송의 가장 기초적인 논리입니다.

TCP가 보장하는 ‘신뢰적인 데이터 전송(RDT)’의 원리

RDT(Reliable Data Transfer)를 구현하기 위해 필요한 요소는 크게 세 가지입니다. 첫째, 오류 검출을 위한 체크섬(Checksum), 둘째, 수신 상태를 알리는 피드백(ACK/NACK), 셋째, 손실 시 다시 보내는 재전송 알고리즘입니다. 이 삼박자가 맞물려야 비로소 상위 응용 계층에 완벽한 데이터를 전달할 수 있습니다.

2. 재전송의 핵심 메커니즘: ARQ 기법의 진화

자동 재전송 요구(ARQ, Automatic Repeat Request)는 수신측의 응답에 따라 데이터를 재전송하는 기술을 통칭합니다. 기술의 발전에 따라 효율성이 극대화되었습니다.

기초적인 정지-대기(Stop-and-Wait) 방식의 한계

가장 원시적인 형태는 하나의 패킷을 보내고 그에 대한 ACK가 올 때까지 다음 패킷을 보내지 않는 방식입니다. 구현은 매우 간단하지만, 네트워크의 대역폭 활용 효율이 극도로 낮다는 치명적인 단점이 있습니다. 왕복 시간(RTT)이 긴 환경에서는 통신 속도가 처참해집니다.

파이프라이닝 기술의 도입과 Go-Back-N(GBN)

효율을 높이기 위해 ACK를 기다리지 않고 여러 패킷을 동시에 보내는 ‘파이프라이닝’ 기법이 등장했습니다. GBN 방식은 윈도우 크기만큼 패킷을 연속해서 보내되, 중간에 하나라도 손실되면 그 시점부터 보냈던 모든 패킷을 폐기하고 다시 재전송합니다. 수신측의 구조가 간단하다는 장점이 있지만, 성공적으로 전송된 패킷까지 다시 보내야 하는 낭비가 발생합니다.

효율성의 정점, 선택적 재전송(Selective Repeat)

Selective Repeat(SR) 방식은 GBN의 낭비를 해결합니다. 수신측이 정상적으로 받은 패킷은 버퍼에 보관하고, 손실된 특정 패킷만을 송신측에 재전송 요청하는 방식입니다. 이를 위해 수신측은 개별적인 패킷에 대한 타이머와 버퍼 관리 기능을 갖추어야 하며, 이는 현대 고속 네트워크의 표준 모델이 되었습니다.

[표 1] ARQ 방식별 특징 비교
구분 Stop-and-Wait Go-Back-N Selective Repeat
전송 효율 매우 낮음 보통 높음
수신측 버퍼 불필요 패킷 1개 크기 윈도우 크기만큼 필요
재전송 범위 손실 패킷 1개 손실 이후의 모든 패킷 손실된 특정 패킷만

3. 재전송 타이밍의 미학: 타임아웃과 3-ACK

재전송에서 가장 어려운 문제는 “얼마나 기다린 뒤에 다시 보낼 것인가?”입니다.

RTO(Retransmission Time-Out) 설정의 수치적 근거

너무 짧게 설정하면 불필요한 재전송이 발생해 네트워크가 마비되고, 너무 길면 손실 복구가 늦어져 체감 속도가 느려집니다. TCP는 동적으로 변화하는 네트워크 상황을 반영하기 위해 RTT(Round Trip Time)를 지속적으로 측정하여 RTO = EstimatedRTT + 4 * DevRTT와 같은 공식을 사용하여 최적의 타이밍을 산출합니다.

빠른 재전송(Fast Retransmit)을 통한 지연 최소화

타이머가 만료될 때까지 기다리는 것은 시간적 손실이 큽니다. 따라서 송신측이 동일한 번호의 ‘중복 ACK(Duplicate ACK)’를 3번 받게 되면, 타이머가 끝나지 않았더라도 즉시 해당 패킷이 유실되었다고 판단하여 재전송을 수행합니다. 이를 ‘3-ACK’ 기반의 빠른 재전송이라 부르며, TCP 성능 향상의 핵심 포인트입니다.

4. 현대 네트워크에서의 재전송 최적화 전략

단순한 재전송을 넘어, 현대의 TCP는 훨씬 지능적으로 동작합니다.

SACK(Selective Acknowledgment) 옵션의 역할

기존 TCP의 누적 ACK 방식은 어떤 패킷들이 누락되었는지 상세히 알기 어려웠습니다. SACK 옵션을 사용하면 수신측이 “n번은 못 받았지만, n+1번과 n+2번은 잘 받았다”는 정보를 송신측에 명시적으로 전달할 수 있습니다. 이는 불필요한 재전송을 획기적으로 줄여줍니다.

실무자를 위한 네트워크 트러블슈팅 인사이트

  • 재전송률(Retransmission Rate) 모니터링: 보통 1% 내외가 정상이며, 5%를 넘어서면 하드웨어 결함이나 심각한 네트워크 혼잡을 의심해야 합니다.
  • MTU 사이즈 최적화: 패킷이 너무 크면 중간 경로에서 단편화(Fragmentation)가 발생하여 손실 확률이 높아집니다.
  • BBR 알고리즘 고려: 손실 기반이 아닌 대역폭 기반의 혼잡 제어 알고리즘(예: Google BBR)을 사용하면 재전송이 빈번한 환경에서도 높은 성능을 유지할 수 있습니다.

5. 결론: 완벽한 데이터 전송을 위한 끊임없는 시도

패킷 재전송은 네트워크 세계의 보험과 같습니다. 전송 중 발생하는 수많은 변수 속에서도 데이터의 무결성을 지켜주는 최후의 보루이기 때문입니다. 효율적인 재전송 메커니즘을 이해하는 것은 네트워크 성능 최적화의 첫걸음이며, 이는 사용자 경험(UX)과 직결되는 중요한 기술적 자산입니다. 우리가 보낸 메시지가 100%의 확률로 상대방에게 닿는 그 짧은 찰나 뒤에는, 0과 1의 데이터를 사수하려는 TCP의 치열한 재전송 로직이 숨어 있음을 기억해야 합니다.