Digging deeper into TCP and selective retransmission, Part 2

Opinion
Jul 20, 20062 mins

* Selective retransmission without fast retransmit

In the last newsletter, we dug into some of the details of TCP and how the protocol would typically handle a lost packet in the middle of a transmission. This time, our reader Ken offers another scenario.

He writes, “Here’s another case, without fast retransmit. Same as before, except there are only five segments.

1. Application enqueues 5000 bytes.

2. TCP launches 5 1000-byte segments into the network.

3. Segment 4 gets dropped somewhere in the network.

4. Segment 1 is received. Recipient sends “ack 1000”.

5. Segment 2 is received. Recipient sends “ack 2000”.

6. Segment 3 is received. Recipient sends “ack 3000”.

7. Segment 5 is received. Recipient sends “ack 3000”.

8. Transmitter receives the acks. It now waits.

9. Transmitter waits some more, until its retransmit timer expires. This [retransmission timer] is typically set to the measured round-trip delay plus four times its variance, typically more than one second.

10. Transmitter retransmits segment 4.

11. Segment 4 is received. Recipient sends “ack 5000”.

12. Transmitter receives the “ack 5000” and our transmission is complete.

“I hope this makes it clear how the sender knows that segment 4 was not received (because it was never acked), and how it decides when to resend (when it receives either three duplicate acks just before segment 4, or when its retransmit timer expires). I hope it also illustrates the benefit of fast retransmit [that was discussed in the prior newsletter] – all of the waiting is eliminated.”

Finally, we had noted that the two examples (the first example described in the previous newsletter and the second example described above) worked “in most cases,” so Ken offered the following clarification of when TCP will needlessly resend data. He responded, “When the ACKs themselves are lost, TCP may retransmit data that was actually already received. For example, in my 5-packet example above, if the ‘ack 5000’ the receiver sent in step 11 was lost, then the transmitter would needlessly retransmit segment 5. As another example, if the “ack 8000″ in my 8-packet example [in the prior newsletter] step 12 was lost, then the sender would needlessly retransmit segment 5 (but not 6, 7, or 8, because the recipient would respond ‘ack 8000’ when the needless retransmission of segment 5 showed up.)”

You can reach Ken via e-mail if you’d like to continue this discussion with him.

Jim has a broad background in the IT industry. This includes serving as a software engineer, an engineering manager for high-speed data services for a major network service provider, a product manager for network hardware, a network manager at two Fortune 500 companies, and the principal of a consulting organization. In addition, Jim has created software tools for designing customer networks for a major network service provider and directed and performed market research at a major industry analyst firm. Jim’s current interests include both cloud networking and application and service delivery. Jim has a Ph.D. in Mathematics from Boston University.

More from this author