Manual Chapter : Congestion control algorithms for TCP profiles

Applies To:

Show Versions Show Versions

BIG-IP APM

  • 14.1.2, 14.1.0

BIG-IP LTM

  • 14.1.2, 14.1.0

BIG-IP AFM

  • 14.1.2, 14.1.0

BIG-IP DNS

  • 14.1.2, 14.1.0

BIG-IP ASM

  • 14.1.2, 14.1.0
Manual Chapter

Congestion control algorithms for TCP profiles

Congestion control settings

The Congestion Control setting includes delay-based and hybrid algorithms, which can address TCP performance issues. Use this chart to assist in selecting the TCP profile setting that best corresponds to your network conditions.

Congestion Control Setting Description
BBR Specifies that the system uses a TCP algorithm that continuously measures the connection's maximum delivery rate (bottleneck bandwidth) and minimum round trip time.
CAIA Delay-Gradient (CDG) Specifies that the system uses a delay-based TCP that senses the onset of congestion by variations in Round Trip Time (RTT).
CAIA Hamilton Delay (CHD) Specifies that the system uses a TCP algorithm that aims to keep network queuing delays below a particular threshold (queue_threshold) and decides to reduce the congestion window (cwnd) probabilistically based on its estimate of the network queuing delay.
CUBIC Specifies that the system uses a TCP algorithm that is optimized for high bandwidth, high delay networks.
High Speed Specifies that the system uses a more aggressive, loss-based algorithm. RFC 3649: HighSpeed TCP for Large Congestion Windows.
Illinois Specifies that the system uses a TCP algorithm that is especially targeted at high-speed, long-distance networks.
New Reno Specifies that the system uses a modification to the Reno algorithm that responds to partial acknowledgements when SACKs are unavailable. RFC 2582: The NewReno Modification to TCP's Fast Recovery Algorithm.
Reno Specifies that the system uses an implementation of the TCP Fast Recovery algorithm, which is based on the implementation in the BSD Reno release. RFC 2581: TCP Congestion Control.
Scalable Specifies that the system uses a TCP algorithm modification that adds a scalable, delay-based and loss-based component into the Reno algorithm.
Vegas Specifies that the system uses a TCP algorithm modification that adds a delay-based and loss-based component into the Reno algorithm.
Westwood+ Specifies that the system uses a TCP algorithm based on a bandwidth estimation metric.
Woodside Specifies that the system uses a TCP algorithm that is especially targeted at high-speed, long-distance networks with enhanced congestion recovery.

About BBR congestion control

Starting with BIG-IP version 14.1.0, TCP profiles can now be customized to use BBR congestion control.

Bottleneck Bandwidth and Round-trip propagation time (BBR) is a congestion control algorithm developed by Google. It is an alternative to loss-based congestion control because it is designed to respond to actual congestion rather than simple packet loss. Effective for latency-sensitive applications, BBR optimizes the speed at which traffic is sent by measuring the fastest way to send data across different network routes. BBR is the only TCP algorithm to estimate the speed of traffic to determine the best way to send it, regardless of whether packets have been lost.

You can apply BBR congestion control to a TCP profile on the BIG-IP system using the following methods:

TMUI
The congestion control drop down menu is found on the TCP Profile page: Local Traffic > Profiles > Protocol > TCP > TCP Profile
TMSH
tmsh modify ltm profile tcp <profile_name> congestion-control bbr
iControl SOAP API
>>> b.LocalLB.ProfileTCP.set_congestion_control_mode(profile_names=['new_tcp'], values=[{'default_flag': False, 'value': 'TCP_CONGESTION_CONTROL_BBR'}]);
>>> b.LocalLB.ProfileTCP.get_congestion_control_mode(profile_names=['new_tcp'])
[{'default_flag': False, 'value': 'TCP_CONGESTION_CONTROL_BBR'}]


                  
iControl REST API
$ restcurl -X PUT -u admin:admin_pw /mgmt/tm/ltm/profile/tcp/new-tcp -d '{"congestionControl":"bbr"}'
{
  "kind": "tm:ltm:profile:tcp:tcpstate",
  "name": "new-tcp",
...
  "congestionControl": "bbr",
...
}
SNMP
# snmpwalk -v 2c -c public localhost ltmTcpProfileCongestionCtrl | grep bbr

F5-BIGIP-LOCAL-MIB::ltmTcpProfileCongestionCtrl."/Common/new_tcp" = INTEGER: bbr(12)
iRules
TCP::congestion <none|reno|newreno|highspeed|scalable|vegas |cdg|chd|illinois|woodside|cubic|westwood|bbr>