Test Description:
This test show how the behavior of Reno TCP with multiple packet
drops.
Expected output:
When the first packet is dropped, a fast retransmission is
performed. Unlike TCP Tahoe, TCP Reno moves the snd_nxt pointer to its
previous position before fast retransmission, which causes negative effective
window when the new ACK is received. TCP Reno has to wait for a timeout
to recover from the multiple loss.
Test Topology:
Server ................Router..................Client
8Mbs 5ms
5(0)------------------0(1) 800kbs 100ms
0(0)-----------------7(0)
6(0)------------------0(2)
8Mbs 5ms
SSF Test Configuration File: f16.dml
send window = receive window = 50 packets
SSF Tcpdump File:
f16.tcpdump
f16serv1.tcpdump
f16serv2.tcpdump
Figure 1: sequence plot for tcpdump at Router
Zoom in for figure 1
Figure 2. sequence plot, RTT plot and cwnd plot for tcpdump at Server
1
Zoom in for Figure 2
(EPS file for Figure 2)
Figure 3. sequence plot, RTT plot and cwnd plot for tcpdump at Server
2
(EPS file for Figure 3)
NS Test with the same parameters
NS tcpdump trace file: f16.tr
Trace Analysis:
The output is consistent with expected output.
Top connection analysis (server 1):
- The first fast retransmission/fast recovery:
- From Figure 1 plot 1, we can see that after 3 duplicate ACKs the first lost
packet is retransmitted.
- As seen in Figure 2 plot 3, according to fast recovery algorithm the ssthresh
is set to 22 packets, and cwnd is set to 25 packets.
- During the fast recovery 5 more new packets are sent before a new data ACK comes.
- The second fast retransmission/fast recovery:
- After the first packet is resent, new ACK comes and is followed by 3 duplicate
ACKs, and the second lost packet is retransmitted.
- According to Figure 2 plot 3, ssthresh is set to 11 packets, cwnd is set
to 14 packets.
- No new packet is sent during fast recovery because cwnd isn't large enough:
- According to the send window management algorithm
(see SSF TCP implementation), the usable
window is:
D = snd_una + snd_wnd - snd_nxt
In SSF TCP a new packet can be sent only when D >= MSS, implying:
min(cwnd, rwnd) - (snd_nxt - snd_una) >= MSS
- In this test TCP Reno is used. From Figure 2 plot 3, we can see after fast
retransmission:
min(cwnd, rwnd) = 14 MSS
snd_nxt - snd.una = 48 MSS
- From Figure 1 plot 1 we can see that no packet is sent during this fast recovery.
- New ACK received for the second lost packet:
- Timeout and retransmission:
- After the timeout cwnd is 1 MSS, ssthresh is set to 5 MSS (5 * 960 bytes
as shown in Figure 2 plot 3 ). One packet is retransmitted.
- New ACK received and slow start:
- The following new ACK:
- The same thing happens, snd_nxt = snd_una each time, cwnd increases by
1 MSS untill reach ssthresh
|