1. RTT (Round Trip Time, 왕복 시간)
ㅇ 패킷망(인터넷) 상에서, 송신지부터 목적지 호스트까지, 패킷이 왕복하는데 걸리는 시간
- 이에 영향 주는 요소 : 망의 혼잡, 거리, 전송속도 등이 있음
2. IP 패킷의, RTT
ㅇ IP 패킷 왕복시간은,
- ping 명령어를 사용하여 RTT(왕복시간) 및 TTL(IP패킷수명) 수치를 알아볼 수 있음
3. TCP 세그먼트의, RTT 측정 및 RTO 예측/추정
※ 주어진 TCP 연결에서, RTT(왕복 시간) 측정을 기반으로 RTO(재전송 타이머)를 설정하는 방법
ㅇ RTT (Round Trip Time, 왕복 시간) 측정
- RTT 측정용 샘플 세그먼트의 송신부터 확인응답 받기까지의 왕복시간을 측정
. 네트워크 가변성 때문에 RTT 샘플 측정값은 그때 마다 달라지게됨
- 1 이상의 TCP 세그먼트들이 보내면, 1번 만 확인응답이 이루어지며, 그 왕복시간을 측정
ㅇ RTO (Retransmission Timeout, 재전송 타임아웃 시간) 설정
= 전송된 한 세그먼트에 대한 확인응답을 기다려야 하는 시간
= TCP 재전송 타이머 값
- 송신 TCP는,
. 매 세그먼트를 전송할 때 마다, 재전송 타이머(RTO)를 가동함
. 이때, RTO 값의 설정치는, TCP 연결의 RTT(왕복시간) 보다 약간 크면 이상적임
.. 즉, 세그먼트 전송부터 확인응답 받기까지의 시간 보다 약간 크면 좋음
. 결국, 정해진 시간 RTO가 다 경과되면(타임아웃되면), 재전송하게 됨
. 실제, RTO 값이 얼마나 커야 하는지에 대해서는, 아래와 같은 계산 방식이 있음
ㅇ RT0 계산 변수
- TCP 송신 모듈은 RTO 계산을 위해 1개 측정변수 및 2개 상태변수를 유지해야 함
. MRTT (measured RTT, 측정된 RTT) : 측정변수
.. MRTT = (ACK 수신 시각) − (패킷 송신 시각)
. SRTT (smoothed RTT, 매끄러운 RTT) : 상태변수
.. 단순평균 방식 보다는 최근 망 상황에 더 높은 비중을 주는 가중평균 방식
.. 최근 샘플값일수록 더 높은 가중치를 주게됨
.. (EWMA, Exponential Weighted Moving Average, 지수 가중 이동 평균)
. RTTVAR (round-trip time variation, RTT 편차) : 상태변수
.. 측정된 RTT 샘플값들의 변동성(Variability)을 고려코자함
. RTO (retransmission timeout, 재전송 타이머) : 결과변수
.. SRTT,RTTVAR로부터 계산되어짐
ㅇ RT0 계산 방법
- 초기값
. initial RTO = 시스템 마다 다름
.. 표준 권고치는 1 초 (RFC 6298)
. 윈도우즈에서, RTO 초기값을 확인할 수 있는 명령어 : netsh int tcp show global
- 첫 측정 이후
. SRTT = MRTT
. RTTVAR = MRTT / 2
. RTO = SRTT + 4 RTTVAR
- 연속 측정 이후
. SRTT = (1-α) SRTT + α MRTT
. RTTVAR = (1-β) RTTVAR + β |SRTT - MRTT|
. RTO = SRTT + 4 RTTVAR
* 일반적으로, α=1/8 (0.125) 및 β=1/4 (0.25)을 사용
* 결과적으로, RTO는 최근의 SRTT 값에 균형을 위해, 작은 RTTVAR의 4배 취한 값을 더함
ㅇ 타임아웃되어서 실제 재전송 발생시에, 혼잡제어 감소를 위한, RTO 계산 원칙 : (Karn 알고리즘)
- (재전송 패킷들의 모든 왕복 시간 측정은 무시)
. 재전송 세그먼트(확인응듭 ACK가 도착되더라도)는, RTT 측정 대상에서 제외 함
.. 즉, 새로이 전송하는 데이터 세그먼트 만을 RTT 측정 대상으로 삼음
- (지수 백오프, 지수 RTO 후퇴)
. 패킷 손실로 인해, 재전송이 일어난 경우,
. 혼잡제어를 위해, 패킷 손실 없을 때까지,
. 기존에 계산된 RTO 값을, 점차 두 배 씩 늘려가는 방식을 사용함
.. 이는, 패킷 손실이 더 이상 발생하지 않을 때까지, 재전송 비율을 줄여감으로써,
.. 네트워크에 가해지는 부하를 줄이고자 하는 것임
※ 관련 표준 : RFC 2988 (舊), 6298 (現) `Computing TCP's Retransmission Timer`