跳到主要内容

9. TCP Fast Open

本节为非规范性内容.

TCP Fast Open (TFO) [RFC7413] 允许在 SYN 包中携带数据, 从而降低重新打开 TCP 连接的开销. 与标准 TCP 相比, 它还最多可以节省一个 RTT.

TFO 通过使用服务器提供的 cookie, 缓解在 SYN 中发送数据所固有的安全漏洞, 尤其是在 DNS 这类可能发生放大攻击的系统中. TFO 客户端在新连接开始时的初始 SYN 包中请求服务器 cookie. 服务器在其 SYN-ACK 中返回 cookie. 客户端缓存该 cookie, 并在随后打开到同一服务器的连接时重用它.

该 cookie 由客户端的 TCP 栈 (内核) 存储, 即使客户端或服务器进程重启也会保留. TFO 也可以平滑回退到常规 TCP 握手.

利用 IP 任播 (IP anycast) [RFC4786] 的 DNS 服务在启用 TFO 时可能需要采取额外步骤. 引自 [RFC7413]:

接受发往同一服务器 IP 地址的连接请求的负载均衡器后端服务器应使用相同密钥, 以便它们针对特定客户端 IP 地址生成相同的 Fast Open cookie. 否则, 客户端可能在不同连接中获得不同 cookie; 其 Fast Open 尝试将回退到常规 3WHS.

当 DNS over TCP 作为 DNS 私密交换的传输方式时, 例如 [DNS-over-TLS] 中的情形, 实现者需要了解 TFO, 并确保需要保护的数据 (例如 DNS 查询数据) 不会意外地以明文传输. 相关讨论见 [DNS-over-TLS].