Computer/네트워크

[네트워크] 연결지향형 TCP 2

치즈랑 2026. 7. 13. 00:42

// 노션에서 가져왔습니다. 하향식 네트워킹

RTT(왕복 시간) 추정 및 타임아웃 (TCP RTT & Timeout)

📌 타임아웃, 재전송 “메커니즘”

TCP는 손실된 세그먼트를 감지하기 위해 **타임아웃(Timeout)**을 사용. 타임아웃 값 설정은 매우 중요
(3.4절의 rdt 프로토콜)

  • ※ 긍정 확인응답과 타이머
    • 세번의 중복된 ACK = NAK ⇒ 빠른 재전송(타임아웃 전 재전송)
    • 신뢰적인 데이터 전송 프로토콜 rdt 3.0과의 공통점
      • 어떤 세그먼트/ 확인응답이 손실/손상/지연되는지 확인 X
      • 참고 : 차이는 (TCP는 빠른 재전송을 사용한다.)
  • 타임아웃 주기를 어떻게 설정?
    • 타임 아웃 ≥ RTT
      • 타임아웃이 RTT 보다 작은 경우 불필요한 재전송
      • 타임아웃이 RTT 보다 매우 큰 경우 손실이 일어났을 때 즉각적인 재전송 X
    • 그렇다면 RTT는 어떻게 예측할까?
    • RTT : 세그먼트가 송신된 시간(IP에게 넘겨진 시간) ~ 세그먼트에 대한 긍정응답이 도착한 시간

  1. RTT 추정 공식 (지수 가중 이동 평균, EWMA):
    (’이동’함에 따라 ‘가중 평균’이 지수적(1- α)^k으로 감소한다)
    • 질문
      1. 매번 계산할까?
        • Yes, 재전송이 아닌 ACK가 올 때마다 EWMA로 EstimatedRTT를 새로 갱신
      2. 타임아웃이 일어나는 경우에도 SampleRTT를 새로 측정해서 갱신하는 것인가?
    • 최근 측정값인 SampleRTT에 가중치를 두어 더 부드러운 예측값(EstimatedRTT)을 만듦.
      • 참고: SampleRTT 는 타이머가 한가할 때 가장 먼저 측정되는 값.(모든 것을 측정 X)
      • 최근에 좀 더 많은 가중치가 부여된다 = 최근 네트워크 혼잡을 더 잘 반영한다.
    • = 가중 평균
    • 공식:
      EstimatedRTT = (1- α)*이전EstimatedRTT + α*SampleRTT (일반적으로 α = 0.125).
    • 편차(RTT 변화율) 공식:
      DevRTT = (1-β)*이전DevRTT + β*|SampleRTT-EstimatedRTT| (일반적으로 β = 0.25).
  2. 타임아웃 간격 (Timeout Interval): 추정된 RTT에 "안전 여유분(safety margin, 편차)"을 더하여 설정
    (초기 Timeout Interval은 1초 권고)
    • 편차가 필요한 이유 : 타임아웃 크기가 너무 크면 재전송 시간이 길어지므로.
    • 공식: TimeoutInterval = EstimatedRTT + 4*DevRTT(편차).
      • ※ 왜 편차에 4를 곱했는가
        1. 통계적 안전성 (표준편차 4는 99%이상 상황에서의 범위 포함 2σ: 약 95%)
        2. <<로 4 곱하는 게 편함
    • 재전송인 경우 TimeoutInterval 를 두 배로 하여 조기 타임아웃을 피한다.
      • 해당 세그먼트가 수신되고 EstimatedRTT가 수정되면 다시 TimeoutInterval 돌아간다.
  • Q: 그래서 이게 어떤 기능에 쓰이는데?
  • A: 다 쓰인다. TCP의 신뢰적인 데이터 전송, 흐름 제어, 혼잡 제어(3.7)에서 사용된다.
728x90