[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-sctp
Subject:    Re: [PATCH] SCTP: Fix DATA retransmit after fast retransmit
From:       Vlad Yasevich <vladislav.yasevich () hp ! com>
Date:       2008-04-25 17:56:18
Message-ID: 48121B42.8070205 () hp ! com
[Download RAW message or body]

Wei Yongjun wrote:
> Hi Vlad:
> 
> Vlad Yasevich wrote:
>> Hi Wei
>>
>> I was able to reproduce the problem as well as understand when the rfc 
>> really
>> wants us to do.
>>
>> On further analysis we have a lot of problems with fast retransmit.
>>
>> 1.  We really should be restarting the T3 timer any time we fast 
>> retransmit the
>> lowest outstanding TSN.  In your scenario, we would restart the T3-rtx 
>> time when
>> we fast retransmit TSN 2.
> 
> Does this means that when we do fast retransmit, we would restart the 
> T3-rtx time?

Yes, but only when fast retransmitting the lowest outstanding TSN.
So, let's take the scenario we've been working with.

Endpoint A                       Endpoint B
DATA (TSN = 1)  ------------->
DATA (TSN = 2)  -- (lost)---->
DATA (TSN = 3)  ------------->
DATA (TSN = 4)  ------------->
              <-------------   SACK (CTSN = 1)
                                   At this point, lowest outstanding is 2.

DATA (TSN = 5)  ------------->
              <-------------   SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 2)
              <------------    SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 3)
              <------------    SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 4)

DATA (TSN = 2)  -(fast rtx)-->
    Since we are doing fast rtx for lowest outstanding, restart the T3 timer
    giving this chunk a chance to be acked.

              <---(lost)----   SACK (CTSN = 5) 


We can also extend this scenario a little bit more:

DATA (TSN = 1)  ------------->
DATA (TSN = 2)  -- (lost)---->
DATA (TSN = 3)  ------------->
DATA (TSN = 4)  -- (lost)---->
              <-------------   SACK (CTSN = 1)
                                   At this point, lowest outstanding is 2.

DATA (TSN = 5)  ------------->
              <-------------   SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 2)
              <------------    SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 2, GAP-START = 4, END = 4)
DATA (TSN = 6) -------------->
              <------------    SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 2, GAP-START = 4, END = 5)

DATA (TSN = 2)  -(fast rtx, lost)-->
    Since we are doing fast rtx for lowest outstanding, restart the T3 timer
    giving this chunk a chance to be acked.

DATA (TSN = 7) ------------>
              <-------------   SACK (CTSN = 1, GAP-START = 2, GAP-ENT = 2, GAP-START = 4, END = 6)

DATA (TSN = 4) -(fast rtx) ---->
    At this point since TSN 2 is still the lowest outstanding, we do NOTrestart
    the T3 timer.


> If not, fast retransmit TSN1 or TSN5 or the other does not need restart 
> the T3-rtx?

Does the above example clarify?

-vlad
--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic