HTTP 3.0为何要彻底放弃TCP呢?

从http/1.0开始,一直到http/2,不管应用层协议如何改进,tcp一直以来都是http协议的基础,主要是因为他能提供可靠连接。
但是,从http 3.0开始,这个情况就有所变化了。
因为,在最新推出的http 3.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.0面前的就只有一条路,那就是放弃tcp。
于是,http/3.0在基于udp+迪菲赫尔曼算法(diffie–hellman)之上实现了quic协议(quick udp internet connections)。
quic协议有以下特点:
基于udp的传输层协议:它使用udp端口号来识别指定机器上的特定服务器。
可靠性:虽然udp是不可靠传输协议,但是quic在udp的基础上做了些改造,使得他提供了和tcp类似的可靠性。它提供了数据包重传、拥塞控制、调整传输节奏以及其他一些tcp中存在的特性。
实现了无序、并发字节流:quic的单个数据流可以保证有序交付,但多个数据流之间可能乱序,这意味着单个数据流的传输是按序的,但是多个数据流中接收方收到的顺序可能与发送方的发送顺序不同!
快速握手:quic提供0-rtt和1-rtt的连接建立
使用tls 1.3传输层安全协议:与更早的tls版本相比,tls 1.3有着很多优点,但使用它的最主要原因是其握手所花费的往返次数更低,从而能降低协议的延迟。
阻碍
以上,我们介绍了很多quic的相比较于tcp的优点,可以说这种协议相比较于tcp确实要优秀一些。
因为他是基于udp的,并没有改变udp协议本身,只是做了一些增强,虽然可以避开中间设备僵化的问题,但是,在推广上面也不是完全没有问题的。
首先,很多企业、运营商和组织对53端口(dns)以外的udp流量会进行拦截或者限流,因为这些流量近来常被滥用于攻击。
特别是一些现有的udp协议和实现易受放大攻击(amplification attack)威胁,攻击者可以控制无辜的主机向受害者投放发送大量的流量。
所以,基于udp的quic协议的传输可能会受到屏蔽。
另外,因为udp一直以来定位都是不可靠连接,所以有很多中间设备对于他的支持和优化程度并不高,所以,出现丢包的可能性还是有的。。。
但是不管怎么样,http/3.0的时代一定会到来的,quic协议全面代替tcp的时代也会到来的,让我们拭目以待吧。


了解清洁PCB的重要性
BL110支持路由功能以及级联交换机数据采集
美能源部发布《面向科学、能源和安全的人工智能》报告
机器人登上舞台,引起不少话题
晶体二极管和普通二极管的辨别和检测方法
HTTP 3.0为何要彻底放弃TCP呢?
智能语音怎样做用户会比较满意
怎么去计算PCB走线的电阻呢?
特斯拉总部将搬迁至得克萨斯州奥斯汀
浅谈风阀驱动器三种基础的风阀驱动器方式
时代在进步:十大注定要被淘汰的安全技术
物联网电路板设计:当今的主要挑战
资深视频创作者的经验之谈:论移动固态硬盘的重要性
供货特斯拉按下快进键,宁德时代装机量有望迎来爆发
消息队列实现进程间通讯
哪个品牌充电宝质量好充电快,快充充电宝年度人气榜单
激光焊接行业的智能化选择钡铼分布式IO
新iPhone XI 过于惊艳,价格居然如此感人
教你用单片机播放生日快乐歌
5G射频器件技术引发的博通对高通的收购冲动