SPDY协议简介

转载 2012年03月30日 09:35:13

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的结构定义:

1
2
3
4
5
6
7
8
9
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类似:

1
2
3
4
5
6
// 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必须包含一些头信息)

OkHttp完全解析(七)SPDY协议详细介绍

SPDY是什么? SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。SPDY 协议旨在通过压缩、多路复用...

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

背景:网络协议与网络延时现在,HTTP和TCP是web的两种协议。TCP是一般的,可靠的传输层协议,能够提供可靠的传输,避免出错,按顺序传输,流量控制,冲突避免以及其他的传输特性。而HTTP是一种应用...

SPDY - Web网络协议

[核心提示] 当老迈的 HTTP 协议逐渐不能满足人们需求的时候,Google 的 SPDY 协议出现在面前,那么这个长期以来一直被认为是 HTTP 2.0 唯一可行选择的 SPDY 是什么呢?当下我...

SPDY协议介绍

转载自pagefault 本文链接地址: SPDY协议介绍 SPDY的主页: http://www.chromium.org/spdy 我主要看的是SPDY Protocol Drafts ...

HTTP代理与SPDY协议

HTTP代理与SPDY协议 引用:http://fqrt.4pu.com/post/54756897533/http-spdy HTTP代理是最经典最常见的代理协议。其用途非常广泛,普...
  • ljmwork
  • ljmwork
  • 2013年07月08日 16:57
  • 863

使用支持SPDY协议的Wireshark截包(含spdyshark插件)

本文基于前三篇文章,请先阅读: Linux Mint + Apache2.2搭建SSL/HTTPS/SPDY服务器Wireshark+Apache2.4解密SSLv3Linux Mint下编译安装支...
  • hursing
  • hursing
  • 2014年03月07日 10:51
  • 6406

Android中Okhttp和SPDY协议

Android中的OkHttp和SPDY协议
  • wu56yue
  • wu56yue
  • 2016年01月12日 21:49
  • 982

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

网页加速速度快慢的影响可以从数据中看出: 网页加载超过4秒,25%人会放弃;手机网页超过10秒,50%用户会放弃,60%人不再返回;Google搜索结果慢0.4秒,一天搜索量减少800万次;40%移...
  • dqjyong
  • dqjyong
  • 2012年07月19日 11:21
  • 1357

HTTP协议知多少-关于http1.x、http2、SPDY的相关知识

作为网站开发的基础协议,我们知道浏览器上都有输出http这四个字母,这意味着什么呢? 这就是最基础的HTTP协议。   逐浪君今天为各位大人准备了一些HTTP技术的知识,来和大家分享。   ...

Android妙用SPDY协议提高移动端网络请求性能

本文旨在提出一种提高移动端网络性能的可行方案。我们知道目前移动端使用的网络请求协议基本上都是http。用的最多的是http/1.1,http/2.0正在逐渐壮大,实际上http/2.0是基于googl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SPDY协议简介
举报原因:
原因补充:

(最多只允许输入30个字)