跳到主要内容

1. 简介 (Introduction)

1.1. 动机 (Motivation)

传统的 TCP 连接建立需要三次握手 (three-way handshake),这在数据传输开始之前引入了至少一个完整的往返时间 (Round-Trip Time, RTT) 延迟。对于许多现代应用程序,特别是 Web 服务和移动应用,这种延迟是显著的性能瓶颈。

典型场景的延迟问题

在传统 TCP 中,客户端必须:

  1. 发送 SYN 包
  2. 等待服务器的 SYN-ACK 响应
  3. 发送 ACK 确认
  4. 最后才能发送应用数据

这意味着应用数据的传输至少需要 1.5 个 RTT(假设服务器在收到 ACK 后立即响应)。

HTTP 短连接的挑战

对于 HTTP 请求-响应模式:

  • 每个新连接都需要完整的三次握手
  • 短连接(例如单次 API 调用)中,握手延迟占总时间的比例很大
  • 在高延迟网络(如移动网络)中,这个问题更加严重

示例延迟计算:

  • 50ms RTT 网络:握手延迟 = 50ms
  • 200ms RTT 网络(跨洋):握手延迟 = 200ms

对于返回小数据的 API 调用,握手延迟可能超过实际数据传输时间。

1.2. 关键概念 (Key Concepts)

TCP Fast Open (TFO) 通过允许在 TCP 握手期间交换数据来解决这个问题。

TFO Cookie 是一种加密 Token,用于验证客户端的身份:

  1. Cookie 请求阶段

    • 客户端在初次连接时请求 TFO Cookie
    • 服务器生成并返回 Cookie(基于客户端 IP 地址加密)
    • 客户端缓存 Cookie 供后续使用
  2. Fast Open 阶段

    • 客户端在 SYN 包中携带 Cookie 和应用数据
    • 服务器验证 Cookie 的有效性
    • 如果验证通过,服务器接受 SYN 数据并可以立即响应

性能提升

使用 TFO 后,数据传输时间线:

  1. 首次连接:客户端发送 SYN(请求 Cookie)
  2. 后续连接:客户端发送 SYN + Cookie + 数据 → 服务器立即处理

延迟减少:节省 1 个完整的 RTT

安全性设计

TFO Cookie 机制提供以下安全保护:

  • 防放大攻击 (Anti-Amplification):限制 SYN 数据包大小
  • 防资源耗尽 (Anti-Resource Exhaustion):Cookie 验证确保客户端身份
  • 向后兼容 (Backward Compatibility):不支持 TFO 的服务器会忽略该选项

术语定义 (Terminology)

根据 RFC 2119 的规定,本文档中的关键词含义如下:

  • MUST(必须):绝对要求
  • SHOULD(应该):强烈建议但在特定情况下可以忽略
  • MAY(可以):完全可选的功能

适用场景 (Use Cases)

TFO 特别适合以下场景:

  • Web 浏览:HTTP/HTTPS 请求
  • API 调用:RESTful API、RPC
  • 移动应用:频繁的短连接请求
  • IoT 设备:周期性数据上报

限制与考量 (Limitations)

使用 TFO 时需要注意:

  • SYN 数据可能会被重传(幂等性要求)
  • 某些网络设备可能干扰 TCP 选项
  • Cookie 有过期时间,需要定期更新

下一章节: 2. 协议概述 (Protocol Overview) 将详细介绍 TFO 的工作流程和消息交换模式。