home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.protocols.tcp-ip      TCP and IP network protocols.      14,669 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 14,085 of 14,669   
   Thomas to All   
   Modifying the TCP congestion control alg   
   02 Nov 13 17:04:11   
   
   From: comicnabster@gmail.com   
      
   The default TCP congestion control algorithm works like this:   
      
   Initially, set the cwnd to 1 segment and the ssthresh to the receiver's   
   advertised window size.   
   When a new ACK is received, increment the cwnd by 1 segment (aka doubling cwnd   
   every RTT), in what is called the slow start phase. When cwnd exceeds   
   ssthresh, enter congestion avoidance, where cwnd is incremented by 1/cwnd   
   segments every ACK (or    
   incremented by 1 segment every RTT).   
   In the case of a timeout, set ssthresh to cwnd/2, and set cwnd to 1.   
   Now suppose you modified the congestion control algorithm as follows:   
      
   Initial parameters (cwnd = 1 and ssthresh = advertised size) are the same   
   When a new ACK is received, increment cwnd by 1 (as before). But when cwnd   
   exceeds ssthresh, increment cwnd by a constant 0.01 segments.   
   When a timeout occurs, set ssthresh to cwnd*0.875 and then set cwnd to 1.   
   What impact would this have on the TCP sender's data transmission rate,   
   compared to the original congestion control algorithm?   
      
   My tentative answer:   
      
   Initially, there is no impact during the slow start phase. Cwnd is incremented   
   by 1 segment in both the original and modified algorithms.   
   If no timeouts have occurred, then there is still no impact even after cwnd   
   exceeds ssthresh. This is because the sender picks the smaller of either the   
   advertised window size or the cwnd to use as its sending window. Since the   
   initial value of ssthresh    
   is the advertised window size, the fact that cwnd is incremented by 0.01   
   rather than 1 makes no difference, as the sender would go with the advertised   
   window size.   
   However, if a timeout occurs, then the modified algorithm negatively impacts   
   the data rate. Compared to the original algorithm, the modified algorithm   
   results in a larger new ssthresh (0.875 of cwnd vs 0.5 of cwnd). Thus slow   
   start will last longer with    
   the modified algorithm, temporarily increasing the data rate. However,   
   ssthresh is now smaller than the advertised window size (assuming that didn't   
   change). So once cwnd exceeds ssthresh, the sender will still choose cwnd as   
   its sending window value.    
   Compared to the original algorithm, the cwnd (and thus the sender's window)   
   will increase very slowly, which adversely impacts the data transmission rate.   
   Net result = lower data transmission rate with the modified algorithm.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca