重学TCP协议(11)TFO(Tcp Fast Open)

594 阅读2分钟

1. TFO

为了改善web应用相应时延,google发布了通过修改TCP协议利用三次握手时进行数据交换的TFO(TCP fast open,RFC 7413)。

TFO允许在TCP握手期间发送和接收初始SYN分组中的数据。如果客户端和服务器都支持TFO功能,则可以减少建立到同一服务器的多个TCP连接的延迟。这是通过在初始TCP握手之后在客户端上存储TFO cookie来实现的。如果客户端稍后重新连接,则此TFO cookie将发送到服务器,从而允许连续的TCP握手跳过一个往返延迟,从而减少延迟。

2. TFO原理

image.png

第一次连接:

  1. 客户端发送SYN数据包,带有Fast open选项并且里面的cookie值是空的
  2. 客户端收到SYN,以后生成Cookie,并且放进ACK+SYN包的fast Open选项里面,发回给客户端
  3. 客户端收到cookie以后就存起来了、

第一次连接断开了,开始第二次连接了:

  1. 客户端发ACK给服务器的时候,把刚刚缓存的cookie也带上,并且把数据也带上了

  2. 服务器校验收到的cookie合法性。如果不合法的话,就把当前的包丢掉,走正常的三次握手。如果合法的话,服务器就给客服端发ACK+SYN并且带上数据包

  3. 客户端发ACK确认给服务器

3. TFO的好处

以两次建立连接和发送请求为例 image.png

第二次请求的时候,TFO可以将请求报文和响应报文,放在前面两次握手的过程中,因此第二次请求中,可以在一个RTT内就能拿到响应数据了