Search code examples
linuxtcpcongestion-control

what is the current popular TCP congestion control algorithm in Linux


TCP Reno, HSTCP, STCP or Fast TCP? Or we can change the algorithm with current popular kernel?


Solution

  • Any recent kernel (3.14.0 is the source version I'm looking at), offers a handful of congestion control algorithms:

    1. Binary Increase Congestion (BIC) control
    2. Version 2.0 of BIC-TCP
    3. TCP Westwood+ (a modification of Reno)
    4. H-TCP (another modification of Reno)
    5. Sally Floyd's High Speed TCP (RFC 3649) congestion control
    6. TCP-Hybla
    7. TCP Vegas
    8. Scalable TCP
    9. TCP Low Priority (TCP-LP)
    10. TCP Veno
    11. YeAH-TCP (I reckon this is a Reno modification)
    12. TCP-Illinois (a modification of Reno)

    What you actually are using or have available depend on options chosen when the kernel has been compiled. You can see what's available with cat /proc/sys/net/ipv4/tcp_available_congestion_control and control what is actually used by fiddling with the file /proc/sys/net/ipv4/tcp_congestion_control.

    In case you have enabled kernel config inclusion in to the running kernel, you can also see what is compiled in with zcat /proc/config.gz | grep CONG. The kernel configuration, e.g. make menuconfig, has more detailed descriptions of each algorithm, but of course nothing beats reading the source, available in your kernel source tree under net/ipv4/ (see files tcp_*.c, filenames are self-explanatory).