tcp_rack(4)

tcp_rack4

Tcp rack-tlp loss detection algorithm for tcp

Usage

To load the TCP stack as a module at boot time, place the following line in loader.conf(5):

tcp_rack_load="YES"

To enable the TCP stack, place the following line in the sysctl.conf(5):

net.inet.tcp.functions_default=rack

Overview

RACK-TLP uses per-segment transmit timestamps and selective acknowledgments (SACKs) and has two parts. Recent Acknowledgment (RACK) starts fast recovery quickly using time-based inferences derived from acknowledgment (ACK) feedback, and Tail Loss Probe (TLP) leverages RACK and sends a probe packet to trigger ACK feedback to avoid retransmission timeout (RTO) events.

Compared to the widely used duplicate acknowledgment (DupAck) threshold approach, RACK-TLP detects losses more efficiently when there are application-limited flights of data, lost retransmissions, or data packet reordering events.

It is intended to be an alternative to the DupAck threshold approach.

MIB Variables

The algorithm exposes the following scopes in the net.inet.tcp.rack branch of the sysctl(3) MIB:

net.inet.tcp.rack.misc

Misc related controls

net.inet.tcp.rack.features

Feature controls

net.inet.tcp.rack.measure

Measure related controls

net.inet.tcp.rack.timers

Timer related controls

net.inet.tcp.rack.tlp

TLP and Rack related Controls

net.inet.tcp.rack.timely

Rack Timely RTT Controls

net.inet.tcp.rack.hdwr_pacing

Pacing related Controls

net.inet.tcp.rack.pacing

Pacing related Controls

net.inet.tcp.rack.tp

Rack tracepoint facility

net.inet.tcp.rack.probertt

ProbeRTT related Controls

net.inet.tcp.rack.stats

Rack Counters

net.inet.tcp.rack.sack_attack

Rack Sack Attack Counters and Controls

Besides the variables within the above scopes the following variables are also exposed in the net.inet.tcp.rack branch:

net.inet.tcp.rack.clear

Clear counters

net.inet.tcp.rack.opts

RACK Option Stats

net.inet.tcp.rack.outsize

MSS send sizes

net.inet.tcp.rack.req_measure_cnt

If doing dynamic pacing, how many measurements must be in before we start pacing?

net.inet.tcp.rack.use_pacing

If set we use pacing, if clear we use only the original burst mitigation

net.inet.tcp.rack.rate_sample_method

What method should we use for rate sampling 0=high, 1=low

Releases

13 releases since FreeBSD 13.2-RELEASE; the text changed 4 times.

  1. 13.2
  2. 13.3
  3. 13.4–13.5
  4. 14.0
  5. 14.1–16.0

History

The tcp_rack congestion control module first appeared in FreeBSD 13.0.

Authors

The tcp_rack congestion control module was written by Randall Stewart ⟨[email protected]⟩ and sponsored by Netflix, Inc. This manual page was written by Gordon Bergling ⟨[email protected]⟩.

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.