打印
[开发资料]

TCP 快速打开的原理(TFO)

[复制链接]
505|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

TCP有 三次握手,可能有人会说,每次都三次握手好麻烦呀!能不能优化一点?

可以啊。今天来说说这个优化后的 TCP 握手流程,也就是 TCP 快速打开(TCP Fast Open, 即TFO)的原理。

优化的过程是这样的,还记得我们说 SYN Flood 攻击时提到的 SYN Cookie 吗?这个 Cookie 可不是浏览器的Cookie, 用它同样可以实现 TFO。

TFO 流程
首轮三次握手
首先客户端发送SYN给服务端,服务端接收到。

注意哦!现在服务端不是立刻回复 SYN + ACK,而是通过计算得到一个SYN Cookie, 将这个Cookie放到 TCP 报文的 Fast Open选项中,然后才给客户端返回。

客户端拿到这个 Cookie 的值缓存下来。后面正常完成三次握手。

首轮三次握手就是这样的流程。而后面的三次握手就不一样啦!

后面的三次握手
在后面的三次握手中,客户端会将之前缓存的 Cookie、SYN 和HTTP请求(是的,你没看错)发送给服务端,服务端验证了 Cookie 的合法性,如果不合法直接丢弃;如果是合法的,那么就正常返回SYN + ACK。

重点来了,现在服务端能向客户端发 HTTP 响应了!这是最显著的改变,三次握手还没建立,仅仅验证了 Cookie 的合法性,就可以返回 HTTP 响应了。

当然,客户端的ACK还得正常传过来,不然怎么叫三次握手嘛。

流程如下:


注意: 客户端最后握手的 ACK 不一定要等到服务端的 HTTP 响应到达才发送,两个过程没有任何关系。

TFO 的优势
TFO 的优势并不在与首轮三次握手,而在于后面的握手,在拿到客户端的 Cookie 并验证通过以后,可以直接返回 HTTP 响应,充分利用了1 个RTT(Round-Trip Time,往返时延)的时间提前进行数据传输,积累起来还是一个比较大的优势。

使用特权

评论回复
沙发
daichaodai| | 2024-6-12 07:35 | 只看该作者
学习了,对于协议还是要深入了解原理和机制。

使用特权

评论回复
板凳
AdaMaYun| | 2024-6-13 19:58 | 只看该作者
TCP握手机制还是非常有助于通讯的稳定

使用特权

评论回复
地板
OKAKAKO| | 2024-6-21 21:27 | 只看该作者
TCP 快速打开(TCP Fast Open, 即TFO)的原理就是减少确认环节容易发生故障

使用特权

评论回复
5
中国龙芯CDX| | 2024-6-26 15:53 | 只看该作者
三次握手还没建立,仅仅验证了 Cookie 的合法性,就可以返回 HTTP 响应了。

使用特权

评论回复
6
jf101| | 2024-6-27 16:35 | 只看该作者
现在服务端不是立刻回复 SYN + ACK,而是通过计算得到一个SYN Cookie, 将这个Cookie放到 TCP 报文的 Fast Open选项中,然后才给客户端返回

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

174

主题

1628

帖子

0

粉丝