[haiku-bugs] [Haiku] #13630: tcp: rfc 5681: implementing fast retransmit and recovery

  • From: "a-star" <trac@xxxxxxxxxxxx>
  • Date: Tue, 25 Jul 2017 22:27:16 -0000

#13630: tcp: rfc 5681: implementing fast retransmit and recovery
------------------------------------+------------------------------
 Reporter:  a-star                  |        Owner:  axeld
     Type:  task                    |       Status:  new
 Priority:  normal                  |    Milestone:  Unscheduled
Component:  Network & Internet/TCP  |      Version:  R1/Development
 Keywords:  tcp, gsoc, slow start   |   Blocked By:
 Blocking:                          |  Has a Patch:  0
 Platform:  All                     |
------------------------------------+------------------------------
 Implementing the fast retransmit and recovery algorithm as specified in
 rfc 5681.

 Added new variable fFlightSizePrev to store the value of flight size when
 the first duplicate aknowledgement is encountered. It is required since
 rfc 5681 mandates that any “additional data sent in limited transmit MUST
 NOT be included” in the following calculation:

 On receipt of 3rd dup ACK, set ssthresh = max(FlightSize/2, 2*SMSS)

 Instead of increasing cwnd as cwnd = ssthresh + 3*SMSS, I have choosen to
 increase it by the actual amount of data that has left the network but
 hasn't been cumutatively acknowledged, i.e., the difference between the
 current flightSize and fFlightSizePrev + SMSS (for the retransmitted
 segment).

 The rfc tells us to increase cwnd by SMSS on every dup ACK after the 3rd.
 It also describes an attack that uses duplicate ACKs to cause a higher
 than appropriate sending rate and a way to fight it:

 “TCP MAY limit the number of times cwnd is artifically inflatead during
 loss recovery to the number of outstanding segments (or, an approximation
 thereof)”

 I also changed the way duplicate ACK were being recognized. For dup ACKs
 the acknowledgement field will read a value equal to fSendUnacknowledged
 and not smaller than it. The same was mentioned in the book “TCP/IP
 Illustrated Volume 2: The Implementation”.

 “When previously unsent data is available and the new value of cwnd and
 the receiver’s advertised window allow, a TCP SHOULD send 1*SMSS bytes of
 previously unsent data.”

 Also shifted the position where fDuplicateAcknowledgeCount was being reset
 to 0. It is now under Acknowledged and not under _Receive. This was done
 since multiple parts of the Receive function make use of Acknowledged
 function and not all those parts pass through the previous reset position.
 For example, the header prediction part calls Acknowledged but doesn't
 pass through further processing in _Receive.

--
Ticket URL: <https://dev.haiku-os.org/ticket/13630>
Haiku <https://dev.haiku-os.org>
The Haiku operating system.

Other related posts: