首页/系统/Linux 内核与性能调优速查/net.ipv4.tcp_ecn 显式拥塞通知
sysctl 内核参数72 条

net.ipv4.tcp_ecn 显式拥塞通知

ECN 协商:0 关闭、1 主动启用、2 仅在对端请求时启用(现代默认);用标记代替丢包传递拥塞信号。

ECN 显式拥塞通知

ECN 用 IP 头部的标记位代替丢包来传递拥塞信号:路径上的设备把拥塞情况标记出来,接收方通过 TCP 头部把标记回传给发送方,发送方据此降速,从而减少丢包与重传。net.ipv4.tcp_ecn 有三个取值:0 关闭、1 主动启用、2 仅在对端请求时启用(现代内核默认)。它需要端到端链路上各环节配合,中间设备处理异常时收益会被打折甚至转负。

基本信息

参数名net.ipv4.tcp_ecn
取值0 关闭,1 启用,2 仅按需(默认)
相关参数net.ipv4.tcp_ecn_fallback 控制协商失败时是否回退
协议依据RFC 3168
作用用标记代替丢包传递拥塞信号,减少重传与排队

典型使用场景

  • 数据中心内网希望降低重传,评估 ECN 的端到端收益
  • 排查「开启后吞吐反而下降」的设备兼容问题
  • 与数据中心拥塞控制算法配合使用
  • 与拥塞算法一起做端到端行为评估
  • 统一容器与虚拟化基线时确认该开关取值

查看与观测

查看与观测
sysctl net.ipv4.tcp_ecn net.ipv4.tcp_ecn_fallback
sysctl -w net.ipv4.tcp_ecn=1
ss -tin state established | head -20        # 观察连接上的 ECN 标记
nstat -az | grep -i ecn | head -20          # TCPExt 中的 ECN 相关计数
sysctl net.ipv4.tcp_congestion_control      # 拥塞算法决定如何响应信号
iproute2 -V 2>/dev/null || true             # 确认相关工具可用,便于抓包验证

取值与适用场景

取值行为适用场景
0不协商 ECN链路中存在处理异常的历史设备时的保守选择
1主动请求启用内网环境明确支持时使用
2仅在对端请求时启用多数发行版的默认值,属于折中方案
ECN 需要端到端支持才有收益:链路上任一设备不支持或处理异常,效果都会打折扣,观测不到收益不等于参数没生效。
容器与宿主共享网络命名空间时,该设置的影响范围会扩大到宿主及其他容器,变更前先确认作用域。

易错点

  • 以为开启就一定更快:收益依赖整条链路,中间设备异常时可能适得其反
  • 观测不到收益就断定未生效:应看连接标记与统计计数,而不是只看吞吐数字
  • 在共享网络命名空间的容器里调整:会连带影响宿主与其他容器
  • 把 ECN 与拥塞算法混为一谈:一个负责传递信号,一个负责如何响应,属于不同层次
  • 忽略回退参数:协商失败时的行为由 tcp_ecn_fallback 决定,需要一并核对

数据来源与参考

  • RFC 3168(ECN)
  • Linux 内核 Documentation/networking/ip-sysctl.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌