[e2e] Some questions about TCP.

Detlef Bosau detlef.bosau at web.de
Sun Nov 22 11:04:45 PST 2009

Hi to all.

The following questions may be stupid - however, the most stupid 
questions are the never asked ones ;-)

1.: Recently, I was told, however I did not find a reference in some 
RFC, we had two distinct packet types in TCP:
- those _with_ payload, which are _data_ _segments_,
- those _without_ payload, which are _acknowledgements_.

If this is correct, I would appreciate some reference.

2.: RFC 2581 states, tat in slow start state CWND is incremented by 
_new_ acknowledgements, not by duplicate acks.
The same holds true in congestion avoidance state.

Question: Why is CWND is not incremented for dupacks? When I think about 
it, I can find arguments for both ways. So, I would like to here the 
rationale for the "standard version".

3. I do not quite understand the fast retransmit procedure in RFC 2581.

RFC 2581 says:


 The fast retransmit and fast recovery algorithms are usually
   implemented together as follows.

   1.  When the third duplicate ACK is received, set ssthresh to no more
       than the value given in equation 3.

   2.  Retransmit the lost segment and set cwnd to ssthresh plus 3*SMSS.
       This artificially "inflates" the congestion window by the number
       of segments (three) that have left the network and which the
       receiver has buffered.

   3.  For each additional duplicate ACK received, increment cwnd by
       SMSS.  This artificially inflates the congestion window in order
       to reflect the additional segment that has left the network.

   4.  Transmit a segment, if allowed by the new value of cwnd and the
       receiver's advertised window.

   5.  When the next ACK arrives that acknowledges new data, set cwnd to
       ssthresh (the value set in step 1).  This is termed "deflating"
       the window.

       This ACK should be the acknowledgment elicited by the
       retransmission from step 1, one RTT after the retransmission
       (though it may arrive sooner in the presence of significant out-
       of-order delivery of data segments at the receiver).
       Additionally, this ACK should acknowledge all the intermediate
       segments sent between the lost segment and the receipt of the
       third duplicate ACK, if none of these were lost.

   Note: This algorithm is known to generally not recover very
   efficiently from multiple losses in a single flight of packets
   [FF96].  One proposed set of modifications to address this problem
   can be found in [FH98].


To my understanding, the fast retransmit retransmits the "one" lost 
segment indicated by last ack and does _not_ a go back n.

Hence, we should introduce a step "0":

0. When the third dup ack is received, inflate CWND to CWND + 3.
1. Set ssthresh = ....

The rest remains the same.

Could somebody please help me here?



Detlef Bosau            Galileistraße 30        70565 Stuttgart
phone: +49 711 5208031  mobile: +49 172 6819937 skype: detlef.bosau     
ICQ: 566129673          detlef.bosau at web.de     http://www.detlef-bosau.de                      

More information about the end2end-interest mailing list