Nagle only comes in to play for things like delayed acks and things.
When a segment is received that does not advance the left edge of the
receiving window (i.e. out of order), an ACK is to be sent immediately
to the other side to inform about the potential packet-loss. No exceptions.
Nagle does not apply in this situation.
This ACK is called a duplicate ack and MUST be sent immediately.
A TCP that does Nagle on/while sending duplicate acks would be incredibly
broken.
----- Original Message -----
From: Marco Rommelse
To: Robinson, Eric R.
Sent: Friday, September 05, 2003 7:07 PM
Subject: Re: [Ethereal-users] Application Keeps Acking Same Packet,then
Suddenly Catches Up
Eric,
Ack-ing the same packet every time is tcp's only way of letting the sending
party know that it has lost the tcp frame following the acked one. The
reciever ack's every packet that it recieves after the lost frame with the
sequence number of the frame it hasn't recieved. The server should resend
that frame. When the frame has been resent, tcp acks the last sequence
number + length of the last frame it has gotten in good order from the
sender. The fact that you see the reciever ack-ing 9-10 times has to do with
the nagle algorithm. This algorithm has an internal clock which goes off
every 200 ms (standard setting). During that time it waits with ack-ing
packets until it has something to send as well. If the 200 ms period has
passed, and there is nothing to send, then it has to ack the packets it
recieved. Your sender is probably filling up the windowsize of your reciever
during that waiting period (fast sender, slow reciever), and tcp has lost a
packet.
Retransmissions like this can slow things down considerably. Try replacing
the lan-cables first, then the patch panels (if any), then switch
switchports, then replace nic's. Test every step.
Marco.