对网络技术有所了解的朋友们都知道,HTTP/3居然是基于UDP的。在大多数人的印象中,UDP是一种非常低级的协议,传输不可靠,没有拥塞机制,似乎将它用在准确可靠的万维网传输上,是不可思议的事情。
事实并非如此。我们首先需要消除对UDP的误解。UDP并非如大家所想象的那样不可信,它的简单性让我们产生了这样的认知。从另一个角度来看,UDP实际上是最为纯净的传输层协议。
为了更好地理解为什么HTTP/3会选择基于UDP,我们需要先了解网络分层的基本概念。
在网络架构中,物理层是网络的最下层,它处理的消息全部是1和0的组合,这是硬件层面的交流基础。接着是连接层,它将这些1和0整合成固定长度的信息帧,每个信息帧都包含源和目的地的地址,以便两台机器进行点对点的通信。
随后是网络层,它加入了IP协议,通过IP地址进行目标机器的定位。IP包经过路由器的转换,由连接层负责具体信息的传输。IPv4就是其中的一种协议形式。
当我们继续往上看,就到了传输层。IP协议只是解决了计算机之间的通信问题,但每台机器上还会有不同的进程需要区分。这时候,UDP和TCP协议就派上了用场。它们通过加入端口号来识别某个进程。IP地址加上端口号,就是我们编程时需要面对的socket。
现在大多数的网络通信,包括HTTP/1和HTTP/2等,都是基于TCP。但为什么HTTP/3会选择UDP呢?这主要是因为TCP本身已经非常复杂了,包含了太多历史遗留的包袱。
TCP为了保证信息的可靠传输、顺序传输以及兼顾吞吐量,做了大量的工作。相比之下,UDP则是最为简单的协议之一。UDP仅仅在IP协议的基础上增加了两个端口以及长度和校验等信息,因此它的“纯洁性”使得它在某些场景下成为更好的选择。
HTTP/3选择QUIC作为其底层协议就是一个典型的例子。QUIC是一个运行在传输层(也可以说是应用层)的协议,它完全基于UDP。与TCP不同,QUIC的代码并没有硬编码在操作系统内核中,而是完全运行在用户空间,并默认集成了TLS。这意味着QUIC在实现更高的效率和更强的安全性方面有着更大的灵活性。
具体到QUIC的优势和特点上来说:它不仅能够实现TCP协议的所有功能性需求并集成TLS;还能实现多路复用传输、真正解决队头阻塞现象等问题;同时还能够减少握手次数尤其是带有TLS传输的握手次数并拥有更低的握手延迟;由于易于升级的特性也为协议的更新和发展提供了巨大的想象空间。
因此我们可以说HTTP/3基于UDP是非常靠谱的选择。它不仅实现了可靠性传输还获得了较大的性能提升这是时代发展的必然趋势也是技术进步的体现。
总结一下QUIC的优势以及其为何成为HTTP/3的理想选择我们不难发现它是一种能够有效提升网络效率和安全性的协议它的实现简单、灵活、易于升级并且拥有广泛的应用前景。
转自:技术博客