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

时间:2016-09-28 06:14:45

标签: http tcp http2

enter image description here

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

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

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

我说错了吗?

1 个答案:

答案 0 :(得分:3)

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

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

希望有所帮助。