在HTTP/2中,req/resp、frame和TCP数据包之间有什么关系?

lai*_*e9m 5 tcp http http2

在此输入图像描述

图片来自https://hpbn.co/http2/#streams-messages-and-frames

我想确保我真正理解发生了什么,所以这是我的理解:

  • 一个TCP数据包可能包含多个帧,并且它们可以属于不同的流。
  • 请求或响应由属于同一流的一个或多个帧组成。
  • 物理上不存在“流”,它只是一个逻辑概念(是的,我知道每个帧都包含一个流 ID)。

我对么?

e.d*_*dan 5

我相信你说的一切都是正确的,但我想澄清一下:

  • 要点是单个 TCP连接可能包含来自许多不同 HTTP/2 流的交错帧。与 TCP数据包的关系在这里并不重要 - TCP 数据包由 TCP 堆栈重新组装成 TCP 流,并且不应该影响您对 HTTP/2 的理解。
  • 第一点之所以重要,是因为它比 HTTP/1 向前迈出了一大步,在 HTTP/1 中,TCP 流会被任何给定的请求/响应对“阻塞”,因为对当前请求的响应必须在任何给定的请求/响应对之前发送。其他的。这就是解除 HTTP/1 巨大瓶颈的多路复用特性。
  • 请求或响应称为消息,是的,它由一个或多个帧组成。
  • 没有物理 HTTP/2流,就像没有物理 TCP 流一样 - 这是一个更高级别的概念/抽象,由相关层处理,它将各个数据包或帧重新组装成一个流,这使得处理变得更加容易和。

希望有帮助。