Subject: what to do when arwnd is zero

From: Ilknur Aydin <[email-masked]>
Date: Thu, 10 Jun 2004 11:33:12 -0400 (EDT)

Hello All,

Currently, I try to include the changes in implguide10.txt into my SCTP
Qualnet implementation. However, I am not sure if I clearly understand
Section 2.15.2 about the sender and receiver behaviours when arwnd is
zero:

   ---------
   New text: (Section 6.2)
   ---------

   The SCTP endpoint MUST always acknowledge the reception of each
   valid DATA chunk when the DATA chunk received is inside its receive
   window.

   When the receiver's advertised window is 0, the receiver MUST drop
   all new incoming DATA chunk and immediately send back a SACK with
   the current receive window showing only DATA chunks received and
   accepted so far.  The dropped DATA chunk MUST NOT be included in the
   SACK as they were not accepted....

   ---------
   New text: (Section 6.1)
   ---------

   A) At any given time, the data sender MUST NOT transmit new data to
      any destination transport address if its peer's rwnd indicates
      that the peer has no buffer space (i.e. rwnd is 0, see Section
      6.2.1).  However, regardless of the value of rwnd (including if it
      is 0), the data sender can always have one DATA chunk in flight to
      the receiver if allowed by cwnd (see rule B below).  This rule
      allows the sender to probe for a change in rwnd that the sender
      missed due to the SACK having been lost in transit from the data
      receiver to the data sender.

      When the receiver's advertised window is zero, this probe is called
      a zero window probe.  Note that zero window probe SHOULD only be
sent
      when all outstanding DATA chunks have been cumulatively acknowledged
      and no DATA chunk(s) are in flight.  Zero window probing MUST
      be supported.

      When a sender is doing zero window probing, it should not time
      out the association if it continues to receive new packets from
      the receiver.  The reason is that the receiver MAY keep its window
      closed for an indefinite time.  Refer to Section 6.2 on the receiver
      behavior when it advertises a zero window.  The sender SHOULD
      send the first zero window probe after 1 RTO when it detects that
      the receiver has closed its window, and SHOULD increase the probe
      interval exponentially afterwards.  Also note that the cwnd SHOULD
      be adjusted according to Section 7.2.1.  Zero window probing does
      not affect the calculation of cwnd...

- Part "...However, regardless of the value of rwnd (including if it
      is 0), the data sender can always have one DATA chunk in flight to
      the receiver if allowed by cwnd (see rule B below).  This rule
      allows the sender to probe for a change in rwnd that the sender
      missed due to the SACK having been lost in transit from the data
      receiver to the data sender.

      When the receiver's advertised window is zero, this probe is called
      a zero window probe.  Note that zero window probe SHOULD only be
sent
      when all outstanding DATA chunks have been cumulatively acknowledged
      and no DATA chunk(s) are in flight..."

is not clear to me. If cwnd does not allow, we can not have any chunks in
flight, even for zero window probing ?

- What does "...  it should not time out the association if it continues
to receive new packets from the receiver. .." mean ?

When zero window probe reaches to the receiver, the receiver drops the
probe, but sends a SACK back. Since, the SACK will not ack the zero window
probe, the assoc. will eventually timeout, but cwnd value should not be
cut ??

- For the part " ...Also note that the cwnd SHOULD be adjusted according
to Section 7.2.1.  Zero window probing does not affect the calculation of
cwnd.."

Does it mean that cwnd should be DEGRADED according to section 7.2.1 ?

I would appreciate any comment/explanation/interpretation.

May be this section needs a little more clarification/re-wording ?

Thanks,

Ilknur Aydin
DEGAS Networking Group
Dept. of Computer and Information Sciences
University of Delaware
http://www.cis.udel.edu/~aydin

---

From: "Randall Stewart (cisco)" <[email-masked]>
Date: Thu, 10 Jun 2004 14:34:20 -0400

Ilknur:

Comments below..

>flight, even for zero window probing ?

If the cwnd does not allow you to send something then you
MUST have outstanding data aka something IS in flight..
Since cwnd never gets below 1 MTU... so if the cwnd is
full you have at least 1MTU outstanding.

>to receive new packets from the receiver. .." mean ?

Consider a sender "A" and a receiver "Z"

Now Z closes its rwnd to 0.. for whatever reason for the
next 1 hour. However it is sending things to A...

Consider the following on the A sender side:
A                                                                        Z
-------DATA(tsn=n, zero-rwnd-probe)------------->
<-------------SACK(tsn=n-1, no-gap-acks)--------
..
<time-out>

Now if Z is holding it closed.. the above will repeat
over and over again.. the comment is saying you don't consider
the peer failed if it is talking to you with a zero rwnd... normally
if you got the above repeated 8 times (with no SACK's and some
positive rwnd you would consider the peer unreachable).. in
this case you don't want to do that...

>probe, the assoc. will eventually timeout, but cwnd value should not be
correct... the association goes on "hold" waiting to send
data if you will... this could happen if the app does not
read data .. for example..

>Does it mean that cwnd should be DEGRADED according to section 7.2.1 ?
Well.. if you are going to do degrading of cwnd.. you must do
this periodically.. I, however, do not think degrading is needed
when you implement max-burst.... but thats another
discussion we need to have and make adjustments to the
I-G...

Hope that helps

R

-- 
Randall R. Stewart
ITD - Transport Technologies
815-477-2127(o) or 815-342-5222(c)