摘要

  • TCP Fast Open Cookie 是服务器生成并绑定客户端源 IP 上下文的证据,不是用户凭证或应用请求标识。
  • 有效 TFO 可在三次握手结束前把 SYN 数据交给应用;RFC 7413 同时明确保留早期数据在少数情况下重复交付的风险。
  • 完整执行记录必须把传输序列证据与认证主体、请求身份、去重、提交状态和响应结果连接起来。

快速路径没有带回业务答案

设想客户端把预订或配置变更放在带缓存 Cookie 的 SYN 中。服务器验证 Cookie,缓存数据,通知应用,并在 SYN-ACK 中确认 SYN 和数据。客户端没有收到有用响应,随后在回退或新连接中再次发送同一个逻辑请求。

Cookie 无法告诉应用第二次到达是否重复第一次。TCP 确认也不说明数据库提交已经完成、授权规则已经通过,或业务响应已经到达客户端。传输层可以完全按规范工作,业务结果仍然不确定。

Cookie 真正认证的范围

RFC 7413 把 Cookie 定义为服务器生成的非透明值,其预期构造是认证 SYN 的客户端源 IP 地址,并阻止客户端自行伪造。服务器可接受多个有效 Cookie、编码实现私有信息,并随时让 Cookie 过期。

这一范围有助于抑制伪造源地址造成的资源和放大风险,却不是用户登录认证。IP 地址可能共享、转换或重新分配。有效 Cookie 只表示服务器按当前密钥和策略接受该源 IP 上下文用于 Fast Open,不表示服务器知道载荷由谁发起。

TFO 也不是所有服务的默认能力。应用必须按服务端口明确启用;监听器可以禁用 Fast Open,或在待处理请求超过上限时停止接纳。Cookie 有效、监听器接纳与应用授权是三个独立决定。

早期数据的三种分支

Cookie 有效且监听器允许时,服务器可把 SYN 数据交给应用,并确认 SYN 与数据。Cookie 无效或 TFO 不可用时,服务器丢弃 SYN 数据,只确认 SYN;客户端在握手后用 ACK 重传未确认数据。

中间设备也可能丢弃带载荷或未知选项的 SYN。RFC 7413 建议超时后回退到普通 SYN,其中既不携带数据,也不携带 Fast Open 选项。客户端还会缓存服务器 MSS,因为早期数据在当前 SYN-ACK 宣告 MSS 前就已发送;大小超出时可能需要重传。

因此,“客户端使用了 TFO”并非一个结果。数据可能提前进入应用,也可能被丢弃,或者随后通过普通 TCP 重发。

TCP ACK 到传输层为止

RFC 9293 为每个字节分配序列号,并用累计确认表示 TCP 对端已收到相应序列空间。这是可靠的传输证据,却不是应用提交消息。接收端可以先接纳字节,再由应用检查身份、授权、去重和持久化。

RFC 7413 还提醒,SYN 数据在少数情况下可能多次交付给远端应用。适合早期数据的操作必须容忍这一边界,具备稳定请求 ID、明确去重范围、原子处理和可重新取得的结果。

来源