如何理解 TCP/IP, SPDY, WebSocket 三者之间的关系?
1楼(站大爷用户)
1. http的不足
OSI协议分为7层,目前主流TCP/IP分为4层。TCP/IP的最高层(应用层),隐式地需要实现会话层,表示层,应用层这三层的功能。(如果你认为OSI细分7层是有道理的话)。
对于HTTP协议来说,在TCP传输层上实现了端到端的连接之后,没有进一步地将此通道复用的实现了。如果将HTTP协议看作OSI模型的第七层协议,它也确实没有义务来实现将TCP传输层通道细分精分的。
如何高效率的利用一个传输层通道?
因为TCP的“三次握手”,“四次分手”,“慢启动”等特性,HTTP的在某些使用场景下,响应速度会比较慢,而且由于HTTP固定的头部带了的传输开销,所以可以在以下方面改善:
1,传输通道分成多个子通道,来标识不同的会话。
2,每个会话分离出多个事务(协议帧)。
HTTP协议本身的C-S模型,也限制了服务器不能主动发起一个异步请求。
所以SPDY协议在改善HTTP响应速度,传输效率,异步方式,安全等方面,都做了改善,比如:
1. TCP层的多路复用。在一个TCP连接上,同时承载多个HTTP请求,并具有优先级控制。
2. HTTP头部压缩,减少冗余数据。同一个会话具有的某些固定的上下文信息,不必每次都通过无状态的HTTP头来传输。
3. 使用SSL作为传输层上的安全封装。
4. 使用gzip压缩数据。
5. 异步模式, server可以主动发起请求,可以带来更多的业务类型。
2楼(未知网友)
SPDY and Its Relation to WebSockets
http://britg.com/2012/03/15/spdy-and-its-relation-to-websockets/
SPDY is an augmentation to HTTP with the goal of making synchronous HTTP requests faster.
WebSockets is an alternative to HTTP with the goal of facilitating real time communication.
3楼(未知网友)
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议。在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议。
一、HTTP的不足
HTTP协议经过多年的使用,发现了一些不足,主要是性能方面的,包括:
HTTP的连接问题,HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1支持持久连接)
因为TCP连接的建立过程是有开销的,如果使用了SSL/TLS开销就更大。
在浏览器里,一个网页包含许多资源,包括HTML,CSS,JavaScript,图片等等,这样在加载一个网页时要同时打开连接到同一服务器的多个连接。
HTTP消息头问题,现在的客户端会发送大量的HTTP消息头,由于一个网页可能需要50-100个请求,就会有相当大的消息头的数据量。
HTTP通信方式问题,HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应用需要不断地轮询服务器。
而SPDY和WebSocket是从不同的角度来解决这些不足中的一部分。除了这两个技术,还有其他技术也在针对这些不足提出改进。
二、SPDY
SPDY的主要目的是减少50%以上的页面加载时间,但是呢不增加部署的复杂性,不影响客户端和服务端的Web应用,只需要浏览器和Web服务器支持SPDY。主要有以下几点:
多路复用,一个TCP连接上同时跑多个HTTP请求。请求可设定优先级。
去除不需要的HTTP头,压缩HTTP头,以减少需要的网络带宽。
使用了SSL作为传输协议提供数据安全。
对传输的数据使用gzip进行压缩
提供服务方发起通信,并向客户端推送数据的机制。
实质上,SPDY就是想不影响HTTP语义的情况下,替换HTTP底层传输的协议来加快页面加载时间。
SPDY的解决办法就是设计了一个会话层协议--帧协议,解决多路复用,优先级等问题,然后在其上实现了HTTP的语义。
三、WebSocket
WebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。
本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。
由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。
WebSocket也有自己一套帧协议。
四、SPDY和WebSocket的关系
SPDY和WebSocket的关系比较复杂。
补充关系,二者侧重点不同。SPDY更侧重于给Web页面的加载提速,而WebSocket更强调为Web应用提供一种双向的通讯机制以及API。
竞争关系,二者解决的问题有交集,比如在服务器推送上SPDY和WebSocket都提供了方案。
承载关系,试想,如果SPDY的标准化早于WebSocket,WebSocket完全可以侧重于API,利用SPDY的帧机制和多路复用机制实现该API。 Google提出草案,说WebSocket可以跑在SPDY之上。WebSocket的连接建立在SPDY的流之上,将WebSocket的帧映射到SPDY的帧上。
融合关系,如微软在HTTP Speed+Mobility中所做的。
五、题外话
1. HTTP Speed+Mobility
还有一个有趣的技术叫做HTTP Speed+Mobility,和SPDY一样都是HTTP 2.0标准的竞争者,HTTP Speed+Mobility来自微软。HTTP SM借鉴了SPDY和WebSocket的协议,将二者揉为一体,又有所取舍。
HTTP SM的设计原则包括:
保留HTTP的语义,这一点和SPDY一致,但也正应如此,抛弃了SPDY里的ServerPush。
遵守分层的网络架构,TCP能做的,HTTP SM不做,因此去除了SPDY的流控。
使用现有标准,因此使用HTTP/1.1 Upgrade header机制,借用了WebSocket的握手机制和帧格式(RFC6455)。
客户端掌握内容的控制,因此不强制使用压缩和SSL/TLS。
考虑到网络的费用和电力,这点考虑到了移动设备以及物联网,提供了Credit Control机制。
HTTP SM分以下几层:
会话层和帧协议,这部分取自WebSocket协议。包括握手机制,以及帧格式。
流层(包括多路复用),这部分主要借鉴SPDY,包括多路复用,流优先级,但增加了Credit Control。这部分作为 WebSocket协议的扩展。
HTTP层,在流层上实现HTTP语义,这部分也借鉴自SPDY。
2. Network-Friendly HTTP
NF是HTTP 2.0候选方案之一,主要提出以下改进:
对HTTP头的名称进行二进制编码
对通用HTTP头进行分组
请求/应答的多路复用
分层模型
NF同样定义了帧和流,
3. WAKA
WAKA也是HTTP 2.0候选方案之一,是HTTP协议原作者Roy Fielding提出的一个提案。
WAKA支持多路复用,支持优先级。WAKA提出了两个新的HTTP方法,RENDER和MONITOR。