Linux内核无独立TCP协议栈版本,其TCP能力随内核版本演进,需通过uname -r查内核版本,再结合sysctl查看tcp_congestion_control、tcp_sack等参数及/proc/config.gz确认编译特性。

Linux 内核本身没有独立的“TCP 协议栈版本”概念——TCP 实现是内核网络子系统的一部分,随内核版本一同编译、发布和演进。所谓“TCP 协议栈版本”,实际指当前运行内核所集成的 TCP 实现能力,包括支持的算法(如 BBR、CUBIC)、拥塞控制机制、时间戳选项、SACK、TSO/GSO 等特性。这些能力由内核源码决定,并通过运行时参数和编译配置体现。
确认内核版本(TCP 功能的基础载体)
所有 TCP 特性都绑定在具体内核版本上。先查清你用的是哪个内核:
-
uname -r:输出最简内核版本号(如
5.15.0-107-generic),这是判断 TCP 能力范围的第一依据; - cat /proc/version:显示完整构建信息,含编译器、时间戳和发行版标识,有助于识别是否为定制/打补丁内核;
- hostnamectl | grep "Kernel":在 systemd 系统中快速提取内核行,适合脚本调用。
查看当前启用的 TCP 拥塞控制算法
拥塞控制是 TCP 的核心行为,不同算法对应不同内核支持周期:
-
sysctl net.ipv4.tcp_congestion_control:显示当前默认算法(如
bbr、cubic、reno); - sysctl net.ipv4.tcp_available_congestion_control:列出当前内核编译时启用且可切换的所有算法;
- 若输出含
bbr,说明内核 ≥ 4.9(主线)或 ≥ 4.13(部分 LTS 发行版 backport);bbr2则需 ≥ 5.18 或特定厂商内核。
检查关键 TCP 特性开关与参数状态
许多 TCP 行为由运行时参数控制,它们反映内核是否具备对应功能模块:
-
sysctl net.ipv4.tcp_sack:值为
1表示启用选择性确认(SACK),几乎所有 2.4+ 内核默认开启; -
sysctl net.ipv4.tcp_timestamps:值为
1表示启用时间戳(用于 RTT 测量和 PAWS),Linux 2.6.27+ 默认启用; -
sysctl net.ipv4.tcp_fastopen:值为
3表示客户端和服务端均启用 TFO,需内核 ≥ 3.7 编译支持,且应用层配合; - sysctl net.ipv4.tcp_ecn:显式拥塞通知(ECN)开关,内核 ≥ 2.6.24 支持,但需网络设备协同生效。
验证内核编译时是否启用特定 TCP 功能
某些高级特性(如 TCP Fast Open、BBR)需在内核配置中显式开启。可通过以下方式确认:
- 查看当前内核配置:zcat /proc/config.gz 2>/dev/null | grep -i "tcp\|fastopen\|bbr"(需内核启用
CONFIG_IKCONFIG_PROC); - 若无
/proc/config.gz,可查发行版文档或运行 modinfo tcp_bbr(若模块存在,说明 BBR 已编译进内核或作为模块加载); - 对 Ubuntu/Debian,可用 apt list --installed | grep linux-image 结合内核 ABI 号查询官方支持矩阵;对 RHEL/CentOS,参考红帽知识库中对应 kernel-version 的 release notes。


















