* Selective retransmission without fast retransmit
endif; ?>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.




