HTTP2 奇思妙想

2019-03-05 12:01:35 +08:00
 wysnylc
  1. http2 有并发。它支持多路复用,并行双向字节流的请求和响应,它以“流”的形式在客户端和服务器间独立的双向的交换的帧序列。流具有一些重要的特性:

虽然只有一个 TCP 连接,却能够在这个连接同时处理客户端和服务端的多个数据传输。

  1. HTTP2 只有一个 TCP 连接,它并不像 http1.1 中的 TCP 连接一样,在处理当前传输数据后就关闭,而是一直连通的,客户端和服务端可以通过它持续往返传输数据。这个 TCP 流的传输通道,是可以被任何一端给关闭的。

按照以上所述,HTTP2 是用 UDP 实现的 TCP 实现了 UDP?我的想法是对的吗?

2032 次点击
所在节点    问与答
13 条回复
514146235
2019-03-05 12:20:19 +08:00
当然不对啊,udp 根本不需要建立连接,就是无脑直接发,到没到根本不管。所以才会说 udp 是不可靠协议,但是因为没有握手的过程,从而 udp 通常表现的比 tcp 协议更快。
wysnylc
2019-03-05 12:25:08 +08:00
@514146235 #1 感谢回答,但是你有点偏题.其实我想说的的是多路复用的帧是无序发送和 UDP 发包也是无序到达是一个概念
rrfeng
2019-03-05 12:46:32 +08:00
一点都不是。
lhx2008
2019-03-05 12:55:16 +08:00
不是,TCP 本来就是流,在流上发包很正常,基本上所有 TCP 协议都是流上发包,至于无序到达,HTTP/2 的意思应该是来自不同服务器的包可以无序到达,没说来自同一个服务器的包可以无序。
msg7086
2019-03-05 12:59:11 +08:00
可以说是把 TCP 链路给 UDP 化了。但是也不完全是 UDP 化,因为上层只管乱序,不管丢包重发。
以后 HTTP/3 可能就要全面 UDP 了。

另外,TCP 并不是 UDP 实现的。
orangeade
2019-03-05 13:10:25 +08:00
你说的是 HTTP/3 HTTP/2 还是有 TCP 的队头阻塞的
gamexg
2019-03-05 13:55:23 +08:00
不是,
http2 还是基于 tcp 的,建简易理解可以认为底层 tcp 连接里面都是这样的包

流 id | 流数据

接受方根据 流 id 重组为多个子流就实现了单连接多路复用。当然实际不是这样简单,还有一些其他细节。
wysnylc
2019-03-05 16:43:53 +08:00
@msg7086 #5 之前一直以为 TCP 是基于 UDP 实现的,原来两个是同级别的. http2 的确像 udp 的模式啊~
wysnylc
2019-03-05 16:44:55 +08:00
@gamexg #7 就多路复用会导致流无序达到,这和 UDP 很像呀
gamexg
2019-03-05 16:47:54 +08:00
@wysnylc #9 不会无序到达,tcp 协议可以保证发送什么顺序接收时就是什么顺序。
那么每个 “流 id + 数据 ” 就会按照发送的顺序到达接收端,不会出现无序的情况。
mritd
2019-03-05 17:57:14 +08:00
首先声明,利益无关,今天 Harbor 群里看到的,刚看完推荐楼主看一下 https://mp.weixin.qq.com/s/bD8C0oR34ZKUEZjN9yBSJg
wysnylc
2019-03-05 18:44:06 +08:00
@gamexg #10 发送无序,接受有序是因为服务端会根据"流 id"在缓存区重排
wysnylc
2019-03-05 18:53:23 +08:00
@mritd #11 看完了,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/541251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX