从websocket协议出发,了解应用层协议,传输层协议,网络的7层协议
其他关联连接 :TCP的三次握手(建立连接)和四次挥手(关闭连接)
1、websocket是全双工,不同于传统半双工通信
传统的Web应用中,浏览器与服务器交互都是半双工通信(但并不完全是半双工通信,服务器无法主动向浏览器推送)。
ps:什么是单攻,半双工,全双工
根据信息的传送方向,【串行通信】可以进一步分为单工、半双工和全双工三种。 信息只能单向传送为"单工"; 信息能双向传送但不能同时双向传送称为"半双工"; 信息能够同时双向传送则称为"全双工"。
ps:什么是串行通讯、并行通讯
串口通信指串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
2、传统与websocket的连接步骤(都需要tcp三次握手)
传统Web应用中浏览器与服务器进行数据交互通常需要经过以下几个步骤:
- DNS查询
- TCP三次握手
- 传送HTTP请求头
- 传送HTTP请求体(如果有)
- 服务器处理后传送响应头
- 服务器传送响应体
- 断开TCP连接
在WebSocket中进行交互通常为以下几个步骤:
- DNS查询
- TCP三次握手
- WebSocket握手
- 浏览器发送请求
- 服务器发送响应
- 断开TCP连接
如果仅是一次通信,二者差异并不是很大,甚至WebSocket比普通方式还要多一次握手。但在需要频繁交互数据时,WebSocket的优势就显露出来了。
例如,当有10次数据交互时,前者要建立10个TCP连接(HTTP 1.0需要建立10次,HTTP 1.1可以通过长连接keep-alive复用TCP连接),然后要发送10次请求头(包含Cookie等信息,可能会达到K级别),接收的响应信息可能才几个字节(如某些心跳包),这样会极大的浪费带宽等资源。试想,如果你在做一个聊天应用,想要获取当前在线人数,你需要向服务器发送你的全部cookie(至少要几百个字节),除此之外HTTP头中还要包含其他信息,如URL、host等,这些都是必不可少的。最后服务器返回了几百个字节,但其中真正需要用到的只有不到10字节(只需要知道在线人数,其他信息都是无用的)。通过WebSocket,浏览器可以向服务器发送1~2字节的请求(不需要带上cookie验证身份,可以在握手时进行认证,一旦TCP连接建立,则在连接上的通信都是认证过身份的数据,这也是它的好处之一:便于服务端识别客户端的状态),这个请求仅包含一个特定的控制码(由开发者实现的应用层协议指定),服务器只需返回特定的返回码及数据即可,一切无用的字节都被省去。
3、websocket和http一样都是传输层协议、都是基于tcp应用层协议,ps:进阶了解网络的7层协议 OSI
原文:https://blog.csdn.net/ch1406285246/article/details/55504330
OSI(网络七层协议模型),想要联网必须遵循这个协议模型,我们的手机和电脑才可以联网通信
OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。
应用层
示例:TELNET,HTTP,FTP,NFS,SMTP等。
表示层
示例:加密,ASCII等。
会话层
示例:RPC,SQL等。
传输层
示例:TCP,UDP,SPX。
网络层
示例:IP,IPX等。
数据链路层
示例:ATM,FDDI等。
物理层
示例:Rj45,802.3等。