• 32 | 未来之路:HTTP/3展望


    在前面的两讲里,我们一起学习了 HTTP/2,你也应该看到了 HTTP/2 做出的许多努力,比如头部压缩、二进制分帧、虚拟的“流”与多路复用,性能方面比 HTTP/1 有了很大的提升,“基本上”解决了“队头阻塞”这个“老大难”问题。

    HTTP/2 的“队头阻塞”

    等等,你可能要发出疑问了:为什么说是“基本上”,而不是“完全”解决了呢?

    这是因为 HTTP/2 虽然使用“帧”“流”“多路复用”,没有了“队头阻塞”,但这些手段都是在应用层里,而在下层,也就是 TCP 协议里,还是会发生“队头阻塞”。

    这是怎么回事呢?

    让我们从协议栈的角度来仔细看一下。在 HTTP/2 把多个“请求 - 响应”分解成流,交给 TCP 后,TCP 会再拆成更小的包依次发送(其实在 TCP 里应该叫 segment,也就是“段”)。

    在网络良好的情况下,包可以很快送达目的地。但如果网络质量比较差,像手机上网的时候,就有可能会丢包。而 TCP 为了保证可靠传输,有个特别的“丢包重传”机制,丢失的包必须要等待重新传输确认,其他的包即使已经收到了,也只能放在缓冲区里,上层的应用拿不出来,只能“干着急”。

    我举个简单的例子:

    客户端用 TCP 发送了三个包,但服务器所在的操作系统只收到了后两个包,第一个包丢了。那么内核里的 TCP 协议栈就只能把已经收到的包暂存起来,“停下”等着客户端重传那个丢失的包,这样就又出现了“队头阻塞”。

    由于这种“队头阻塞”是 TCP 协议固有的,所以 HTTP/2 即使设计出再多的“花样”也无法解决。

    Google 在推

  • 相关阅读:
    数仓:Doris在美团的应用实践
    9.MyBatis-Plus
    【Linux】基础IO ——中
    EasyExcel实现文件上传-批量插入 文件下载
    CYEZ 模拟赛 6
    分享15个国家的独特国际商业习俗
    以赛促练-力扣第309场周赛反思
    数学建模 -- 灰色预测模型
    智慧仓储解决方案-最新全套文件
    讲述为什么要学习Adobe XD以及 Adobe XD下载安装
  • 原文地址:https://blog.csdn.net/weixin_36691991/article/details/125545717