SPDY:一种更快速web的实验协议

来源:互联网 发布:知画生孩子第29集 编辑:程序博客网 时间:2024/06/11 18:58

背景:网络协议与网络延时


现在,HTTP和TCP是web的两种协议。TCP是一般的,可靠的传输层协议,能够提供可靠的传输,避免出错,按顺序传输,流量控制,冲突避免以及其他的传输特性。而HTTP是一种应用层协议,提供记本的连接、响应语法。我们可能有机会在传输层提高延时性能,但是我们最开始的调查还是关注在应用层,即HTTP。


不幸的是,HTTP并不是为了时延而设计的。进一步说,现在的网页传输与10年前的网页有着典型的不同,因而需要改进在开发HTTP协议时没有提前注意到的地方。下面是HTTP协议可以优化的地方:


1.每个连接多需要请求;因为HTTP只能一次取得一个资源(HTTP采用了流水线,但仍然是采用FIFO队列),服务器延时500ms来阻止其他请求重用TCP信道。浏览器使用了多连接来解决这个问题。直到2008年,大部分浏览器才最终从每个域名2个连接发展到每个域名6个连接。


2.额外的初始客户请求;在HTTP协议中,只有客户端能初始化一个请求。尽管服务器知道客户端需要资源,但是它没有机制来通知客户端,而且必须等待客户端发来资源请求。


3.未压缩的请求以及响应头部。现在请求头部的大小从200bytes到2kb不等。当应用使用更多的cookies以及用户代理扩展特性时,典型的头部大小是700-800bytes。对于ADSL或者modems连接,上行的带宽相对较低,因此延时比较明显。在头部减少数据能够在发送请求时直接提高串行化的延时。


4.冗余的头部。有一些头部在同一个信道的请求中多次发送。然而,例如用户代理、主机以及接收的头部一般是固定的,而且不需要重复发送。


5.优化数据压塑。HTTP使用了数据优化压缩编码。内容总是以一种压缩的形式来发送。


过往的方法:


SPDY不是唯一的让HTTP更快的研究。这里有其他的方案来解决网络延时,大部分都是在传输层或者会话层。


1.流控制传输协议(tream Control Transmission Protocol (SCTP))——一种用来取代TCP的传输层协议,能够提供多数据流以及流感知冲突控制。


2.HTTP over SCTP——在SCTP的基础上运行HTTP协议。在高延时网络中比较HTTP over SCTP和HTTP over TCP(Comparison of HTTP Over SCTP and TCP in High Delay Networks)中描述了传输协议的性能对比研究。


3.结构化的流传输(Structured Stream Transport (SST))——采用结构化的流的协议:在一种普通的传输协议上加载轻量、独立的流。它取代了TCP或者是运行在UDP协议的上层。


4.MUX和SMUX——中间层协议(即在应用层和传输层之间的协议)能够提供多种流服务。这种协议与HTTP/1.1使用的时间差不多。


上面的方法能够解决一些网页延时问题,但不能解决所有的。不管HTTP使用的是什么传输层协议,HTTP存在的内在问题(压缩、优先次序等)应该得到解决。在任何情况下,在实际的情形中,改变传输层是比较困难的。因此,我们相信在应用层解决这些缺陷是比较容易的。这样尽可能较小的改变现有的基础设施,以及能够获得显著的性能改善。


SPDY的目标:


SPDY的目标是定义和实现一种能够降低延时而服务于网页的应用层协议。SPDY的主要目标是:


1.在网页加载时间上降低50%的时间。我们的预期结果基本上接近这个目标。


2.尽可能减少铺设复杂度。SPDY使用TCP协议作为其传输层协议,因此不需要对现有的基础设施进行任何改变。


3.避免改变网站作者的内容。支持SPDY需要的唯一的改变是客户使用代理以及网络服务器应用。


4.吸引有志向相同的组织,一起来开发协议解决延时问题。我们希望与开源社区和工业组织一起来开发这种新的协议。


一些具体的技术目的有:


1.在单个TCP会话上允许更多的并行HTTP请求;


2.通过压缩HTTP头部以及减少不必要的头部信息来减少带宽;


3.定义一种容易实现以及服务器有效的协议。我们希望通过砍掉边界情况来降低HTTP的复杂性,以及定义容易解析的消息格式;


4.为了在现有的网络基础设施上提供更安全和兼容性,让SSL作为底层传输协议。尽管SSL引入了时延,我们相信未来的网页更加依赖于安全的网络连接。除此之外,确保现有的代理间的通信不会断裂,使用SSL是必须的。


SPDY设计及其特点


SPDY在允许多并行的SSL上添加了会话层,在单个TCP连接上添加交叉流。而且一般的HTTP 的GET和POST消息格式仍然一样。然而,SPDY给有线的数据传输和编码指定了一种新的框架格式。


流数据是双向的,例如在客户端和服务器都能够初始化。


SPDY的目的是通过基本和高级的特征来获得低时延。


基本特征:


1.多路复用流:SPDY允许在单个TCP连接上使用没有限制的并行流。因为在单个信道上,请求是交叉的,TCP的效率更高:更少的网络连接以及更少但高密度的数据包;


2.请求优先级:尽管非限制的平行流解决了串行问题,但SPDY引入了另外一种方法:如果信道的带宽受限,客户端可能因为防止阻塞信道而阻断请求。为了克服这种问题,SPDY实现了请求优先级:客户端能够向服务器请求它想要的多种条目,以及给每个请求分配优先级。当一种较高优先级的请求未解决时,能够有效防止了网络信道在非重要资源发送冲突。


3.HTTP头部压缩:SPDY对HTTP请求以及响应的头部进行压缩,实现更少的数据包以及更少的比特传输。


高级特征:


除了上面的基本特征外,SPDY提供一些高级特征,服务器端发起的流。它能够在客户端没有请求发送内容的时候发送内容给客户端(Server-initiated streams can be used to deliver content to the client without the client needing to ask for it.)。web开发者可以有下面两种方式来设置:


1.服务器推送:SPDY通过X-Associated-Content header使得服务器将数据传输给客户端。X-Associated-Content header在客户端没有请求数据时,通知客户端服务器有数据发送给客户端。对于页面发起的下载(例如用户第一次访问站点),这能显著提高用户体验。


2.服务器暗示:与自动推送资源给客户端不一样,在服务器提前知道客户端需要某个资源的情况下,,服务器使用X-Subresources header 来建议客户端是否请求该资源。然而,服务器在客户端发送请求之前仍然等待发送内容。


原文(翻译):

http://blog.csdn.net/dqjyong/article/details/7759612

0 0
原创粉丝点击