Test Description:
This test shows how TCP with the delayed ACK property cannot get three duplicate ACKs and has to wait for the retransmission timeout when a packet is lost (generic Tahoe with delayed ack).
Expected output:
  • For the link between 5(0) and 0(1)
    • the first packet (SYN+ACK) had been dropped at server (can't be dumped at router), timeout happened for both sides. The SYN+ACK was retransmitted, the congestion window is set to 1 packet. The ssthresh is set to 2 packets (minimum of ssthresh value).
    • When the congestion window reaches ssthresh, congestion avoidance is performed.
    • When the congestion window reaches 3 packets, 1 packet is dropped because of the drop-tail queue.
    • Because the number of duplicate ACKs is always less than 3, no fast retransmission happens. The timeout is triggered.
  • For the link between 6(0) and 0(2)
    • When congestion window reaches 3 packets, 1 packet is dropped. Without knowing this, cwnd reaches 4 packets at the time next ACK is received. One more packet is dropped.
    • Because the number of duplicate ACKs is always less than 3, no fast retransmission happens. The timeout is triggered. The ssthresh is set to 2 packets (half of min(cwnd, rwnd))
    • When the congestion window reaches ssthresh, congestion avoidance is performed.
    • When the congestion window reaches 3 packets, 1 packet is dropped because of the drop-tail queue.
    • Because the number of duplicate ACKs is always less than 3, no fast retransmission happens. The timeout is triggered.
Test Topology:
 Server ................Router..................Client

          8Mbs 5ms
 5(0)------------------0(1)       800kbs 100ms
                            0(0)-----------------7(0)
 6(0)------------------0(2)
          8Mbs 5ms
SSF Configuration Test File: f3.dml
send window = receive window = 4 packets
SSF Tcpdump Files:
f3.tcpdump
f3serv1.tcpdump
f3serv2.tcpdump
Figure 1: Sequence number plot for tcpdump at router.

Server tcpdump, RTT and Congestion window plot
(EPS format plot for top connection)

Figure 2: Sequence number plot, RTT plot and cwnd plot for tcpdump at server 1

(EPS format plot for bottom connection)

Figure 3: Sequence number plot, RTT plot and cwnd plot for tcpdump at server 2


NS Test with the same parameters

NS tcpdump trace file: f3.tr


Trace Analysis:

The output is consistent with expected output. Because a different initial retransmission timeout value, and different RTT counting method are used in NS-2, the traces are slightly different.

  • Packet loss and retransmission timeout:
    • From Figure 2 plot 1, we can see that the first packet sent by server(SYN+ACK) is dropped.
    • From Figure 2 plot 2, we can see at time 3.93 seconds the RTO counter reaches 0 and a timeout happens. The RTO is reset to 12 seconds, and this packet is retransmitted. The reason for the new RTO value is 12 seconds and not 6 seconds is because the initial RTO is calculated as:
      RTO = srtt + 2*rttVar = 3 seconds
      
      But after that, the RTO is calculated as :
      RTO = srtt + 4*rttVar = 6 seconds
      
      After the back-off, RTO is 12 seconds.
    • In this plot both sides retransmit the first packet because of the timeout.
  • Piggy-backed ACK
    • The ACK for the SYN+ACK packet is piggy-backed with the data request packet sent by Client.
  • Slow start
    • The cwnd increases by 1 MSS for each ACK. Because the delayed-ack option is in force, the number of ACKs depends on whether the fast timeout (every 200 ms) or the reception of 2 full-sized packets happens first.
  • Packet loss, retransmission timeout and slow start:
    • From Figure 1 plot 2, we can see that one packet is dropped by the router because of the queue size of 2 packets. 3 packets are sent after the first drop because although cwnd is 4 packets, there is one unACKed packet. For the same queue size reason, the 3rd packet is dropped.
    • Because only 2 duplicate ACKs can be generated, the server has to wait until a timeout to retranmit the first lost packet.
    • From Figure 3 plot 3, we can see that cwnd is set to 1 MSS for slow start, and ssthresh is set to max(flight-size/2,2*MSS) for congestion avoidance.
  • New ACK received :
    • Slow start, cwnd increases by 1 MSS, 2 packet are sent. In Figure 1 plot 1, both are new packets. In Figure 1 plot 2, one is resent packet, one is new packet.
    • when cwnd reaches ssthresh, congestion avoidance is performed. In Figure 2 plot 3 and Figure 3 plot 3, we can see that the window increment is less than 1 MSS. Thus only 2 new packets can be sent.
  • Packet loss, retransmission timeout and slow start:
    • In Figure 1 plot 2, we can see that one packet is dropped again by the router because of the queue size limit of 2 packets.
    • Because only 2 duplicate ACKs can be generated, the server has to wait until a timeout to retranmit the first lost packet.
    • In Figure 3 plot 3, we can see that cwnd is set to 1 MSS for a slow start, and ssthresh is set to max(flight-size/2, 2*MSS) for congestion avoidance.