程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

【计算机网络—TCP篇】TCP Fast Open(TFO):提高TCP性能的神器

balukai 2025-02-03 11:21:34 文章精选 8 ℃

为什么会提出TCP Fast Open(TFO)?

在传统的TCP连接建立过程中,客户端首先发送一个SYN包给服务器,服务器回复一个SYN-ACK包,然后客户端再回复一个ACK包,这样就完成了三次握手,建立了TCP连接。这种方式的缺点在于,连接建立的时间取决于RTT(Round-Trip Time,往返时间),在网络延迟较大的情况下,建立连接的时间就会较长。

TFO的目的就是为了加速TCP连接建立的过程,允许客户端在发送SYN包时,就将应用层数据一并发送给服务器,服务器收到后就可以立即开始处理数据,而不必等待客户端再发送ACK包。这样就可以减少一次RTT的时间,加快连接建立的速度。

如何开启TFO?

首先我们看看TCP的头部格式:

其中选项这个属性包含了许多种提高TCP性能的方法,我们今天要说的TFO也是在这个地方开启。先看看选项包含了哪些功能:

也就是说,要开启TFO功能,客户端发送的TCP包需要启用选项功能。

开启TFO之后是如何建立链接的?

在客户端首次建立连接时的过程:

  1. 客户端发送 SYN 报文,该报文需要启动Options,且包含 Fast Open 选项,该选项的 Cookie 为,这表明客户端请求开启TFO。
  2. 支持 TCP Fast Open 的服务器生成 Cookie,并将其置于 SYN-ACK 数据包中的 Fast Open 选项以发回客户端。
  3. 客户端收到 SYN-ACK 后,本地缓存 Fast Open 选项中的 Cookie。

第一次发起请求的时候,需要正常的三次握手流程。

之后客户端再次向服务器建立连接时的过程:

  1. 客户端发送 SYN 报文,该报文可以包含应用层数据以及首次建立链接时缓存记录的 Cookie
  2. 服务器收到 SYN 报文后,会校验 Cookie 的有效性:如果有效,服务器会在 SYN-ACK 报文中确认 SYN 和数据,并将数据递送至相应的应用程序;如果无效,服务器将丢弃 SYN 报文中包含的数据,并仅在 SYN-ACK 报文中确认 SYN。
  3. 如果服务器接受了 SYN 报文中的数据,则可以在握手完成之前发送数据,从而减少一个 RTT 的时间。
  4. 客户端会发送 ACK 报文来确认服务器发回的 SYN 和数据,如果数据未被确认,则客户端会重新发送数据。
  5. 随后,TCP 连接的数据传输过程就和正常情况下的 TFO 一致。

风险

TFO的建立连接的过程比传统的三次握手快,因为减少了一次RTT的时间。但是,TFO还存在一些风险,如服务器端开启TFO后,在收到SYN包时就开始处理应用层数据,如果客户端发送的数据是恶意数据,服务器就会受到攻击。为了防止这种情况的发生,TFO还有一些额外的安全机制,比如Cookie机制,来确保连接的安全性

Tags:

最近发表
标签列表