Sense Wide
RTO estimation


TCP 신뢰도를 확보하기 위해서는 RTT, RTO 같은 시간제한 변수들을 설정해서 관리하는 Timer들이 있다. 4가지의 Timer 존재하는데 RTT RTO 관련된 Timer Retransmission Timer이다.

Retransmission Timer 송신자가 데이터를 전송하였을 ACK 받지 못하고 Time Out 되어 제대로 전송이 안됐다고 판단할 때까지의 시간을 재서 Retransmission 하기 위한 Timer이다. RTT RTO 쓰인다.

RTT Round-Trip-Time으로 데이터가 전송된 ACK 받을 때까지의 시간을 의미한다. RTO 데이터 전송 ACK 받지 못하였을 다시 데이터를 전송하기까지 정한 시간이다.

RTT RTO 정하는 식들은 서로 이어져 있다고 있다. 특히 최근의 RTO SRTT RTTVAR등과 같은 변수로 결정된다. 따라서 각자 서술하는 것보다 서로 연관 지어서 설명하는 것을 원칙으로 한다. 먼저 RTT sample 얻는 방법에 대한 알고리즘은 Karn’s Algorithm에서 확인할 있다.

자세한 사항은 RFC6928, RFC2988을 보면 나와있으니 참고하자.

 

Karn’s Algorithm

1.     계속 진행되던 transmission에서 RTO를 넘어서 재 전송된 ACK를 통해 측정된 RTT는 무시한다.

2.     계산된 RTT는 무시되고 RTO는 이전 RTO2배로 설정한다. (Exponential Backoff)

Karn’s Algorithm에서 하나의 옵션으로는 timestamp 같이 전송하게 하는 방법이 있는데, 방법을 설정하게 되면 retransmission시의 시작 패킷에 대한 모호함을 줄일 있으므로 계산된 RTT 사용한다. 모든 ACK RTT 계산된다.

 

Current RTO Computation (Jacobson Algorithm)

현재의 RTO 측정하기 위해서는 먼저 TCP sender 가지 state variable 인식하고 있어야 하는데, 하나는 SRTT(smoothed round-trip time), 다른 하나는 RTTVAR (round-trip time variation)이다. 추가적으로 clock granularity G 라고 가정해서 계산을 한다. (RFC 6298)

1.     RTT가 측정되기 전까지는 RTO1초이다.


2.     최초로 측정된 RTTR이라고하면 다음과 같다. (K = 4)

SRTT <- R

RTTVAR <- R/2

RTO <- SRTT + max (G, K*RTTVAR)


3.     연속된 RTT 측정을 R라고 하면 다음과 같이 변수가 변한다. (alpha = 1/8, beta = 1/4 by JK88)

RTTVAR <- (1 - beta) * RTTVAR + beta * |SRTT - R’|

SRTT <- (1 - alpha) * SRTT + alpha * R’

RTO <- SRTT + max (G, K*RTTVAR)


4.     계산된 RTO1초보다 작다면 1초로 올림 한다.

profile

Sense Wide

@June_Kim

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!