Google: Difference between revisions
Content added Content deleted
Line 138: | Line 138: | ||
;Answers |
;Answers |
||
;1) |
|||
*Network throughput impacted by TCP window size, Latency and Congestion |
*Network throughput impacted by TCP window size, Latency and Congestion |
||
Line 145: | Line 144: | ||
Maximum amount of data a sender can send before receiving an acknowledgement. Standard TCP Window Size = 65K bytes |
Maximum amount of data a sender can send before receiving an acknowledgement. Standard TCP Window Size = 65K bytes |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
*It’s not just about latency, TCP doesn’t like congestion |
*It’s not just about latency, TCP doesn’t like congestion |
||
Adding more traffic produces a negative marginal effect above about 30% utilization |
Adding more traffic produces a negative marginal effect above about 30% utilization |
||
⚫ | |||
*Window scaling changes the TCP window to: |
*Window scaling changes the TCP window to: |
||
Line 177: | Line 164: | ||
8MB / 100 ms = 650 Mbps |
8MB / 100 ms = 650 Mbps |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
== BIC TCP (Binary Increase Congestion control) == |
|||
⚫ | |||
⚫ | |||
⚫ | |||
*BIC is optimized for high speed networks with high latency: so-called "long fat networks". |
|||
*For these networks, BIC has significant advantage over previous congestion control schemes in correcting for severely underutilized bandwidth. |
|||
*BIC implements a unique congestion window (cwnd) algorithm. |
|||
*This algorithm tries to find the maximum cwnd by searching in three parts: binary search increase, additive increase, and slow start. |
|||
*When a network failure occurs, the BIC uses multiplicative decrease in correcting the cwnd. |
|||
*BIC TCP is implemented and used by default in Linux kernels 2.6.8 and above. |
|||
*The default implementation was again changed to CUBIC TCP in the 2.6.19 version. |
|||
== CUBIC TCP == |
|||
*CUBIC is an implementation of TCP with an optimized congestion control algorithm for high bandwidth networks with high latency (LFN: long fat networks). |
|||
*CUBIC TCP is implemented and used by default in Linux kernels 2.6.19 and above, as well as Windows 10 & Windows Servers. |
|||
*It is a less aggressive and more systematic derivative of BIC TCP, in which the window size is a cubic function of time since the last congestion event, with the inflection point set to the window size prior to the event. |
|||
*Because it is a cubic function, there are two components to window growth. |
|||
*The first is a concave portion where the window size quickly ramps up to the size before the last congestion event. |
|||
*Next is the convex growth where CUBIC probes for more bandwidth, slowly at first then very rapidly. |
|||
*CUBIC spends a lot of time at a plateau between the concave and convex growth region which allows the network to stabilize before CUBIC begins looking for more bandwidth. |
|||
*Another major difference between CUBIC and standard TCP flavors is that it does not rely on the cadence of RTTs to increase the window size. |
|||
*CUBIC's window size is dependent only on the last congestion event. |
|||
*With standard TCP, flows with very short round-trip delay times (RTTs) will receive ACKs faster and therefore have their congestion windows grow faster than other flows with longer RTTs. |
|||
*CUBIC allows for more fairness between flows since the window growth is independent of RTT. |