Hello, my question regards the persist mode feature of TCP.
In general, sending a zero window acknowledgement forces a sender into
persist mode, and a subsequent acknowledgement re-opens the send window.
I have found that in some implementations (AIX 4.3 and SunOS 5.6, for
example), sending a zero window acknowledgment that moves the right
edge of the send window left still forces the sender into persist mode.
Once another acknowledgement re-opens the window, all segments that were
moved to the right of the send window are retransmitted immediately
(because congestion control mechanism are not invoked).
However, with other implementations (Linux, for example), behavior is
quite the opposite. It seems that Linux does not enter persist mode unless
a zero window acknowledgement acknowledges all outstanding bytes.
Even if a zero window acknowledgement does put a sender into persist mode,
Linux will not freeze its transmission rate, but rather use slow-start to
recover losses. I think the idea behind this is from RFC 2861---a pause in
communication invalidates the congstion window.
Does anyone have a comment an how an implementation should re-act to a
zero window acknowledgement? RFC 1122 is very brief on this subject.