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).