谷歌的SPDY协议-改善HTTP性能,突破网络封锁

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




image      大家知道,互联网的基本协议是TCP/IP,后来有了HTTP,才带来了web,使互联网进入千家万户,成为大家生活中不可或缺的一部分。HTTP自上世纪90年代问世以来,已有二十年的历史,期间互联网本身发生了很大的变化,也使得HTTP的许多不足暴露了出来,现在它已经不能满足许多web app的要求。两个月前,谷歌启动了一个工程,叫做SPDY项目(发音是speedy),目的是要改善HTTP的性能,使用户下载网页更加快速。之所以要改动HTTP而不是TCP/IP,是因为改变HTTP只需更新Browser和web server就行了,而改动TCP/IP就困难多了,牵扯面太广,需要更新巨量的路由器,服务器和客户端的操作系统。

      如上图所示,SPDY介于HTTP和TCP之间,处于Session layer,其下面还强制使用SSL,增强数据安全性。谷歌的Chrome浏览器已经开始支持SPDY协议,在其地址框中键入spdy://www.google.com就可以用SPDY协议而不是HTTP来访问谷歌的网站。谷歌自己的实验结果表明,使用SPDY协议,网页显示速度可以提高50%。SPDY主要针对HTTP以下不足进行了改进。

  • Single request per connection. 由于每次只能发一个request,含有许多文件的网页就会很慢。目前浏览器的办法是同一页面开多个connection,最多是6个。SPDY允许在一个TCP connection上同时发多个request。
  • 只有client才能initiate request,server端不可以,哪怕是server有文件要发到client。
  • HTTP header没有压缩。由于使用cookies,现在的HTTP header变得越来越大,典型长度是700-800字节,可能会长达2K,占用了大量的带宽。SPDY对HTTPheader进行了压缩。
  • HTTP的数据包的压缩是可选项。SPDY压缩所有数据。

      SPDY还会带来一个巨大的副作用,但谷歌的网页中却只字未提。由于SPDY使用了SSL和数据压缩,那么网站封锁工具,例如什么防火长城呀,什么盾呀等等,将无法识别其数据内容,也就无法进行过滤。这可能是SPDY设计者的一个重要目的,但出于某种原因,他们没说出来。不知道,SPDY会不会因此在一些国家被禁用。

      SPDY目前还处于测试阶段,有兴趣的读者可以访问下面谷歌网页进一步阅读。

      http://dev.chromium.org/spdy

(6个打分, 平均:4.33 / 5)

雁过留声

“谷歌的SPDY协议-改善HTTP性能,突破网络封锁”有32个回复

  1. appleleaf 于 2010-01-20 6:54 下午

    有两个技术描述小弟不赞同
    1.“而改动TCP就困难多了,需要更新巨量的路由器。”,路由器基于IP层转发,改不改TCP没有影响。
    2.“Single request per connection”这是早期HTTP0.9,1.0的limitation了,现在都用的1.1,已经支持了http pipeline以及persistent connection.因此这一点对于HTTP不是问题。

    这个东西现在看起来主要的优点在于压缩。

  2. 杰夫 于 2010-01-20 7:02 下午

    第一点正确,应该是主要更改客户端OS。
    第二点,http1.1支持pipeline,但没解决根本问题,还是用FIFO queue。
    还有,SPDY不光是压缩,更重要的是,还有加密。

  3. appleleaf 于 2010-01-20 7:38 下午

    我的印象是“persistent connection”是FIFO的方式。“pipeline”是可以同时发出多个request而不必串行等待response,这个我们可以查一下协议文档。

  4. 杰克 于 2010-01-20 7:54 下午

    1.“而改动TCP就困难多了,需要更新巨量的路由器。”,路由器基于IP层转发,改不改TCP没有影响。

    改动TCP有向下兼容的问题,很多路由器都有TCP/IP的stack,比如BGP的应用。

  5. 杰克 于 2010-01-20 7:58 下午

    同时很多路由器都有L4及以上的服务模块。

  6. ABCD 于 2010-01-20 7:59 下午

    >>我的印象是“persistent connection”是FIFO的方式。“pipeline”是可以同时发出多个request而不必串行等待response,这个我们可以查一下协议文档。

    目前没什么web server支持pipeline
    keep-alive主要是重用一下链接而已

  7. appleleaf 于 2010-01-20 8:37 下午

    杰夫兄,我又想了一下,pipeline虽然可以不用等待response就发送request,但是本质还是串行的。究其原因就是http transation之中没有call id的概念。因此google的东东可能是在其中增加了id,这样可以完全解决FIFO的问题。

  8. droplet 于 2010-01-20 9:04 下午

    1)听起来像是滑动窗口,只不过这里不是byte,而是一个request
    2)加密是SSL做,还是spdy做?
    3)用ipcomp是不是也可以?
    4)server也需要重写啊,这个协议是不是开放的?

  9. 大荣 于 2010-01-20 9:57 下午

    好文章学习之。

  10. 睡袋熊 于 2010-01-20 10:06 下午

    前两项改进真正戳到了http的痒处

  11. 杰夫 于 2010-01-20 10:45 下午

    加密是SSL做的,不过SPDY强制要求SSL。
    IPComp是可以做压缩,不过在IP层做,推广难度可能要大些。
    Server端也要加支持SPDY的模块。SPDY是Open source,文中给出的谷歌网页就可以下载源码。

  12. 杰夫 于 2010-01-20 10:50 下午

    还有,SPDY压缩用的是gzip算法。

  13. nlv 于 2010-01-20 11:38 下午

    从翻墙上讲有些言过其实了吧,SPDY的作用和SSL的作用差不多。只是不能关键字过滤了。IP屏蔽、DNS污染照样搞。
    应该说现在关键字过滤也主要是过滤HTTP Header,Content多半是压缩的,不好过滤的。

  14. yunhaid 于 2010-01-21 1:40 上午

    搞成私有协议还差不多,估计很难得到大众的认可。
    指望firefox,IE支持?指望Apache Server支持?
    这个要CS两个端都支持才行的。

  15. 网路游侠 于 2010-01-21 3:50 上午

    如果能爬墙,则被X是必然的……

  16. lapis 于 2010-01-21 8:07 下午

    0.默认ssl,其实和https没什么区别吧
    1.异步单连接还没同步多连接速度快吧,不过对服务器端比较省资源
    2.不太明白,传统http也是只client能发出请求
    3.有一定作用,节省大量带宽谈不上
    4.压缩可选也有可选的好处,压缩也是要消耗服务器CPU的

    13楼太低估墙的能力了,gzip之类的压缩,墙会解压再过滤关键词。。

  17. 棼分 于 2010-01-21 8:49 下午

    真搞笑,直接封你的SPDY协议就不得了

  18. wowpaladin 于 2010-01-21 9:59 下午

    墙都直接封IP,什么加密都白扯。

  19. 高飞 于 2010-01-21 10:10 下午

    封IP是最暴力也损失最大的一种。无论攻方还是守方,精细化已经是趋势。

  20. yunhaid 于 2010-01-22 12:23 上午

    封IP最实在,Youtube就是开始先搞的DNS绑架,后来被人反破了,FW就直接封IP了。

  21. Baiyssy 于 2010-01-22 7:45 上午

    最新版的Chrome和Chromium都还不支持spdy,输入spdy://www.google.com会转到搜索。支持spdy的Chrome源代码在 http://src.chromium.org/viewvc/chrome/trunk/src/net/flip/ ,但是我不知道怎么编译

  22. Apple 于 2010-01-22 7:50 下午

    P2P. SKYPE这些作了这么多加密和反识别的软件都照样过滤,这个过滤起来就是小菜。

  23. 杰克 于 2010-01-22 8:54 下午

    国际出口做过滤和企业网的显然不是一个量级。

  24. 哈哈大侠 于 2010-01-22 9:27 下午

    这个文章用的中文网址啊……不会有问题吗?

  25. leo 于 2010-01-23 12:54 上午

    这个如果要推广,是不是还要开发配套的webserver呀?前端开发人员是不是需要重新学习一套spdy的开发方法啊?
    不知道这是不是推广的一大阻力。

  26. skywalker 于 2010-01-24 8:45 上午

    写的非常好,不过似乎只有最新版的谷歌浏览器支持吧。另外我们做个友情链接好吗?/轩辕网

  27. asa 于 2010-01-24 6:00 下午

    HTTPS不也完全能满足要求

  28. eTsir 于 2010-01-24 6:55 下午

    要是出国网关把所有的spdy协议请求全封锁了就没辙了, 毕竟现在这个协议只有google自个儿在搞, 封了也没啥影响

  29. 杰夫 于 2010-01-25 10:06 上午

    skywalker: 需要做友情链接的话,请Email联系:jiefu@tektalk.cn

  30. 无知者无畏 于 2010-01-27 9:58 下午

    其实有个更好的办法:

    协议不改,浏览器用javascript解密,随便搞两下就OK,如果把输出内容伪装成图片,就更容易瞒天过海了。

    当然,不怕贼偷就怕贼惦记,这一招只能解决偶发的关键字问题,被人肉盯上了什么也白瞎。

  31. 杰克 于 2010-01-28 1:25 上午

    To 30#,

    用javascript加密,然后在对端解密?标准的浏览器能行吗? 如果标准的浏览器能行,G – F -W也行。

  32. 无知者无畏 于 2010-01-28 1:45 上午

    此法只能保证网站伪装成一个普通的,没啥敏那个感那个词的网站,很难被贼盯上,如果被贼盯上了那就什么协议也没戏了。