TCP에서의 재전송은 Timeout과 중복(Duplicate) ACK의 두가지 요소에 의해서 제어되며, Riverbed Modeler(OPNET) TCP 모델 또한 이 두 가지 요소 기능을 모두 제공한다. Timeout에 의한 재전송은 "TCP 재전송(3) - Timeout"에서 살펴보았으며, 여기에서는 Duplicate ACK에 의한 재전송이 어떻게 수행되는지 살펴보기로 한다.
TCP 재전송 시험망을 다음 그림과 같은 토폴로지로 구성하고("TCP Window Scaling(1) - LFN에서의 동작"의 시험망 토폴로지 참조), Server 노드와 STA 노드 사이의 RTT는 100ms가 되도록 설정한다.

 


패킷 손실을 발생시키기 위해서 Packet Discard 노드의 Packet Discard Configuration 속성을 다음 그림과 같이 200초에 패킷 1개를 폐기하도록 설정한다.

 


STA 노드와 Server 노드의 TCP Window Scaling은 Disabled시킨다. Duplicate ACK에 의한 재전송이 수행되도록 하기위해서, Server 노드의 TCP Fast Retransmit는 Enabled로 설정되어 있는지 확인한다.
다음은 재전송이 일어났음을 확인하기 위해서 Server 노드에서 송신한 Retransmission Count와 Received Segment Ack Number를 보인 것이다.

 


200.12초의 재전송이 Duplicate ACK에 의한 것이며, 사용된 Duplicate ACK의 수는 3임을 다음 그림과 같이 Received Segment Ack Number를 보다 확대한 결과를 통해 확인할 수 있다.

 


재전송이 일어난 시점의 Duplicate ACK이 3개임을 확인할 수 있으며, 이는 Duplicate ACK Threshold 속성값이 3으로 설정되어 있기 때문이다.("TCP 재전송(7) - Fast Retransmit 파라미터 설정" 참조).
다음 그림은 Server 노드의 CWND 크기 변화를 보인 것이다. CWND 크기가 200초 무렵까지는 계속 증가하다가 패킷 손실을 200.12초에 Duplicate ACK에 의해 감지하면서 크게 낮아진 것을 확인할 수 있다.

 

 

Posted by 신상헌
,