APP下载

QUIC协议研究

2017-08-16陈振波武汉邮电科学研究院湖北武汉430074

电子测试 2017年14期
关键词:重传服务端数据包

陈振波(武汉邮电科学研究院,湖北武汉,430074)

QUIC协议研究

陈振波
(武汉邮电科学研究院,湖北武汉,430074)

为了解决当前TCP传输存在的两个主要问题:(1)建立连接、断开连接的耗时传输机制;(2)前序包阻塞(Head-of-line blocking, HOL)问题,本文介绍一种基于UDP作为底层传输的全新协议(Quick UDP Internet Connections,QUIC),通过采用UDP为传输层协议,避免建立连接、断开连接的耗时问题和前序包阻塞问题,并且通过一种巧妙的机制保证可靠性传输,克服UDP传输存在的问题。

TCP;前序包阻塞;UDP;QUIC

0 引言

建立在TCP基础之上的HTTP是互联网上应用最为广泛的一种网络协议,诞生之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。但是到了Web 2.0时代,HTML页面变得越来越复杂,不仅仅单纯的是一些简单的文字和图片,同时有了层叠样式表(Cascading Style Sheets,CSS),JavaScript(一种直译式脚本语言)来丰富页面展示,随着Ajax(一种创建交互式网页应用的网页开发技术,英文全称:Asynchronous JavaScript And XML)的出现,客户端又多了一种向服务器端获取数据的方法,这些其实都是基于HTTP协议的。同样到了移动互联网时代,页面可以在手机端浏览器里显示,但是和电脑端相比,手机端的网络情况更加复杂,经常涉及到蜂窝网络与无线局域网之间的切换,因此需要对HTTP进行深入理解并不断优化。SPDY(发音如英语:speedy)及QUIC就是在这样的背景下相继出现,接下来先分别介绍HTTP及SPDY的发展、QUIC的特点,然后进行对比分析。

1 HTTP及SPDY

1.1 HTTP 1.X

HTTP/0.9是一个过时的协议,它只接受GET一种请求方法,没有在网络传输中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

随后提出的HTTP/1.0是第一个指定版本号的HTTP协议版本,早期只是使用在一些较为简单的网页和网络请求上,而今主要是在代理服务器中使用。

HTTP/1.1在1999年开始广泛应用于现在的各大浏览器网络请求中,同时也是当前使用最为广泛的HTTP协议。HTTP/1.1与HTTP/1.0的主要区别为:

(1)缓存处理。在HTTP/1.0中主要使用header里的If-Modified-Since, Expires作为缓存判断的标准,HTTP/1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

(2)带宽优化及网络连接的使用。HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象传过来了,并且不支持断点续传功能,HTTP/1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

(3)错误通知的管理。在HTTP/1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

(4)Host头处理。在HTTP/1.0中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP/1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

(5)长连接。HTTP/1.1支持长连接(Persistent Connection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP/1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP/1.0每次请求都要创建连接的缺点。

尽管HTTP/1.1相比于HTTP/1.0有了很大的优化,但仍存在不少问题。

(1)需要很多TCP连接来实现并发请求与响应,且在传输数据时每次都需要重新建立连接,这增加了大量的延迟时间并可能引起网络拥塞和高数据包丢失,导致更差的网络性能。

(2)在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。

(3)头部信息(header)里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端环境下容易增加用户流量。

(4)虽然HTTP/1.1支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力。

(5)HTTP请求严格由客户端发起,在网页加载很多嵌入对象时会严重影响性能,因为服务器只能在客户端发出请求后才能传输数据。

1.2 SPDY与HTTP/2

SPDY是一种基于TCP的开放网络传输应用层协议,由Google开发,用来发送网页内容。设计SPDY的目的在于降低网页的加载时间,与HTTP/1.1相比,它在以下几方面作了改进。

(1)降低延迟。针对HTTP高延迟的问题,SPDY采取了多路复用(multiplexing)。多路复用通过多个请求流共享一个TCP连接的方式,同时服务端也可通过一个连接发出多个应答流,提高了服务端性能。多路复用技术可以减少网络拥塞、降低延迟,同时提高了带宽的利用率。

(2)请求优先级。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个请求设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

(3)header压缩。HTTP 1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量,降低延迟。

(4)基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。SPDY中广泛应用了安全传输层协议(Transport Layer Security,TLS)加密,传输内容也均以gzip或DEFLATE格式压缩。

(5)服务端推送。采用了SPDY的网页,在客户端发出一个资源请求时,服务端会把相关的资源主动推送到客户端而避免等待客户端再发出请求后响应。这可以减少页面加载时间。

需要说明的是,SPDY并不用于替换HTTP,它只是修改了HTTP的请求与应答在网络上传输的方式;这意味着只需增加一个SPDY传输层,现有的所有服务端应用均不用做任何修改。当使用SPDY的方式传输时,HTTP请求会被处理、标记简化和压缩。比如,每一个SPDY端点会持续跟踪每一个在之前的请求中已经发送的HTTP报文头部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。SPDY的构成如图1所示。

图1 SPDY构成图

2015年推出的HTTP/2大部分基于SPDY实现,主要区别为:

(1)HTTP/2支持明文 HTTP 传输,而 SPDY 强制使用HTTPS。

(2)HTTP/2消息头(header)的压缩算法采用 HPACK,而非SPDY 采用的 DEFLATE。

由于HTTP/2推出时间不长,相较于HTTP/1.1应用范围还不广,但是未来肯定会逐渐取代HTTP/1.1。

2 QUIC

2.1 HTTP/2的局限性

除了QUIC是基于UDP实现,前面几种协议都是基于TCP。TCP因其面向连接、可靠传输等特点而被广泛采用,但在如今带宽越来越大的网络环境下,TCP的局限性也制约了HTTP/2的性能,主要表现为以下两点。

(1)数据传输前TCP先要进行“三次握手”,建立连接后才开始传输应用数据,这无疑增加了网络延时;在采用TLS协议时需要交换密钥,这又增加了一次往返时延(Round-Trip Time,RTT)。

(2)HOL(Head-of-line)blocking,前序包阻塞。TCP保证有序传输,所以当一个数据包丢失时,其他所有的包都要等它重传整理后才会交给应用层,对于多路复用共享一个TCP连接的SPDY和HTTP/2来说,这无疑影响更大。

2.2 QUIC的特点

QUIC最主要的目标是减小网络传输延迟,所以选择了UDP作为传输层协议,它的主要优点有:

(1)QUIC协议在创建连接握手时,只需要1到2个数据包即可。参考TCP+TLS协议的传输方式,QUIC设计了类似DTLS(Datagram Transport Layer Security,数据报传输安全层)的传输模型。这个模型大大简化了建立连接的过程,使得创建连接握手时只需1到2个数据包。对于无线网络来说,客户端和服务器之间的延时通常在100ms以上。传统TCP+TLS协议的传输方式,在创建连接时的4个数据包和QUIC协议的1个数据包相比,连接创建上就会多耗时300ms以上。图2、图3分别为TCP+TLS、QUIC的握手示意图。

(2)避免前序包阻塞。SPDY和HTTP/2支持将页面的多个数据(如音频、图片等)通过一个TCP连接进行传输。该特性能够加快页面组件的传输速度,但是对于TCP协议来说,这会遇到前序包阻塞的问题。因此,即使逻辑上一个TCP连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。由于UDP协议没有严格的顺序,当一个数据包遇到问题需要重传时,只会影响该数据包对应的资源,其他独立的资源(如其他CSS、JavaScript文件)不会受到影响。QUIC协议直接通过底层使用UDP协议天然的避免了该问题。

图2 TCP+TLS握手示意图

图3 QUIC握手示意图

(3)QUIC协议有一个非常独特的特性,称为向前纠错(Forward Error Correction,FEC),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。

(4) 底层协议切换到UDP协议之后的另一大好处是,连接不再依赖于来源IP。对于TCP协议来说,标识一个TCP连接需要4个参数,即来源IP、来源端口、目的IP和目的端口。其中的任一参数改变,TCP连接就需要重新创建。这对于传统网络来说影响不大,因为来源和目的IP相对固定。但是在无线网络中,情况就大不相同了。设备在移动过程中,可能会因为网络切换(如从WIFI网络切换到4G网络环境),导致TCP连接需要重新创建。QUIC协议使用了UDP协议,不再需要这四组参数。同时QUIC协议实现了自己的会话标记方式,称为连接ID。当设备网络环境切换时,连接ID不会发生变化,因此无需重新进行握手。该特性除了可以减少无谓的连接重连之外,还可以充分利用设备的不同网络接口,进行资源的并行下载。因为虽然这些网络接口有不同的IP,但只要他们能够共享连接ID,就能够并行的从服务器下载数据。

QUIC协议内置了TLS栈,实现了自己的传输加密层,同时QUIC还包含了部分HTTP/2的实现,底层通过UDP协议替代了TCP,上层只需要一层用于和远程服务器交互的HTTP/2 API。这是因为QUIC协议已经包含了多路复用和连接管理,HTTP API只需要完成HTTP协议的解析即可。图4为协议层次对比图。

图4 协议层次对比图

3 结束语

QUIC通过一次(通信双方从未建立连接)甚至不需要往返握手就可建立连接,这大大降低了网络传输延迟。同时采用UDP底层协议避免了HTTP/2基于TCP的HOL(前序包阻塞)问题。今天,大多数人都会随身带着诸如智能手机等移动设备,在TCP中当网络环境发生变化时需要重新分配IP地址、建立连接,在未来这显然太慢了。QUIC通过一个64 bit的GUID(Globally Unique Identifier,全球唯一标识符)来标记传输包,服务器可以通过它来区分来源端口,并且在QUIC连接断开后不需要往返握手来建立连接。

所有这些都使QUIC有着强大的吸引力和应用前景,或许会在某一天取代TCP、HTTP,更有可能的是它们互相吸收对方的长处,共同发展。

[1]Megyesi P, Krämer Z, Molnár S. How quick is QUIC[C]// Communications (ICC), 2016 IEEE International Conference on. IEEE, 2016: 1-6.

[2]Biswal P, Gnawali O. Does QUIC make the Web faster[C]// Global Communications Conference (GLOBECOM), 2016 IEEE. IEEE, 2016: 1-6.

[3]Gratzer F. QUIC-Quick UDP Internet Connections[J]. Future Internet (FI) and Innovative Internet Technologies and Mobile Communications (IITM), 2016, 39.

[4]Carlucci G, De Cicco L, Mascolo S. HTTP over UDP: an Experimental Investigation of QUIC[C]//Proceedings of the 30th Annual ACM Symposium on Applied Computing. ACM, 2015: 609-614.

Research on QUIC Protocol

Chen Zhenbo
(Wuhan Research Institute of Post and Telecommunications,Wuhan Hubei,430074)

In order to solve the two main problems of TCP transmission: (1) the time-consuming transmission mechanism of connection and disconnection; (2) Head-of-line blocking (HOL), this paper introduces a new protocol called QUIC, which is based on UDP, uses UDP as the transport layer protocol, avoids the problem of time-consuming and HOL, and ensures the reliability of transmission, overcomes the existing problems of UDP transmission through a clever mechanism .

TCP; HOL; UDP; QUIC

猜你喜欢

重传服务端数据包
SmartSniff
面向异构网络的多路径数据重传研究∗
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
数据链路层的选择重传协议的优化改进
视觉注意的数据包优先级排序策略研究
MPTCP中一种减缓缓存阻塞的重传策略
移动IPV6在改进数据包发送路径模型下性能分析
摸清黑客套路防范木马侵入