首页/网络/协议速查/Nagle 算法与延迟确认的 40ms 坑
本包目录(405 条)
HTTP 方法与状态码91 条HTTP 头与缓存70 条DNS 与域名解析60 条
TCP 与 UDP54 条
TLS 与加密50 条IP 与 ICMP37 条邮件与文件传输43 条

Nagle 算法与延迟确认的 40ms 坑

Nagle 等「一个未确认小包」发出前的攒批,与接收侧延迟 ACK(最多 40ms)叠加时,会产生经典的 40ms 延迟尖刺。

协议速查网络更新于 2026-10-12
Nagle发送方:最多一个未被确认的小包在路上,其余攒批
延迟 ACK接收方:不急着重传 ACK,最多等 ~40ms 搭车发送
组合问题写-写-读模式:第二小包被 Nagle 压住,等待延迟 ACK → 40ms 卡顿

关闭 Nagle(Python 示例)

关闭 Nagle(Python 示例)
import socket
s = socket.create_connection(("api.example.com", 80))
s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
低延迟场景(交易/游戏/RPC)通常直接 TCP_NODELAY;批量吞吐场景保留 Nagle 更省包。

易错点

  • 关掉 Nagle 后小包变多,PPS 上升可能触发云厂商带宽/包量计费与限速,要一并评估

数据来源与参考

  • RFC 896(Nagle 算法)
  • RFC 9293 §3.7.4

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌