在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数据包可能包含多个帧,它们可以属于不同的流。
- 请求或响应由属于同一流的一个或多个帧组成。
- 物理上没有 "stream",这只是一个逻辑概念(是的,我知道每个帧都包含一个流 ID)。
我说的对吗?
我相信你说的一切都是正确的,但我要澄清一下:
- 要点是单个 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问题,它将单独的数据包或帧重新组合成一个流,这使得它更容易处理。
希望对您有所帮助。
图片来自https://hpbn.co/http2/#streams-messages-and-frames。
我想确保我真正理解发生了什么,所以这是我的理解:
- 一个TCP数据包可能包含多个帧,它们可以属于不同的流。
- 请求或响应由属于同一流的一个或多个帧组成。
- 物理上没有 "stream",这只是一个逻辑概念(是的,我知道每个帧都包含一个流 ID)。
我说的对吗?
我相信你说的一切都是正确的,但我要澄清一下:
- 要点是单个 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问题,它将单独的数据包或帧重新组合成一个流,这使得它更容易处理。
希望对您有所帮助。