您的位置:首页 > 理论基础 > 计算机网络

Websocket TCP/IP Http 协议的关系

2016-09-13 11:27 1101 查看
作者:吴桐

链接:http://www.zhihu.com/question/20215561/answer/58593827

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

先说结论:“websocket出现是因为浏览器不给开后门”,“不是WebSocket基于HTTP,相反,可以看成可以看成可以看成HTTP基于WebSocket”。

要理解为什么会出现HTTP,WebSocket,可以做这样一个假设。

假设平行宇宙1984年(我懒的查数据,所以就说一个平行宇宙了,随便看看吧),人们使用TCP协议进行通讯,假设那时候还没有网页浏览器这一说法,大家都是通过各种软件直接通讯。

假设到了1986年,人们使用浏览器来浏览网页,假设当时电脑时100MHz,100M内存。对TCP协议熟悉一点,大概也能猜到一个TCP链接,会消耗一点点内存,假设是32k(具体我也不知道),那么如果一台几万块钱的服务器最大能支持100M/32k=3200个连接。显然,如果一个公司,面向全世界提供网页服务,如果使用TCP,最多也就3200个人同时看网页。

于是服务器要求“所有客户端,打开网页之后,必须关闭TCP连接”。这就是(猜测的)HTTP的初衷了。

按照这个协议,服务器接受TCP连接,几秒钟之内读取数据,检验之后,回复数据,断开连接。所谓的节省“资源”也没说明白到底节省了什么“资源”。

等到二十年后,平行宇宙的2004年,QQ桌面版好好的,QQ网页版用的越来越多。由于浏览器都是连接之后很快断开,QQ网页版,只能靠各种polling方式持续交互数据(HTTP keep-alive也有自己的缺点,其他答主讲的很好),浪费大量的带宽(这时候带宽的费用就大了),同时客户端收到消息也不及时,还有各种其它问题。

QQ网页版想直接用TCP协议长时间连接,但是QQ网页版能做的,都是浏览器允许做的。可以说,websocket的出现,就是因为浏览器不支持TCP直连,不给开后门。

于是“希望所有的浏览器都能够直接进行TCP连接”,于是浏览器出现了websocket协议。

所以,因为某些原因,人们在TCP上面弄了一个HTTP协议,把TCP支持的一些特性删除了,然后若干年之后想要那些被删除的特性,返回TCP,于是出现了WebSocket。

WebSocket实际上可以看作HTTP的降级!“不是WebSocket基于HTTP,而是可以看成可以看成可以看成HTTP基于WebSocket”。

具体协议细节其他答主讲的很好,就不重复了。包括从串口模拟出TCP,再模拟出HTTP,流接口变成块接口,都无所谓了。

HTTP和WebSocket都是应用层协议,传输层协议是TCP,应用层解决如何包装数据问题,HTTP和WebSocket两者的差距不大。

浏览网页时,经过三个过程

1、浏览器经过三次握手与web服务器建立链接,

2、web服务器返回响应

3、浏览器通过四次握手主动断开链接

因为第三步导致不能持久链接,那我们去掉第三步不就可以了实现持久链接了吗?这就是WebSocket与HTTP最大的不同(Web服务器是不会主动断开连接的),当然还有更多的数据封装格式的不同。

可以看到WebSocket是在HTTP上做的改动,我曾经用单片机的TCP/IP协议栈封装符合HTTP协议格式的字符串,去连接Web服务器。WebSocket和HTML5没有多大关系。

作者:长风

链接:http://www.zhihu.com/question/20215561/answer/16147953

来源:知乎

著作权归作者所有,转载请联系作者获得授权。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: