I am using Ubuntu 14.04 LTS with Linux Kernel version 3.13.0-34.
How can I find out what is the default or what is the current TCP congestion control algorithm being used ?
Thanks.
There aren't TCP variants; there are TCP congestion control algorithms:
sysctl net.ipv4.tcp_congestion_control
cat /proc/sys/net/ipv4/tcp_congestion_control
The default is usually cubic
or reno
, although plenty others are available, and programs can set the preferred algorithm for individual connections (e.g. Transmission enables lp
if available).
(The same knob affects both IPv4 and IPv6, despite its name.)
Adding to @grawity answer, it is possible to check all TCP congestion control algorithms available with the following command:
sysctl net.ipv4.tcp_available_congestion_control
A list of some of the possible output (i.e.- availble flavours) is:
reno: Traditional TCP used by almost all other OSes. (default)
cubic: CUBIC-TCP
bic: BIC-TCP
htcp: Hamilton TCP
vegas: TCP Vegas
westwood: optimized for lossy networks
YeAH: delay-aware/state-enabled to keep a pipe at or below a threshold
NOTE:
If cubic and/or htcp are not listed when you do 'sysctl net.ipv4.tcp_available_congestion_control'
, try the following, as most distributions include them as loadable kernel modules:
/sbin/modprobe tcp_htcp
/sbin/modprobe tcp_cubic
For more detailes you can have look here:
Hope it helps.
Cheers,
Guy.
If you want to find out the current congestion control algorithm used on each connection you can use the ss
command (part of the iproute2 package/tools):
ss -ti
Here's some example output: Below the connection details, the first item in the parameter output is the congestion control algorithm - in this case cubic
- which is followed by various parameters related to the TCP connection.
ESTAB 0 0 192.168.56.102:ssh 192.168.56.1:61795
cubic wscale:6,7 rto:201 rtt:0.218/0.038 ato:40 mss:1448 rcvmss:1392
advmss:1448 cwnd:10 bytes_acked:8753 bytes_received:3945 segs_out:40
segs_in:63 send 531.4Mbps lastsnd:1 lastrcv:2 lastack:1
pacing_rate 1059.1Mbps rcv_rtt:2 rcv_space:28960
Note: It is possible for applications to chose the congestion control algorithm they want to use by using the TCP_CONGESTION
setsockopt() call.