Ethereal-users: RE: [Ethereal-users] sequence/acknowledgement number question

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Jack Jackson <jack@xxxxxxxxxxxxxxx>
Date: Thu, 11 Aug 2005 13:37:29 -0700
At 01:08 PM 8/11/2005, Craig Wicker wrote:
I would like to have a stab at this, please.

Say you have a window of ten frames between these machines; meaning
machine ONE can send out ten frames before expecting an ACK from machine
TWO.

Windows are based on number of bytes, not frames.

If an ack is received by machine ONE somewhere in between the first and
last frames send (1-10); this means machine TWO is ack'ing the last good
frame received from machine ONE.
And machine ONE should resend starting with that frame number going
forward so that machine TWO gets the entire [whatever] in good
condition; no lost frames, no CRC that didn't check out; etc.

No. Machine two can send ACKs anytime it wishes. In fact, to keep the stream moving, it is desirable to send the first ACK fairly early. Otherwise the sender will send the entire window size, and will then pause until the receiver gets all of the messages and sends an ACK.

Data should not be resent unless the sender has a reasonably good idea that data has been lost. Most TCP stacks use the receipt of multiple messages with the same ACK value, when more data has been sent, as a signal that data has been lost (generally if a message is received with a sequence number greater than what is expected, an ACK will be sent immediately - one for each message received after the lost message).