ECN 是什么
ECN(显式拥塞通知)让路由器在队列快要满时,直接在 IP 头里标记一下,而不是等到必须丢弃报文。接收端看到标记后通过 TCP 标志位回显给发送端,发送端据此降速并确认。这样拥塞信号能在丢包之前就传达出去,避免了「靠丢包发现拥塞」带来的时延尖峰与吞吐波动,在数据中心这类对时延敏感的环境里价值尤其明显。
基本信息
| 承载位置 | IP 头的流量类别字段低两位 |
|---|---|
| 取值含义 | 不支持、两种可标记状态、已发生拥塞 |
| 端到端协商 | 通过 TCP 的 ECE 与 CWR 标志完成 |
| 内核开关 | net.ipv4.tcp_ecn |
| 常见场景 | 数据中心内部普遍启用 |
| 相关算法 | 数据中心拥塞控制算法依赖它工作 |
查看与开关
查看与开关
sysctl net.ipv4.tcp_ecn # 0 关闭 1 开启 2 仅在对端请求时启用
ss -tin state established | head -5 | grep -i ecn
tcpdump -nn -v 'tcp' -c 5 | grep -i ecn # 观察握手标志位中的协商四类标记含义
| 标记 | 含义 | 说明 |
|---|---|---|
| 不支持 | 该报文不参与 ECN 机制 | 传统实现或对端未启用 |
| 可标记一 | 发送方支持 ECN 的第一类标记 | 与可标记二区分不同实验用途 |
| 可标记二 | 发送方支持 ECN 的第二类标记 | 协商成功后的常规标记 |
| 已拥塞 | 路径上的设备报告出现拥塞 | 接收端据此回显给发送端 |
典型使用场景
- 数据中心网络优化:配合相应拥塞控制算法降低时延与队列堆积
- 排查吞吐异常:确认链路上是否有设备剥掉标记破坏协商
- 内核参数审查:核对开关取值是否符合当前网络环境
- 新设备上线验证:确认中间的负载均衡与防火墙对标记位处理正确
- 评估拥塞控制改造:先确认端到端 ECN 能力再决定算法选型
ECN 需要端到端配合:只要链路上有设备改动或丢弃标记位,协商就会失败或退化。排查此类问题的可靠办法是在两端同时抓包对比同一连接的标志位,看标记是否在中间段丢失或被改写,而不是只看单侧的内核参数。