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

In HTTP/2, What's the relationship between req/resp, frame and TCP packet?

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

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

我说的对吗?

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

  • 要点是单个 TCP 连接 可能包含来自许多不同 HTTP/2 流的帧,交错。与 TCP packets 的关系在这里并不重要 - TCP 数据包由您的 TCP 堆栈重新组装成 TCP 流,应该与您对 HTTP/2.[=25 的理解无关=]
  • 第一点之所以重要,是因为它比 HTTP/1 向前迈出了一大步,在 HTTP/1 中,任何给定的 request/response 对的 TCP 流都是 "blocked",因为对当前请求的响应必须在任何其他请求之前发送。这就是解除HTTP/1.
  • 巨大瓶颈的多路复用特性
  • 请求或响应称为消息,是的,它由一个或多个帧组成。
  • 没有物理 HTTP/2 stream 就像没有物理 TCP 流一样 - 它是由层处理的更高级别 concept/abstraction问题,它将单独的数据包或帧重新组合成一个流,这使得它更容易处理。

希望对您有所帮助。