HTTP 3.0彻底放弃TCP,TCP到底做错了什么?

      最后更新:2022-08-02 15:47:51 手机定位技术交流文章

      ecb127eb611cc93adf08506045187acd.jpeg

      作者L·霍利斯

      资料来源: Hollis (ID: Hollischuang)

      2d0086260e47112d099f9dab15c9e736.png

      从HTTP/1到HTTP/2,不管应用程序层协议如何改进,TCP一直是HTTP协议的基础,主要是因为它提供了可靠的连接。

      然而,从HTTP3开始,情况发生了变化。

      因为,在最新版本的HTTP 3.In 0中,TCP协议已经完全丢弃。

      TCP队头阻塞

      我们知道,TCP传输过程中会把数据拆分为一个个**按照顺序**排列的数据包,这些数据包通过网络传输到了接收端,接收端再**按照顺序**将这些数据包组合成原始数据,这样就完成了数据传输。

      但是如果其中的某一个数据包没有按照顺序到达,接收端会一直保持连接等待数据包返回,这时候就会阻塞后续请求。这就发生了**TCP队头阻塞。**

      HTTP/1.1的管道化持久连接也是使得同一个TCP链接可以被多个HTTP使用,但是HTTP/1.1中规定一个域名可以有6个TCP连接。而HTTP/2中,同一个域名只是用一个TCP连接。

      所以,在HTTP/2中,TCP队头阻塞造成的影响会更大,因为HTTP/2的多路复用技术使得多个请求其实是基于同一个TCP连接的,那如果某一个请求造成了TCP队头阻塞,那么多个请求都会受到影响。

      TCP握手时长

      我们都知道,TCP的可靠连接是基于三个握手和四个握手,但问题是握手需要时间。

      三手的TCP过程需要三个客户端与服务器之间的交互,这意味着额外的消耗1.5 RTT。

      > RTT:网络延迟(Round Trip Time)。他是指一个请求从客户端浏览器发送一个请求数据包到服务器,再从服务器得到响应数据包的这段时间。RTT 是反映网络性能的一个重要指标。

      在客户端和服务端距离比较远的情况下,如果一个RTT达到300-400ms,那么我握手过程就会显得很”慢”了。

      升级TCP

      基于上面我们提到的两个问题,有人提出来说:既然TCP存在这些问题,并且我们也知道这些问题的存在,甚至解决方案也不难想到,为什么不能对协议本身做一次升级,解决这些问题呢?

      事实上,这涉及到“锁定协议”的问题。

      因此,当我们在互联网上浏览数据时,数据传输的过程实际上非常复杂。

      正如我们所知,家庭使用网络的先决条件有几个:首先,我们需要通过运营商打开网络,我们需要使用路由器,路由器是网络传输过程中的中间设备。

      中间设备是指插入在数据终端和信号转换设备之间,完成调制前或解调后某些附加功能的辅助设备。例如集线器、交换机和无线接入点、路由器、安全解调器、通信服务器等都是中间设备。

      在我们无法看到的地方,有如此多的中间设备,网络需要通过无数的中间设备才能到达最终用户。

      如果TCP协议需要升级,那么意味着需要这些中间设备都能支持新的特性,我们知道路由器我们可以重新换一个,但是其他的那些中间设备呢?尤其是那些比较大型的设备呢?更换起来的成本是巨大的。

      除了中间设备之外,操作系统也是一个重要因素,因为TCP协议需要通过操作系统内核实现,并且操作系统的更新很晚。

      因此,这一问题被称为“中间设备僵化”,也是“合同僵化”的一个重要原因,也是限制TCP协议更新的重要原因。

      因此,近年来,由于缺乏广泛的支持,许多由IETF标准化的TCP功能没有被广泛部署或使用!

      QUIC

      所以,把它放在HTTP/3上。 只有一条前进的道路,那就是放弃TCP。

      于是,HTTP/3.0在基于UDP+迪菲赫尔曼算法(Diffie–Hellman)之上实现了QUIC协议(Quick UDP Internet Connections)。

      QUIC协议具有以下特点:

      基于UDP的传输层协议:它使用UDP端口编号来识别指定机器上的特定服务器。

      可靠性:虽然UDP是不可靠传输协议,但是QUIC在UDP的基础上做了些改造,使得他提供了和TCP类似的可靠性。它提供了数据包重传、拥塞控制、调整传输节奏以及其他一些TCP中存在的特性。

      实现无序、同时的节点流:QIC的单一数据流可以保证有序的交付,但可能在多个数据流之间发生混乱,这意味着单一数据流的传输是订购的,但接收者在多个数据流中接收的订单可能与发送者发送的订单不同!

      快速握手:QUIC提供0-RTT和1-RTT连接

      使用TLS 1.3 传输层安全协议:与以前的TLS版本相比,TLS 1 具有许多优点,但使用它的主要原因是它花费较少的时间来往,从而减少协议的延迟。

      阻碍

      此外,我们介绍了QIC与TCP相比的许多优点,可以说,该协议与TCP相比确实更好。

      因为他是基于UDP的,并没有改变UDP协议本身,只是做了一些增强,虽然可以避开中间设备僵化的问题,但是,在推广上面也不是完全没有问题的。

      首先,很多企业、运营商和组织对53端口(DNS)以外的UDP流量会进行拦截或者限流,因为这些流量近来常被滥用于攻击。

      特别是, 一些 现有 的 UDP 协议 和 扩充 攻击 威胁 的 实施 使 攻击者 能够 控制 无辜 的 宿主, 向 受害者 发送 大量 的 交通 。

      因此,基于UDP的QUIC协议可以从传输中屏蔽。

      此外,由于UDP一直不能可靠地定位连接,所以有许多中间设备对其的支持和优化水平并不高,因此有可能丢失数据包..

      但无论如何,HTTP/3.0的时代将到来,而TCP的时代将被完全的QC协议所取代,所以让我们等一下。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31301.html

          热门文章

          文章分类