I've been going thru some information about Nagle and Delayed ACKs and looking at some trace files of my own to see the the concepts in play. Here's a partial of the trace I've been looking at. What I don't understand is how packet 345 is getting put on the wire. Packet 344 went out because it is full MSS, but why did 345 go out before the ACK was received for 344? Doesn't that violate the Nagle buffering rule? Even if the PSH bit was set on packet 345 it shouldn't have gone out because there was unacknowledged traffic (344) on the wire unless the hold-down timer expired, right? asked 26 Oct '13, 17:14 dsuida |
One Answer:
My guess is that the Nagle algorithm buffered more bytes than it cold fit into a single packet while waiting for the ACK that is coming in in packet 343, so it sends two packets (344 and 345). I base that assumption on the fact that the Size for packet 344 is 1500 according to your length column, so I guess that is the Ethernet payload size, and it is full. answered 27 Oct '13, 02:18 Jasper ♦♦ |
Are you suggesting the Nagle timer has expired?
Oh, I oversaw the PSH bit being mentioned - PSH bits force immediate sending, overruling Nagle buffering. It is usually set for the last packet of a transmission consisting of multiple packets, so that there is no artificial delay caused by the wait for additional data that will never happen.