Test Description:
This test shows the pathological behavior of Tahoe TCP when there are multiple fast retransmissions resulting from losses in one window of data.
Expected output:
  • Multiple packet losses in Tahoe TCP will cause mutiple fast retransmissions. The ssthresh will decrease more than once. The exponential decrease of ssthresh will damage the TCP performance.
  • When congestion window increases, more packets are unnecessarily retransmitted. When duplicate packets are received, duplicate ACKs are generated that trigger fast retransmission and congestion avoidance which decrease ssthresh to half of the min(cwnd, rwnd) but no less than 2 packets.
Test Topology:
 Server ................Router..................Client

        10Mbs 3ms
 5(0)------------------0(1)        1.5Mbs 100ms
                            0(0)-----------------7(0)
 6(0)------------------0(2)
        10Mbs 5ms
SSF Test Configuration File: f11.dml
send window = receive window = 50 packets
SSF Tcpdump File:
f11.tcpdump
f11_2.tcpdump
f11_2.tcpdump
f11serv2.tcpdump

Figure 1: sequence plot for tcpdump at Router



(EPS format plot for Server on the bottom connection)

Figure 2: sequence plot, RTT plot and cwnd plot at Server on the bottom connection

Zoom in for Figure 2

Note that when ssthresh decreases at first fast retransmission, its value drops to 11 MSS. During slow start, old packets are resent, and duplicate ACKs are generated that trigger the second fast retransmission. Now cwnd has a small value (5 MSS), ssthresh drops to half of this value (2 MSS), which damages TCP performance, because cwnd increases very slowly when it's larger than ssthresh according to congestion avoidance. When more packets are resent, more duplicate ACKs are received, and another fast retransmission is performed again. Because ssthresh cannot be smaller than 2 MSS, its value doesn't change, but cwnd is set to 1 MSS for a slow start.


NS Test with the same parameters

NS tcpdump trace file: f11.tr


Trace Analysis:

The output is consistent with expected output.