ResetPartialBytesAck.seq - The partial_bytes_acked is set to 0 when all of the data transmitted has been acknowledged
To verify that when all of the data transmitted by the sender has been acknowledged by the receiver, partial_bytes_acked is initialized to 0.
./ResetPartialBytesAck.seq [-tooloption ...] -pkt ./ResetPartialBytesAck.def -tooloption : v6eval tool option See Also: ../common/STD_PKT_COMMON.def ../common/SCTP_COMMON.def
Association is established between endpoint A and B. Arrange data in endpoint B such that messages is sent to endpoint A.
Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) <----- Send <---------------- DATA 1 Don't Send SACK <---------------- DATA 2 Don't Send SACK <---------------- DATA 3 Don't Send SACK <---------------- DATA 4
SACK -----------------> (For DATA 1) <---------------- DATA 5 Don't Send SACK <---------------- DATA 6 Don't Send SACK SACK -----------------> (For DATA 1 and DATA 2) SACK -----------------> (For DATA 1 and DATA 3, report DATA 2 is missing) SACK -----------------> (For DATA 1, DATA 3 and DATA 4, report DATA 2 is missing) SACK -----------------> (For DATA 1, DATA 3 to DATA 5, report DATA 2 is missing) <---------------- DATA 2 <---------------- DATA 7 SACK -----------------> (For all DATAs) DATA ----------------->
<---------------- SACK
<---------------- DATA 1 Don't Send SACK <---------------- DATA 2 Don't Send SACK <---------------- DATA 3 Don't Send SACK <---------------- DATA 4 Don't Send SACK <---------------- DATA 5
SACK -----------------> (For DATA 1 and DATA2) <---------------- DATA 6
<---------------- DATA 7
SACK -----------------> (For all DATAs)
TEST DESCRIPTION:
1. Check A: the initial cwnd before DATA transmission is set to 4380. 2. From endpoint B, send valid DATA message 4 times to endpoint A, when there is association between them. 3. From endpoint A, send SACK of the first DATA message to endpoint B. 4. Check B: Congestion control window is increased by DATA size. 5. From endpoint A, receive DATA message 2 times. 6. From endpoint A, send SACK of the 1st, 3rd DATA messages to endpoint B, report the 2nd message is missing. 7. From endpoint A, send SACK of the 1st, 3rd and 4th DATA messages to endpoint B, report the 2nd message is missing. 8. From endpoint A, send SACK of the 1st, 3rd to 5th DATA messages to endpoint B, report the 2nd message is missing. 9. Check C: The 2nd DATA messages is send again immediately. 10.Check D: Congestion control window is 6000 now. 11.Send SACK of all DATA to endpoint B. 12.From endpoint A, Send DATA message to endpoint and receive SACK. 13.From endpoint A, receive DATA message 5 times. 14.Send SACK of first two messages. 15.Check E: Congestion control window is 7500 now. 17.Receive DATA message 2 times and send SACK of above DATA messages. 18.From endpoint A, receive DATA message 5 times. 19.Send SACK of the first message and receive DATA message 2 times. 20.Send SACK of all the above DATA messages. 21.Repeat setp 17 ~ 18 some times 22.Check F: The cwnd is not increased because of step 20 SACK of all the data transmitted by the sender will cause partial_bytes_acked be initialized to 0.
None
RFC 4960
7.2.2. Congestion Avoidance
When cwnd is greater than ssthresh, cwnd should be incremented by 1*MTU per RTT if the sender has cwnd or more bytes of data outstanding for the corresponding transport address.
In practice, an implementation can achieve this goal in the following way:
o partial_bytes_acked is initialized to 0.
o Whenever cwnd is greater than ssthresh, upon each SACK arrival that advances the Cumulative TSN Ack Point, increase partial_bytes_acked by the total number of bytes of all new chunks acknowledged in that SACK including chunks acknowledged by the new Cumulative TSN Ack and by Gap Ack Blocks.
o When partial_bytes_acked is equal to or greater than cwnd and before the arrival of the SACK the sender had cwnd or more bytes of data outstanding (i.e., before arrival of the SACK, flightsize was greater than or equal to cwnd), increase cwnd by MTU, and reset partial_bytes_acked to (partial_bytes_acked - cwnd).
o Same as in the slow start, when the sender does not transmit DATA on a given transport address, the cwnd of the transport address should be adjusted to max(cwnd / 2, 4*MTU) per RTO.
o When all of the data transmitted by the sender has been acknowledged by the receiver, partial_bytes_acked is initialized to 0.