본문 바로가기
  • Vetheuil in Summer
Tech/TCP IP

Retransmission TimeOut

by 눈꽃산행 2019. 2. 13.

 

F-RTO(Foward Retransmission TimeOut) Recovery Algorithm - RFC 4138

 

 

1. RTO?
 
- Retransmission TimeOut
 -
재전송을 위한 타임아웃입니다. TCP통신시 전송이 정확히 이루어 졌다는 확인을 받지
  
못했을때 일정시간을 정해놓아 이 시간 동안 확인 받지 못하는 경우 재전송을 하게 됩니다.

2. 그럼 문제는 무엇인가?
 
- 실제 전송이 되지 않아서 수신측이 데이터를 받지 못하는 경우에는 데이터를 전송하지
   못한 것이기 때문에 재전송을 하면 됩니다
.

 -
그러나 TCP 통신의 특성상 데이터를 받으면 ACK메시지를 보내게 되어있는데
   
갑작스러운 통신 두절(deadly spike)로 전송을 완료하였으나 전송확인(ACK)
  
메시지를 송신측에서 받지 못하는 경우 송신자는 전송을 하지 못한 것으로
   간주하고 다시 재전송을 하게 되는데
수신측은 이전에 받았던 데이터를
   다시 받게 되므로 실제 불필요한 작업이 일어나는 것으로 볼 수 있습니다
.

이것을 RFC에서는 Spurious retransmission Timeout이라고 나타내고 있습니다.
  
결국 Forward RTO Recovery는 이런 Spurious Retransmission Timeout
   찾아 불필요한 전송을 줄여주는 TCP의 부가기능이라고 볼 수 있습니다.

 

 

3. 동작 알고리즘
 
- 위와 같이 포인트는 바로 Spurious retransmission Timeout 을 걸러내는 것입니다.
  1) RTO
가 초과되면, ACK 메시지를 받지 못한(unacknowledged) 첫번째 세그먼트를 재전송하고
    
SpuriousRecoveryFalse를 설정합니다. 또한 전송되어진 가장 높은 sequence number
    
recover 변수에 저장합니다.
     (
실제로 Spurious retransmission Timeout일 경우 RTO 이후 실제 전송되지 못한 부분부터
       전송하기 위함입니다
.)
     (RTO
가 초과되기 전까지 전송측에서는 데이터를 전송하게 됩니다. recover 변수는
     
RTO ACK 메시지를 받지 못한 데이터의 전송 sequnce 번호까지 포함하게 되는 것입니다.)

  2) RTO
재전송(1번 과정) 첫번째 ACK 메시지를 받으면 행동을 선택합니다.
     
이 행동은 아래의 두가지 사항에 의거하여 선택됩니다.
     - ACK
메시지가 window를 확장시켰나?
     - duplicate ACK
인가?
     2-a)
아래의 3가지 경우에는 기존의 RTO recovery를 실행하고 slow start를 이용하여
           
ACK메시지를 받지 못한 데이터 재전송을 계속 합니다.
            (
수신측에 전송되지 못한 것으로 인정)
            - ACK
메시지가 duplicate ACK
            - "recover"
변수와 sequece number가 같은 경우
           
-  1)단계에서 전송되어진 모든 데이터가 알려지지 않은 경우

     
2-b) ACK가 윈도우를 확장하고 "recover" 값보다 sequence number가 낮을 경우
            전에 보내지지 않았던 새로운
2개의 세그먼트를 보내고 3단계로 들어갑니다.
           
만약 TCP Sender가 보낼 데이터가 충분하지 않을 경우, 한 세그먼트만 보낼 수
            있습니다
. 추가적으로 TCP 송신자가 nagle 알고리즘을 취하고 필요하면 즉시
            한 세그먼트를 보낼 것입니다
.

  3) RTO
재전송 후 2번째 ACK이 도착하면 timeoutspurious로 정의할지 , 재전송이 필요한
     세그먼트를 전송할지를 결정합니다
.
     3-a) duplicate ACK
을 받은 경우 congestion window3 * MSS를 넘어서지 못하게
           설정하고
slow algorithm을 이용하여 기존의 RTO recovery를 실행하고
          
slow start를 이용하여 unacknowledged 세그먼트를 전송하는 것을 계속합니다.
           (RTO
이후 2 round-trip이 소모 되었으므로)

     3-b) ACK
가 윈도우를 확장하면 spurious timeout로 간주하고  recover값을 SND.UNA
           설정합니다
.
           (
즉 실제 윈도우상 ACK을 받지 못한 부분의 포인터를 sequnce로 값을 옮기는
            것입니다
.)

출처
: https://nowpassion.tistory.com/117?category=165459 [열정,기여,열린마음]

'Tech > TCP IP' 카테고리의 다른 글

TCP DUMP  (0) 2020.03.26
SSL Handshake ( SNI 프로파일 )  (0) 2019.09.26
SSL TLS ( TLS Alert Protocol )  (0) 2019.03.26
TCP 3 Way / 4 Way Handshake  (0) 2019.02.13
Fast Retransmit (Duplicate Acknowledgement)  (0) 2019.02.13