美文网首页
TCP协议灵魂12问(第六问)

TCP协议灵魂12问(第六问)

作者: Amazing慕丶涵 | 来源:发表于2020-10-20 20:32 被阅读0次

    说说 TCP 快速打开的原理(TFO)

    第一节讲了 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 响应到达才发送,两个过程没有任何关系。

    相关文章

      网友评论

          本文标题:TCP协议灵魂12问(第六问)

          本文链接:https://www.haomeiwen.com/subject/ahbdmktx.html