Test Description:
This test shows the behavior of generic Tahoe TCP with delayed ACKs.
Expected output:
  • This test shows that an ACK is delayed for a packet received in-sequence, and sent at the next timeout of fast timer, but no more than 200ms later (the fast timer tick).
  • An ACK must be sent immediatly when either of the following conditions exist:
    • Two full-sized packets received (to avoid too few ACKs).
    • Out of order packets received (to help trigger fast retransmission).
    • Received packet fills in all gap or part of gap of out of order data.
Test topology:
 
    Server .................Router.................Client

              8Mbs 5ms                800kbs 100ms
     6(0)------------------0(1) 0(0)-----------------7(0)
SSF Test Configuration File: f5.dml
send window = receive window = 50 packets
SSF Tcpdump File:
f5.tcpdump (at router)

f5_1.tcpdump (at client)

Figure 1: sequence plot with tcpdump at Router

Zoom in plot for Figure 1

Note that the ACK for the SYN+ACK packet is piggy-backed with the first data request sent by Client. The ACK for the data request is piggy-backed with the first data sent by Server.

The rules for ack generation with delayed ack are not well seen at the router because of delay-induced near-overlap of symbols on the sequence plot. In contrast, they are well seen at the client tcpdump sequence plot.

Sequence plot at Client side:

Figure 2: sequence plot with Client tcpdump (labeled with fast timer ticks)
Zoom in plot for Figure 2
From the Client tcpdump, we can see that:
  • An ACK was sent every 2 full-sized packet, except when the fast timeout happened before the second full-sized packet was received.
  • ACK was sent immediately when out of order packet was received.



NS Test Trace with the same parameters

NS tcpdump trace file:f5.tr

Figure 3: NS trace plot at the router

Figure 4: NS trace plot at Client

The trace plot at client recorded the receive time of data packet and send time of ACK. The first ACK must be a delayed ACK, the timestamp of this packet must be a fast timeout tick. Starting from this point, we label the x-axis every 200 ms. The 4th ACK must also be a delayed ACK, but it's sent between 500ms and 600ms after the 1st delayed ACK. It appears that the ns TCP implementation uses a different method of timing the delayed acks.


Trace Analysis:

The output is consistent with expected output.
Compared with the NS tcpdump, the SSF tcpdump at router is slightly different because of different fast timer granularity.