Networking – Why does TCP sometimes not acknowledge the packets it receives

networkingtcp

I use firefox to visit a web server running on a computer on my LAN. I notice that sometimes TCP doesn't acknowledge the packets it receives. For example, in the following captured packets:

https://docs.google.com/file/d/0B-LaBUj9KtQhS0RYNXF1RjZTa2M/edit?usp=sharing

the 7th 9th and 11th packets are duplicated ACK, the browser receives TCP packets 6,8 and 10, but the browser TCP stack doesn't acknowledge the received packets, why?

Best Answer

It does.

You're probably seeing TCP Delayed Acknowledgement, in which the recipient can delay up to 500ms in order to send a combined ACK packet which acknowledges multiple packets that were received. This is good for reducing overhead when you have a lot of packets and don't particularly care about latency.

This can increase perceived latency, and so this feature is what you see disabled in many "TCP Fixes" that you can find for games: by setting the TCP_ACKNOWLEDGE_DELAY to 0, Windows will send all ACKs immediately instead of trying to group them. This has the downside of creating more network traffic, with little benefit. It gives the appearance of lowering latency, but the data packets aren't sent any faster.

Related Question