피드로 돌아가기
Dev.toInfrastructure
원문 읽기
TCP가 패킷 손실 시 RTO를 동적으로 계산하고 지수 백오프로 재전송 간격을 2배씩 증가시켜 네트워크 혼잡 붕괴 방지
TCP Exponential Backoff: Why Your Retries are Doubling
AI 요약
Context
네트워크에서 패킷 손실이 발생했을 때 송신자가 재전송 타이밍을 결정해야 한다. 재전송 간격이 너무 짧으면 혼잡한 라우터 버퍼를 더욱 포화시키고, 너무 길면 애플리케이션 처리량을 저하시킨다. 동시에 수천 개의 디바이스가 고정된 재전송 간격을 사용하면 재전송이 동기화되어 트래픽 스파이크를 유발하고 네트워크 혼잡 붕괴를 야기한다.
Technical Solution
- RTO(Retransmission Timeout)를 동적으로 계산: 이전 RTT(Round Trip Time) 측정값에 지터 버퍼를 더해 계산 (예: RTT 500ms인 경우 RTO 700ms 설정)
- 지수 백오프(Binary Exponential Backoff) 알고리즘 도입: 재전송 실패 시마다 RTO를 2배 증가 (1회차 700ms → 2회차 1,400ms → 3회차 2,800ms → ... → 5회차 22,400ms)
- 최대 임계값 설정: 무한정 대기를 방지하기 위해 최대 재전송 횟수 또는 최대 RTO 값으로 제한
- Linux sysctl의
net.ipv4.tcp_retries2파라미터로 재전송 횟수 조정 가능
Key Takeaway
TCP의 지수 백오프는 단순한 재시도 메커니즘이 아니라 라우터 버퍼 포화를 완화하고 개별 연결 실패가 전체 네트워크 장애로 확산되는 것을 방지하는 혼잡 제어 전략이다. 마이크로서비스 또는 분산 시스템에서 재시도 로직을 설계할 때 고정 간격 대신 동적 백오프를 적용하는 것이 중요하다.
실천 포인트
마이크로서비스나 분산 데이터베이스 클라이언트에서 재시도 메커니즘을 구현할 때, TCP의 지수 백오프 원리를 적용하면 된다. 초기 대기 시간을 기준값(예: 100ms)으로 설정하고 실패할 때마다 2배씩 증가시키되, 최대 대기 시간(예: 30초)을 설정하면 네트워크 혼잡을 악화시키지 않으면서도 일시적 장애에 대응할 수 있다.