Computer Science/네트워크

[네트워크] TCP - RTT Estimation and Timeout

바보1 2023. 5. 3. 23:30


앞의 글을 읽으시면 이해에 도움이 됩니다.

 

2023.04.17 - [Computer Science/네트워크] - [네트워크] TCP - Segment Structure

 

[네트워크] TCP - Segment Structure

앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.17 - [Computer Science/네트워크] - [네트워크] TCP - Connection-Oriented Transport [네트워크] TCP - Connection-Oriented Transport 앞의 글을 읽으시면 이해에 도움이

hi-guten-tag.tistory.com

2023.04.17 - [Computer Science/네트워크] - [네트워크] Principles of Reliable Data Transfer

 

[네트워크] Principles of Reliable Data Transfer

앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.15 - [Computer Science/네트워크] - [네트워크] Transport-Layer Protocols [네트워크] Transport-Layer Protocols 앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.07

hi-guten-tag.tistory.com


1. Abstract

 

 

  • 앞선 글인 rdt를 보면 TCP가 세그먼트 손실에 대비하여 Timeout/Retransmission 메커니즘을 사용하는 것을 알 수 있습니다.
  • 개념은 간단하지만, 실제로 구현하여 사용할 때는 애매한 사항이 많습니다.
  • 가장 중요한 질문은 바로 타임아웃 주기입니다.
  • 만약 RTT가 작다면 쓸데없는 재전송이 발생할 것이고, 너무 크다면 통신에 제약이 생깁니다.

2. Round-Trip-Time Estimation

 

 

출처 : Computer Networking 3장. Figure 3.32

  • RTT는 세그먼트가 송신된 시간으로부터 그 세그먼트에 대한 응답이 올 때까지의 시간 길이입니다.
  • 모든 전송된 세그먼트에 대해서 Sample RTT를 측정하는 대신에, 대부분의 TCP는 한 번에 하나의 Sample RTT를 측정합니다.
  • 즉, 어떤 특정 시점에서 아직 응답이 오지 않은 세그먼트에 대해서 Sample RTT를 측정합니다.
  • Sample RTT는 라우터에서의 Congestion과 다른 여러 요인에 의해서 달라집니다. 이러한 변동성 때문에 주어진 Sample RTT는 불규칙적입니다.
  • 따라서 TCP는 Sample RTT의 평균 값인 Estimated RTT를 계산합니다.
  • 새로운 Sample RTT를 획득하자마자 TCP는 아래의 공식에 따라 Estimated RTT를 계산합니다.

 

\(Estimated RTT = (1 - a) * Estimated RTT + a * Sample RTT\)

  • 기존의 Estimated RTT 값과 새로운 Sample RTT 값을 Weighted Average를 하여 계산합니다.
  • 이 가중 평균은 예전 샘플보다 최근 샘플에 높은 가중치를 준다는 것을 알고 있어야 하며, 최신 샘플이 현재 네트워크의 혼잡 상황을 더 잘 반영합니다.

3. Timeout

 

 

  • 위의 그림에서 볼 수 있듯이, Estimated RTT는 사실 실제로 Outlier에 대해 제대로 대처하지 못합니다.
  • 따라서 Estimated RTT 예측 외에도 추가적인 수식을 도입하여 계산합니다.

 

\(DevRTT = (1 - \beta) * DevRTT + \beta * \left| Sample RTT - Estimated RTT\right|\)

  • 이상치에 대해서 체크하기 위해 위의 수식이 있으며, 최종적으로 Timeout 값은 Estimated RTT에 약간의 여윳값을 더한 값을 설정합니다.
  • 따라서 아래의 수식에 의해 Timeout 값이 정해집니다.

 

\(TimeoutInterval = EstimatedRTT + 4*DevRTT\)

  • 위의 수식에 따라 타임아웃 값이 정해지고, 세그먼트를 송신한 이후로 위의 타임아웃 값을 넘기면 재전송합니다.

참고

 

 

경북대학교 컴퓨터학부 COMP0414-001 컴퓨터 망 수업

Computer Networking: A Top Down Approach / James F. Kurose, Keith W. Ross 저 / PEARSON / 2021년

Chat GPT, Bing AI


다음 글에서는 Flow Control에 대해 알아보겠습니다.

(이 카테고리는 아마 이게 마지막 글일 것 같습니다.....미루다가...죄송합니다......)

 

감사합니다.

지적 환영합니다.