Artica Wiki

TCP BBR congestion control

Switch the proxy to the TCP BBR congestion-control algorithm: concept, performance benefits, use cases and REST API

TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) is a TCP congestion-control algorithm. 
Artica lets you switch the appliance from the default algorithm (CUBIC) to BBR with a single click on the proxy status page. 
The change applies immediately, needs no reboot and does not restart the proxy.
Available from Artica 4.50 SP8 with update 20260923-18 or later. 
 

Concept

Every TCP connection has a sender that decides how fast to push data. 
The congestion-control algorithm is the logic that makes this decision.

Important: BBR acts on what the appliance sends

Congestion control is a sender-side mechanism. 
On a proxy, this means:

The biggest gain is therefore on the proxy-to-user leg when users sit behind a slow, distant or lossy link: 
branch offices over WAN or VPN, remote workers, Wi-Fi or mobile networks.

New connections only

The algorithm is chosen when a TCP connection opens. 
Connections that already exist keep their algorithm until they close; every new connection uses the new one. 
Nothing is interrupted, which is why no proxy restart is needed.

Performance benefits

Use cases

Situation Benefit of BBR
Central proxy serving branch offices over MPLS, SD-WAN or IPsec/OpenVPN tunnels High. 
Pages and downloads delivered to remote sites 
are no longer throttled by occasional losses on the WAN.
Remote workers connected through a VPN to the proxy High. 
Home Internet and 4G/5G links lose packets; 
BBR keeps delivery speed stable.
Guest or HotSpot proxy for Wi-Fi users High. 
Wireless losses are not congestion; 
BBR does not slow down for them.
Proxy in a data center serving users on another continent High. 
Long round-trip times are where CUBIC is slowest
 to reach full speed.
Uploads through the proxy (cloud storage, backups, large attachments) Medium to high. 
The proxy is the sender toward the Internet server.
Saturated Internet access where browsing becomes sluggish during big transfers Medium. 
Shorter queues keep interactive traffic responsive.
Users on the same fast, clean LAN as the proxy Low. 
No harm, little gain.
Slow downloads from a given Internet site None. 
That direction depends on the remote server's algorithm.

Enabling TCP BBR

  1. On the left menu, open Your proxy > Status.
  2. In the Modules & filtering services card, find the TCP BBR tile and click on Parameters.

TCP BBR tile, inactive

  1. The dialog explains the feature and shows the current state read from the kernel. 
    Here BBR is disabled: the active algorithm is cubic.

TCP BBR dialog, disabled

  1. Click on Enable TCP BBR. 
    The setting is saved and applied at once. 
    The diagnostic block is refreshed with the real kernel values: Active algorithm: bbr, Default queue: fq.

TCP BBR dialog, enabled

  1. Close the dialog: the tile now shows Active and the values in use.

TCP BBR tile, active

To go back to CUBIC, open the same dialog and click on the switch again.

Reading the status

Tile badge Meaning What to do
Active (green), bbr · fq The kernel is using BBR for new connections. Nothing.
Inactive, cubic BBR is disabled; the standard algorithm is in use. Enable it if one of the use cases above applies.
Not supported (orange) BBR is enabled but the kernel cannot load tcp_bbr. 
The appliance stays on CUBIC.
See Troubleshooting below.
Configured but could not be applied (red) The setting is saved but the kernel value differs from it. Open the dialog and toggle again; check the logs.
Sub-title starting with HaCluster This proxy is a HaCluster node and the load-balancer
 decides its BBR setting.
Change it on the load-balancer (see below).

REST API

The feature is driven by the articarest REST service (Unix socket /usr/share/artica-postfix/bin/run/articarest.sock, or the REST port with the usual access restrictions).

Method and path Action
GET /system/bbr/status Returns the configured value and the real kernel state. Read-only.
POST /system/bbr/1 / POST /system/bbr/0 Enables or disables BBR, applies it and returns the resulting state. Any other value is refused with HTTP 400. Refused with HTTP 409 when the load-balancer manages this node.
GET or POST /system/bbr/apply Re-applies the stored setting (for instance after a kernel change) and returns the resulting state.

Example:

# curl -s -X POST --unix-socket /usr/share/artica-postfix/bin/run/articarest.sock http://localhost/system/bbr/1
{
  "success": true,
  "outcome": "applied",
  "data": {
    "configured": true,
    "cluster_managed": false,
    "cluster_mode": 0,
    "supported": true,
    "active": true,
    "state": "active",
    "available": ["reno", "cubic", "bbr"],
    "current_cc": "bbr",
    "current_qdisc": "fq",
    "message": ""
  }
}

The outcome field tells you what really happened:

The state field is one of active, inactive, unsupported or error.

Proxies behind a HaCluster load-balancer

On a HaCluster, BBR is best managed from the load-balancer: a single switch applies it to the load-balancer itself (which delivers the data to users) and to every proxy of the cluster. While the cluster manages BBR, the tile of each proxy shows HaCluster and its dialog no longer offers the switch. See TCP BBR on a HaCluster.

Troubleshooting

The dialog shows an error message when saving

The message comes from the appliance: missing privileges (you need proxy administrator rights), node managed by the HaCluster load-balancer, or REST service not reachable. 
The saved value is never hidden: the diagnostic block always shows the real kernel state.


Some connections still use CUBIC

That is expected: connections opened before the change keep their algorithm until they close.