首页/网络/协议速查/TCP Fast Open(TFO)
TCP 与 UDP54 条

TCP Fast Open(TFO)

TFO 允许在 SYN 携带数据(客户端)并在 SYN+ACK 返回数据(服务端),省掉一个 RTT;依赖 TFO cookie 防滥用,中间设备兼容性一般。

协议速查网络更新于 2026-10-13

TCP Fast Open 是什么

TCP Fast Open 允许客户端在握手第一个报文里就带上应用数据,服务端也可以在第二个报文里就带回数据,从而省掉一个往返。它靠一个由服务端签发的令牌防止被滥用:首次连接只拿令牌不带数据,之后带着令牌的连接才能提前发送。收益在短连接与新建连接场景最明显,但对中间设备的兼容性要求较高,遇到不支持的链路需要能自动回退到普通握手。

基本信息

作用在握手中提前携带数据,节省往返
安全机制服务端签发令牌,客户端之后携带使用
内核开关net.ipv4.tcp_fastopen,位掩码控制
位含义1 为客户端启用,2 为服务端启用,相加即两者都开
应用层开关部分服务端软件需在监听配置里显式开启
兼容性中间设备不支持时需回退普通握手

启停与验证

启停与验证
sysctl net.ipv4.tcp_fastopen          # 1 客户端 2 服务端 3 两者
ss -ti state established | head -3     # 看连接细节
curl --tcp-fastopen -s -o /dev/null -w '%{time_connect}\n' https://example.com
# 服务端软件侧需显式开启,例如 nginx 在 listen 指令上配置 fastopen 参数

开关含义

取值含义适用场景
1仅客户端启用主动出站较多的机器
2仅服务端启用接收连接的服务节点
3客户端与服务端都启用两端自控、链路可信的环境

典型使用场景

  • 短连接密集型服务:每次请求都新建连接,省一个往返收益明显
  • 移动网络与高时延链路:往返成本更高,提前发送数据的价值更大
  • 配合加密握手:让客户端问候随首个报文一起到达
  • 性能专项优化:在受控链路上评估实际收益后再决定是否全量开启
  • 排障:确认连接随机失败是否由中间设备丢弃带数据的握手报文引起
该机制是可选优化,不开启也能正常工作。真正需要留意的是开启之后的行为变化:中间设备丢弃带数据的握手报文时,必须能顺利回退;否则会表现为「部分客户端连接随机失败」,而两端服务本身看不出异常。评估时应先在灰度链路观察失败率再扩大范围。

易错点

  • 部分防火墙丢弃带数据的握手报文,未回退时表现为随机连接失败
  • 只开内核开关而不开服务端软件的监听选项,误以为已经生效
  • 把位掩码取值记错,实际只开了单侧,收益与预期不符
  • 在链路不可控的公网环境全量开启,把偶发失败引入生产
  • 拿单次测量结果判断收益,忽略时延波动与首次连接不含数据的事实

数据来源与参考

  • RFC 7413(TFO)
  • Linux 内核文档

相关工具

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