SPDY协议介绍

标签: SPDY 协议 http spdy | 发表时间:2011-10-23 02:48 | 作者:Simon Liu Adam
出处:http://www.pagefault.info

原创文章,转载请注明: 转载自pagefault

本文链接地址: SPDY协议介绍

SPDY的主页: http://www.chromium.org/spdy

我主要看的是SPDY Protocol Drafts 3,这个草稿现在还没完成,google的人将它放在github上面: http://mbelshe.github.com/SPDY-Specification/

按照我的理解,SPDY只是在性能上对http做了很大的优化(比如它的核心思想就是尽量减少连接个数),而对于http的语义并没有做太大的修改(删除了一些头),基本上还是兼容http.

SPDY相对于HTTP,主要是有下面4个增强:

1 Multiplexed requests

对于一条SPDY连接,并发的发起多少request没有任何限制,其实也就是可以拥有多条stream(接下来会介绍stream).

2 Prioritized requests

提供具有优先级的请求(同一个SPDY 连接)。这个主要是解决了HTTP中的pipeline请求是严格的FIFO的。比如有多个request,如果先到的一个request处理时间比较长,则后面的request会被阻塞住,而在SPDY中,就会优先处理高优先级的stream中的frame(后面会介绍这个)

3 Compressed headers

在SPDY中,头是可以被压缩的。

4 Server pushed streams

Server可以主动的push数据给client,而不需要客户端的request.

———————————————————————

然后来看SPDY中的一些基本的概念。

首先在SPDY中的第一个概念是session,这里的Session也就是代表一条tcp连接。

在SPDY中第二个概念就是frame,frame也就是SPDY中server和client之间交互的数据。 SPDY Framing Layer是在tcp之上的一层,而当client端和server端建立连接之后,他们之间的交互数据就是frame。 SPDY中分为2种类型的frame,分别是control frame 和data frame。(具体frame的结构,我这里就不介绍了,可以去看协议中的介绍).而每种frame都有对应的flag.

第三个是Stream的概念,一条tcp连接,可以有多条的Stream,每个stream都有一个stream id.在SPDY中有3种control frame来控制Stream的生命周期,分别是:

SYN_STREAM – Open a new stream
SYN_REPLY – Remote acknowledgement of a new, open stream
RST_STREAM – Close a stream

可以看到,和tcp建立连接很像。这里要注意Stream也是有优先级的。如果一端发送一个设置了FLAG_FIN标记的frame,则这个stream将会成为半关闭的.(也就是不会再发送数据,而只能够接收收据,这个和tcp的半关闭很类似).如果一个发送端发送了带有FLAG_FIN标记的flag,如果它再次发送数据,则将会收到一个RST_STREAM的frame.

要注意,只有synstreamframe(建立一个stream的控制frame)才拥有priority,也就是说在SPDY中优先级只到stream这个级别,只有某个stream中的request会被优先处理,而同一个stream中的frame则类似于http的行为。

从stream我们可以看到相比较于http,SPDY可以很打程度上减少建立的连接的数目,因为每个stream其实就类似于一个虚拟的连接。

假设现在需要做一个http->spdy的代理,当一个http request过来的时候,如果这个request没有body,则将会发送一个设置了FLAG_FIN标记的frame,而对应的http头都将会放入到这个frame中。可以看下go 中对于SYN frame的结构定义:

type SynStreamFrame struct {
	CFHeader             ControlFrameHeader
	StreamId             uint32
	AssociatedToStreamId uint32
	// Note, only 2 highest bits currently used
	// Rest of Priority is unused.
	Priority uint16
	Headers  http.Header
}

这里可以看到http的头就是紧挨着SPDY的frame,不过这里注意由于http是文本协议,所以最终SPDY还是会将Headers转成二进制的。

reponse类似,下面就是go中的synReplay frame,可以看到和syn类似:

// SynReplyFrame is the unpacked, in-memory representation of a SYN_REPLY frame.
type SynReplyFrame struct {
	CFHeader ControlFrameHeader
	StreamId uint32
	Headers  http.Header
}

最后来看下pushed stream,在SPDY中,server能够发送多个replay给一个request,就是说有时候server能够知道需要发送多个资源给client,此时就需要server push资源给client,而如果没有这个特性,则需要client不断的发多个request来请求多个资源。这样子就极大的RT延迟。

在SPDY中,如果server要push数据给client,则它必须选择一个已经存在的stream id,并且server端必须得设置一个比较高的优先级,以便于客户端能够迅速的发现pushed stream,然后响应它。server端能push的内容必须是客户端能够通过一个get请求所得到的资源(也就是push过来的syn frame必须包含一些头信息)。

暂无相关日志.

相关 [spdy 协议] 推荐:

SPDY协议介绍

- Adam - pagefault
原创文章,转载请注明: 转载自pagefault. 本文链接地址: SPDY协议介绍. SPDY的主页: http://www.chromium.org/spdy. 我主要看的是SPDY Protocol Drafts 3,这个草稿现在还没完成,google的人将它放在github上面: http://mbelshe.github.com/SPDY-Specification/.

Chrome支持SPDY协议

- Xiao Qiang - Solidot
Chrome悄悄的支持了Google提出的SPDY协议,目前仅支持Google的Web服务. 旧的HTTP和TCP协议是在上个世纪前宽带时代设计的,针对的简单文件传输,为防止丢包,它总是试探性的增加传输速率,不能充分利用带宽. Google的SPDY协议是基于TCP的应用层协议,一次会话能复用传输多个文件,降低页面载入时间.

Netty 3.3.1版本支持SPDY协议

- - InfoQ cn
Netty最新发布的版本增加了对SPDY协议的支持,该协议由Twitter小组贡献. Netty是一个高性能的NIO客户服务器框架,最初由JBoss开发. Netty所支持的协议包括了HTTP、WebSockets和Google的ProtoBuffers. 根据http/2.0标准制定工作组主席Mark Nottingham 最近的一项声明表示,SPDY很有希望接替当前的HTTP传输实现.

Chrome 已经开始使用 SPDY 协议和 Gmail 等应用通信

- hongwen he - 谷奥——探寻谷歌的奥秘
如果你正在使用 Chrome 浏览器查看 Gmail 邮件的话,那么你很可能已经在不知不觉中开始使用 Google 规划的下一代互联网通讯协议 SPDY 了. Google 在 2009 年 11 月首次对外宣布了 SPDY 协议,这是 Google 构建快速网络中非常关键的哦一环. 在过去的18个月里面,SPDY 已经逐渐被集成到了 Stable 分支的 Chrome 中.

减少50%页面载入速度 新证据显示IE11支持谷歌的SPDY协议

- - cnBeta全文版
版本号为9364的Windows Blue曝光15天之后关于新系统更多信息被挖掘出来,其中最大的焦点就是即将会装置在Windows 8系统中的IE11浏览器. 通过对源代码进行深入挖掘之后,除了之前已经知晓的标签同步和支持WebGL之外 还发现IE 11支持SPDY协议,一项主要是在现有网络架构下减少载入时间的网络协议.

SPDY 是什么?如何部署 SPDY?

- - 月光博客
  SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案). SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性. (SPDY 是 Speedy 的昵音,意思是更快).   SPDY 与 HTTP 的关系.

memcached协议

- - 开源软件 - ITeye博客
旧版: http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt. 新版: https://github.com/memcached/memcached/blob/master/doc/protocol.txt.

https协议

- - 互联网 - ITeye博客
SSL 协议的握手过程   .       为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议. SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密. 这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.

http2协议

- - 企业架构 - ITeye博客
http2协议的草案已经出来了,阅读了一下网上的中文版,http2尽可能的兼容http1.1. 改进了http1.1协议的不足. http1.0和http1.1的缺点:. 1.http1.0只允许在一个连接上建立当前未完成的请求. 2.http1.1管道只部分处理了请求并发和包头堵塞问题,客户端多建立TCP连接,减少延迟.

PPP协议

- - CSDN博客推荐文章
PPP(Point-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议. 这种链路提供全双工操作,并按照顺序传递数据包.   PPP是目前使用最广泛的数据链路层协议,不管是低速的拨号猫连接还是高速的光纤链路,都适用PPP协议. 因特网用户通常都要连接到某个ISP 才能接入到因特网.