This blog exists purely as a place for me to dump random links and thoughts I have rather than emailing them to my friends. It'll have large amounts of inside jokes. Also there will probably be times when I write "you" or refer to an email. Just pretend that you are reading an email to you. If you don't know me you likely won't find anything here interesting. If you do know me you also will not find anything here interesting.

Saturday, June 3, 2017

Network Protocols

TCP has no special "I lost a packet!" message.
Instead, ACKs are cleverly reused to indicate loss.
Any out-of-order packet causes the receiver to re-ACK the last "good"
packet – the last one in the correct order.
In effect, the receiver is saying "I received packet 5, which I'm
ACKing. I also received something after that, but I know it wasn't
packet 6 because it didn't match the next sequence number in packet 5."

If two packets simply got switched in transit, this will result in a
single extra ACK and everything will continue normally after the
out-of-order packet is received.
But if the packet was truly lost, unexpected packets will continue to
arrive and the receiver will continue to send duplicate ACKs of the last
good packet.
This can result in hundreds of duplicate ACKs.

When the sender sees three duplicate ACKs in a row, it assumes that the following packet was lost and retransmits it.
This is called TCP fast retransmit because it's faster than the older, timeout-based approach.
It's interesting to note that the protocol itself doesn't have any explicit way to say "please retransmit this immediately!"
Instead, multiple ACKs arising naturally from the protocol serve as the trigger.