HTTP 2.0 - 1 个 TCP/IP 连接与 6 个并行

Posted

技术标签:

【中文标题】HTTP 2.0 - 1 个 TCP/IP 连接与 6 个并行【英文标题】:HTTP 2.0 - one TCP/IP connections vs 6 parallel 【发布时间】:2017-12-05 11:10:00 【问题描述】:

据说 HTTP 2 相对于 HTTP 1 的优势之一是 HTTP2 具有数据流。在一个 TCP/IP 连接中最多可以有 256 个不同的流。但是,在 HTTP 1 中最多可以有 6 个并行连接。 HTTP 2 能够从 256 个资源中读取数据是一项改进,但我仍然认为 6 个连接(在 HTTP 1 中)比一个 TCP/IP 连接(在 HTTP 2 中)具有更好的吞吐量。不过,HTTP2 被认为比 HTTP 1 更快。所以...我理解不正确的是什么?

【问题讨论】:

为什么你认为 6 个连接的吞吐量比 1 个更好? 因为如果我假设所有连接的速度是相等的,那么 6 个连接同时传递的信息比一个连接多。 它们仍然可能是并行的,但每个连接都有其开销,而不是 http/2 中只有一个 好的。但开销只是建立连接后。 【参考方案1】:

在其他条件相同的情况下,6 个物理连接的吞吐量将高于 1 个物理连接。

但是,这不适用于同一台计算机之间的 6 个不同的 TCP/IP 连接,因为这些是虚拟连接(假设您没有两个网卡)。限制因素通常是您的 Internet 连接的延迟和带宽,而不是 TCP/IP 协议本身。

事实上,由于创建和处理 TCP 连接的方式,拥有一个 TCP/IP 连接实际上要高效得多。这是因为初始连接的成本(三向 TCP 握手、HTTPS 握手以及 TCP 连接使用称为慢启动的过程来缓慢地将其容量建立到网络可以处理的最大速度),但也在连接的持续维护中(因为慢启动过程会定期再次发生,除非连接一直被充分利用 - 这更有可能发生在一个用于所有事情的连接上,而不是在您的请求时发生分为 6 个连接)。

此外,HTTP/1.1 一次只允许一个请求,因此在返回响应之前无法使用连接(忽略 HTTP/1.1 中根本不支持的流水线)。这不仅限制了 6 个连接的有用性,而且还意味着连接更有可能未被充分利用,考虑到上面提到的 TCP 中未充分利用的连接的问题,这意味着它们可能会变慢,因为它们会节流并具有再次经历慢启动过程以建立最大容量。然而,HTTP/2 允许这 256 个流允许请求同时进行。这比只有 6 个连接更好,并且允许 true multiplexing。

如果您想了解更多信息,那么 Ilya Grigorik 就该主题撰写了一本出色的书,名为 High Performance Browser Networking which is even available online for free。

【讨论】:

以上是关于HTTP 2.0 - 1 个 TCP/IP 连接与 6 个并行的主要内容,如果未能解决你的问题,请参考以下文章

不得不知的TCP/IP与HTTP

一次完整的HTTP请求所经历的7个步骤

面试知识点——计算机网络

HTTP一次请求的过程

一次完整的HTTP请求所经历的7个步骤

TCP/IP,http,socket,长连接,短连接 总结