In the following wireshark trace, the packet with seq=41030 was sent, after some time the packet before it got acknowledged. after that a retransmission happened the packet seq=41030, then 3 ACKs received which indicated that seq=41030 is lost and should be retransmitted, but that doen't happen.
I'm confused, why retransmission happened before the receiving of the 3 ACKs. was the retransmission from a timeout? but why it wasn't retransmitted again when 3 ACKs received.
1 Answer
What you see is basic TCP that has nothing to do with the number of Acks, because at its most basic TCP works based on timeouts. Hence, the TCP segment with sequence number 41030 was lost, never ack'ed, timed out and re-transmitted.
Detecting three duplicate ACKs is an optimization to speed up packet loss detection. The reasoning is that one segment was lost, but subsequent segments didn't and still trigger ACKs, but because the receiving side cannot acknowledge beyond the lost segment, so the assumption this is lost.
In your example you do see three ACKs for the same sequence number, but that will not trigger a retransmit, because they actually ACK everything that was already sent. The two last ACKs are not triggered by any incoming packets but self-triggered to update the receive window size. You typically wouldn't see that message on a heavily active TCP session, only on an idle one.
-
I understood you the first part, i tried another trace and I received a clearly 3 duplicate ACKs (ack=86379) this time and still there is no retransmission. i.stack.imgur.com/nqJuJ.png May 2, 2020 at 19:36
-
Sure, note that fast retransmit is simply an optimisation and actual implementations may vary, they may simply be preparing the retransmit and cancel it when the ack arrives anyway, or did checks against in flight messages that faiiled, or avoid a second retransmit, or... . May 2, 2020 at 20:47
-
-
Actually, it was as you said. In the previous screenshot, After the 3 DUP ACKS, there is an ACK packet (ack=93579) which acknowledges all previous packets including seq=86379. So the fast transmission was canceled. May 3, 2020 at 1:01