[BXXPwg] Multiple sequence frames

Keith McCloghrie kzm@cisco.com
Wed, 19 Jul 2000 23:20:20 -0700 (PDT)

> > Hmmm...  it seems legitimate to me to reduce a window, provided that the
> > receiver can still handle any outstanding data legitimately sent according
> > to the then-current window values.  I.e. if the window is reduced, buffer
> > space may be reclaimed only as data is received.
> >
> > This may require some slightly fancy implementation footwork, but only for
> > receiving systems that allow the window size to be reduced.
> well, either way we have to add clarifying text, but let me try to convince
> you that "reducing a window" is equivalent to "breaking a promise".
> if a receiver says "i am willing to accept upto XXX octets", then a sender
> may immediately transmit up to that many octets, or less than XXX octets, or
> none. regardless of the choice, it is all predicated on the promise that was
> made by the receiver. if the sender transmits all XXX octets, and
> simultaneously, the receiver shrinks the window, then you have breakage.
> this doesn't seem fair: the receiver shouldn't have advertised a window that
> large unless it had already reserved the space for it.
> remember, the receiver doesn't have to keep opening up the window as it
> buffers data. if it becomes constrained, it decides whether to issue further
> updates. if it doesn't, the sender must stop when it exhausts the original
> window.

Some of the text in RFC 1122 regarding TCP windows might be helpful here:
  Managing the Window: RFC-793 Section 3.7, page 41

            A TCP receiver SHOULD NOT shrink the window, i.e., move the
            right window edge to the left.  However, a sending TCP MUST
            be robust against window shrinking, which may cause the
            "useable window" (see Section to become negative.

            If this happens, the sender SHOULD NOT send new data, but
            SHOULD retransmit normally the old unacknowledged data
            between SND.UNA and SND.UNA+SND.WND.  The sender MAY also
            retransmit old data beyond SND.UNA+SND.WND, but SHOULD NOT
            time out the connection if data beyond the right window edge
            is not acknowledged.  If the window shrinks to zero, the TCP
            MUST probe it in the standard way (see next Section).

                 Many TCP implementations become confused if the window
                 shrinks from the right after data has been sent into a
                 larger window.