http3 不再应用 tcp 协定的起因
上一篇文章整顿了 http0.9-http3 的整个变动过程,然而说的不是很具体。比方浏览器是如何利用 http1.1 的,多个申请如何解决?http2 到 http3 的底层协定特点以及对应的扭转背景都没有说分明。
明天就专门针对 http3 不再应用底层的 tcp 协定这个问题作为引子,具体论述下对应的扭转起因。
首先说咱们常常提到的 TCP 协定 :
TCP 协定通过数据分片、达到确认、超时重发、滑动窗口、失序解决、反复解决、数据校验等规定,为应用 TCP 连贯的单方提供一个面向连贯、牢靠的字节流服务。
然而 TCP 连贯这个概念还是比拟形象。
咱们能够这么了解,电话两端有两个接线员,电话之间通过电话线进行连贯。在正式通话时,电话员 A 向接线员 B 拨号并说了这么一句话:有人吗?接线员 B 回了一句:我在!接线员 A 又说道:ok 我晓得了。这相当于 TCP 连贯建设时的三次握手,用来确定单方状态。之后两边电话员就能够失常你来我往的通话了。
同时为了防止两个人的沟通内容有缺失等问题,两边还规定了如何交换,信号中断了如何解决等等。
TCP 断开时则须要进行四次挥手过程,这个就没必要细说了。至于为什么是前三后四,这是因为校验太多了也没用,所以就采取了起码验证次数。
接下来聊聊 UDP 协定 :
咱们要晓得,它最大的特点是无连贯。也就是信息在传输数据之前不须要建设连贯,当想要发送数据时,就把数据包尽可能快地扔到网络上,至于收没收到,就不论了(尽管这很重要)
那么,既然 UDP 协定这么不牢靠,HTTP3 为何还要应用 UDP 协定?
咱们在上一篇文章中也讲到了 HTTP2 的一些问题,其中基于 TCP 协定的 HTTP 协定永远无奈解决队头阻塞的问题,这样的话,数据传输速度无奈进一步放慢。
HTTP3 是基于 UDP 协定的,它同时还做了一些其余解决,比方减少数据包重传、拥塞控、调整传输节奏等等。其其核心思想是将 TCP 协定在内核实现的诸如牢靠传输、流量管制、拥塞管制等性能转移到用户态来实现,同时在加密传输方向的尝试也推动了 TLS1.3 的倒退。
至于说 http3 的毛病,那就是后话了,等五年后有趣味了我再来补充!