互联网发展了这么多年,其基础的TCP/IP协议族一直没怎么变过,正是这些运输着字节流的标准协议,支撑起了我们几乎全部的互联网应用。 在传输层,协议主要包括TCP和UDP协议,TCP协议对于计算机专业的同学们来说都很熟悉。大部分找工作的计算机专业毕业生都会熟练的背下来TCP协议的三次握手和四次挥手,因为很多面试官都会问这个问题。可见这个问题是多么的基础了。 相比于TCP的可靠连接而言,UDP协议则显得不那么可靠了。形象一点的解释TCP协议,它连接的建立过程相当于一个快递员,先提前打电话给你问你在不在家,然后确认你在家之后,他再到你家敲门,然后再亲手将快递送给你。所以这是一个可靠连接。而UDP协议则相当于快递员到了之后,把快递扔在快递超市,然后发个信息告诉你,快递放快递超市了你自己取下,如果丢了的话你找卖家重发一份。所以UDP协议显得不那么可靠,但正因为不那么可靠,所以传输效率相比于TCP来说,就快了很多。 那么有没有一种协议,能够既高效又可靠呢?Google觉得这个事情可以研究一下,于是他们搞出了QUIC(Quick UDP Internet Connection),以尝试提供一种兼顾低延迟和高可靠的互联网基础通信协议。 那么,QUIC是怎样兼顾这两个方面的呢?我们来看下它的结构和运行原理。 首先我们来看一下,QUIC的高效性来自于哪里。早期的TCP协议并没有考虑到后来互联网面临的巨大安全问题,所以开发人员在TCP协议之上,重新开发了安全协议TLS和SSL,这样,对于一个常用网站来讲,建立连接的过程则包括了建立TCP连接和安全连接的过程,而QUIC重新编辑了其底层协议,将加密算法的协商整合到了建立连接的过程中,大大减少了建立连接所需要的数据包。相当于原来两个独立的办事部门给整合到一起了,原来想办事的话,要跑人社局民政局两个窗口,而现在直接把两个部门合并到一起了,想办的事一起办了,那么效率自然就大大提高了。下图是QUIC与TCP+TLS的比较,可见QUIC的执行效率远高于两者的结合。 除此之外,针对互联网资源是各自独立请求的特点,QUIC通过底层使用UDP协议方式,多路并行的传输各个请求资源。对于TCP而言,由于处理包是有严格的顺序的,因此如果其中一个包遇到问题的话,需要等待这个包传输完成之后才能继续进行。而QUIC则完全避免了因为不相干的包丢失而造成的阻塞现象,大大提升了传输效率。 另外,QUIC借鉴了互联网大数据的一些方法论,添加了一个非常独特的向前纠错(Forward Error Correction)功能。我们知道类似Hadoop这种大数据框架,一份数据都有几份备份以防出错,QUIC相当于一个流行的Hadoop,他的每个数据包除了数据包本身应传输的数据之外,还带了部分其它包的数据,因此少量的丢包可以通过其它包的冗余数据直接组装起来,而不需要重传。目前QUIC默认的冗余量是10%,即每发送10个数据包,其冗余数据就可以重新构建一个丢失的数据包。 最后,QUIC还有一个更明显的好处,因为底层协议切换到了UDP协议,使得其连接不再依赖来源IP。我们知道对于TCP这样的可靠连接而言,需要知道双方的IP和端口,从而保持连接。其中的任何一个参数发生了变化,连接就要重新创建。这种模式在早期互联网中并不是一个很大的问题,但是在移动网络中,这个问题就大不一样的了。因为每个人的手机都可能不断在不同WIFI网络和4G网络中切换,这个过程中TCP连接则需要重建。例如很多人都经历过,在玩王者荣耀的时候,如果网络切换了,就会导致一小段时间的460。重新连上之后发现自己已经被对方打野抓了的情况。而换成QUIC之后,这个问题就不会存在了,因为QUIC协议不再依赖于这些参数,而通过自己的UUID参数进行标记,当设备网络环境切换时,连接不会发生变化,因此无需重新握手。 看到这些优点,很多人都很期盼QUIC能够尽快成为新的互联网基础设施。但是因为协议多数是与操作系统直接绑定在一起的,因此,成为主流还需要一定的时间。不过相信通过业界人士的集体努力,这个问题很多就会得到解决。大家也会更好的享受互联网带来的生活便利。同时我们也要看到,除了互联网应用以外,TCP/IP协议还在其它很多领域得到广泛的应用,而QUIC本质上是针对互联网服务而进行了大规模的优化,这种优化舍弃了很多原本的优点,因此反而对于一些传统应用场景并不友好。因此,QUIC本质上还是一种针对互联网的应用协议。 喜欢本文的话,欢迎关注活在信息时代哦:) |
|