1. TFO
为了改善web应用相应时延,google发布了通过修改TCP协议利用三次握手时进行数据交换的TFO(TCP fast open,RFC 7413)。
TFO允许在TCP握手期间发送和接收初始SYN分组中的数据。如果客户端和服务器都支持TFO功能,则可以减少建立到同一服务器的多个TCP连接的延迟。这是通过在初始TCP握手之后在客户端上存储TFO cookie来实现的。如果客户端稍后重新连接,则此TFO cookie将发送到服务器,从而允许连续的TCP握手跳过一个往返延迟,从而减少延迟。
2. TFO原理
第一次连接:
- 客户端发送SYN数据包,带有Fast open选项并且里面的cookie值是空的
- 客户端收到SYN,以后生成Cookie,并且放进ACK+SYN包的fast Open选项里面,发回给客户端
- 客户端收到cookie以后就存起来了、
第一次连接断开了,开始第二次连接了:
-
客户端发ACK给服务器的时候,把刚刚缓存的cookie也带上,并且把数据也带上了
-
服务器校验收到的cookie合法性。如果不合法的话,就把当前的包丢掉,走正常的三次握手。如果合法的话,服务器就给客服端发ACK+SYN并且带上数据包
-
客户端发ACK确认给服务器
3. TFO的好处
以两次建立连接和发送请求为例
第二次请求的时候,TFO可以将请求报文和响应报文,放在前面两次握手的过程中,因此第二次请求中,可以在一个RTT内就能拿到响应数据了