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:
- 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.
|