Hi all,
I am working on ns3.10. I found a problem when the ACK corresponding to a previous FIN segment is lost.
Topology:
n0----------------n1----------------n2
p2p p2p
n0 is the source node (source application starts at 1second and ends at 49 seconds)
n1 acts as router and implements droptail queue.
n2 is the sink node (sink application starts at 0 seconds and ends at 58 seconds)
With this topology and the configuration provided in the file "testcase.cc" the original intention was to overflow the buffer of n1 to see how the congestion control algorithm of TCP behaved.
The problem detected is that the simulation is never ending (unless you set a Simulator::Stop at the end of the script), n2 is always scheduling a retransmission for the FIN segment and n0 complains about this segment for being out of range (sequence number out of range).
After several test and analysing the pcap captures I got to the conclusion that this problem is only presented when the ACK (n0->n2) of a previous FIN package (n2->n0) is lost .
Fragments of log Output:
58 [node 2] TcpSocketBase:Close(0x89fbe70)
58 [node 2] TcpSocketBase:DoClose(0x89fbe70)
58 [node 2] TcpSocketBase:SendEmptyPacket(0x89fbe70, 1)
58 [node 2] Schedule retransmission timeout at time 58 to expire at time 60
58 [node 2] ESTABLISHED -> FIN_WAIT_1
58 [node 2] TcpSocketBase:Close(0x89fb1f8)
58 [node 2] TcpSocketBase:DoClose(0x89fb1f8)
58 [node 2] TcpSocketBase:CloseAndNotify(0x89fb1f8)
58 [node 2] LISTEN -> CLOSED
58.0057 [node 0] Socket 0x89fb678 forward up
192.168.1.2:8080 to
192.168.0.1:4915358.0057 [node 0] TcpSocketBase:ProcessEstablished(0x89fb678, 8080 > 49153 [ FIN ACK ] Seq=1 Ack=642641 Win=65535)
58.0057 [node 0] TcpSocketBase:PeerClose(0x89fb678, 8080 > 49153 [ FIN ACK ] Seq=1 Ack=642641 Win=65535)
58.0057 [node 0] Accepted FIN at seq 158.0057 [node 0] ESTABLISHED -> CLOSE_WAIT
58.0057 [node 0] TCP 0x89fb678 calling NotifyNormalClose
58.0057 [node 0] TcpSocketBase:SendEmptyPacket(0x89fb678, 16)
RxDrop at 58.00760 [node 2] TcpSocketBase:SendEmptyPacket(0x89fbe70, 17)
60 [node 2] Schedule retransmission timeout at time 60 to expire at time 62
60.0057 [node 0] Socket 0x89fb678 forward up
192.168.1.2:8080 to
192.168.0.1:4915360.0057 [node 0] At state CLOSE_WAIT received packet of seq 1 out of range [2:1]
62 [node 2] TcpSocketBase:SendEmptyPacket(0x89fbe70, 17)
62 [node 2] Schedule retransmission timeout at time 62 to expire at time 64
62.0057 [node 0] Socket 0x89fb678 forward up
192.168.1.2:8080 to
192.168.0.1:49153
62.0057 [node 0] At state CLOSE_WAIT received packet of seq 1 out of range [2:1]
64 [node 2] TcpSocketBase:SendEmptyPacket(0x89fbe70, 17)
64 [node 2] Schedule retransmission timeout at time 64 to expire at time 66
64.0057 [node 0] Socket 0x89fb678 forward up
192.168.1.2:8080 to
192.168.0.1:4915364.0057 [node 0] At state CLOSE_WAIT received packet of seq 1 out of range [2:1]
Can some one comment on this issue?
I am attaching to the email the file "testcase.cc" that I was using to analyse the problem and the log output I got when running it.
Thanks in advance
Mauro Vidotto