Test Description:
These tests show the TCP retransmission timeout and Fast retransmission/Fast recovery behavior of TCP Reno.
Test A:
After the connection is established, the 32nd data packet (from Server) are dropped. Because it's the last packet in the buffer, no fast retransmission can be performed. It can only be retransmitted after a timeout.
Test B:
After the connection is established, the 32nd and 34th data packets sent by the Server is dropped. The timeout triggered the retransmission of the 32nd packet. The 34th packet is sent after the ACK is received. 
Test C:
After the connection is established, 3 consecutive data packets are dropped. The timeout triggered the retransmission of the 32nd packet. The 33rd and 34th packet is sent after the ACK is received. 
Test Topology
  server...........router................client

         8Mbs                 800kbs
  6(0)------------0(1)0(0)---------------7(0)
    |    50ms                 300ms
 tcpdump
SSF Configuration Test File:
basic6a.dml
send window = receive window = 32 packets
basic6b.dml
send window = receive window = 32 packets
basic6c.dml
send window = receive window = 32 packets
SSF Tcpdump File:
basic6a.tcpdump
basic6b.tcpdump
basic6c.tcpdump

Test A:

(EPS format plot for test A)


Test A sequence plot and Retransmission timeout backoff and RTT measurement 
Zoom In plot for test A    (EPS format)
Although the sender performs fast recovery, (see cwnd trace), no data can be sent because after fast retransmission the usable window stays negtive until enough duplicate ACKs to accumulated to make it greater or equal to 1 MSS, which doesn't happen in this case.

Note that:

  • The SYN packet (blue diamond) is covered by the SYN+ACK packet(red diamond) and does not show on the plot. It's because the tcpdump is on the Server side. The time to receive SYN is the same as the time to send SYN+ACK. They are overlapped.
  • The RTO counter dropping to 0 happens only when there is no packet outside at the moment. When a timeout will happen instead of setting RTO to 0 we set it to the value after backoff.
  • During the retransmission, there should no RTT measurement according to Karn's algorithm.

Test B:

(EPS format plot for test B

Test B sequence plot, Retransmission timeout backoff and RTT measurement
Zoom In plot for test B    (EPS format)

Although this case initially looks similar to test A, note that after fast recovery is finished the usable window is still negative and the 2nd lost packet can't be retransmitted until a retransmission timeout.


Test C:

(EPS format plot for test C)

Test C sequence plot, Retransmission timeout backoff and RTT measurement
Zoom In plot for test C    (EPS format)

In contrast, in this test, the packet after the packet losses, sufficiently many dup ACKs received during fast recovery to make the usable window positive and 3 packets are sent during fast recovery. Note that after the first fast retransmission/recovery the sender enters into second fast retransmission, which, however, does not include sending any new packet. After receiving the ACK for the retransmission, the usable window is negative and next send can only happen after timeout.