Websocket TCP/IP Http 协议的关系

作者:吴桐
链接: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
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值