QUIC 是一个很大的创新。它几乎等同于创造了一个新的四层协议。但它又为什么要基于UDP,而不是新的与TCP/UDP同等级的传输层协议呢?
QUIC要基于UDP,那么 UDP 对 QUIC 而言,必然:
- UDP 有它价值点,并且是纯 IP 无法给予的。(次要原因)
- UDP 的价值点 QUIC 自己做,代价比较高。(主要原因)
UDP 什么价值点是 IP 无法给予的?
可以从 UDP 的头部一探究竟。UDP 头部里有什么?
- 源端口,目的端口:如果没有端口信息,报文仅依靠 IP 地址,报文就只* 能通过 IP 找到主机,主机就不知道要把报文投递给哪个进程。
- 长度:让协议栈知道还要在网口上收多长的数据。
- 校验和:校验报文在传输过程中是否有发生错误。
以上功能都是纯 IP 头部无法给予的。
当然,很多人要问了,UDP 的这些功能,QUIC 重新做一遍也很简单。为何不把 QUIC 封装成与 TCP/UDP 并列同等级的协议,而是要承载在 UDP 之上呢?
原因就是:UDP的这些功能,如果在QUIC中重新做一遍,对现网设备的更新代价很高,不便于推广。
在QUIC发明之前,互联网世界中已经部署了海量的网络设备,这些设备对报文的处理和转发都是基于TCP/UDP协议的。如果新引入一个QUIC,海量的网络设备都要更新,针对QUIC做新的策略。其难度之高,可以这样打个比方:
在上个世纪,我国将道路划分机动车道和非机动车道。突然有一天出现了电动自行车,它的特性与机动车和非机动车都有显著的不同。于是,就有两种政策选择:
- 新增一种“电动自行车道”,把全国的道路都重新整改一遍。
- 把电动自行车划入“非机动车”的范围,走非机动车道。
显然,电动自行车选择了第2种政策。
QUIC亦是如此,如果按第1种政策来做,QUIC可能现在还躺在实验室里,无法推广商用。