
图一
说明:
websocket协议是基于TCP的应用层协议。按照图一左边用红色长方形扩起来的序列号逐条解释。10.12.100.89是客户端ip地址,47.111.170.187是服务端ip地址。
下方红色序号的数字对应图一左边红色框圈出来的序号。
1.三次握手操作:(24,25,26)

图二
2.客户端给服务器发送http协议,告诉服务端,现在要转换成websocket协议了(27)
图二是 发送的具体协议内容,其中有4个字段:Upgrade:websocket,Connection:Upgrade,Sec-WebSocket-Version,Sec-WebSocket(这2个字段是进行校验的)。

图三
3.服务端给客户端回http协议,告诉客户端,转换成websocket协议了(29)
图三是 发送的具体协议内容,其中有3个字段:Upgrade:websocket,Connection:Upgrade,Sec-WebSocket-Accept(这个字段是进行校验的)。

图四

图五
4.介绍Websocket协议格式:
根据图五的格式:
FIN:1位,用于描述消息是否结束,如果位1表示该消息为消息尾部,如果为0则还有后续数据包。RSV1,RSV2,RSV3:各1位,用于扩展定义,没有扩展约定则必须为0.
OPCODE:4位,最多表示15种类型消息。
OPCODE的定义范围:
%x0表示连续消息片断
%x1表示文本消息片断
%x2表示二进制消息片断
%x8表示连接关闭
%x9表示心跳检查ping
%xa表示心跳检查pong
MASK:1位,用于表示PayloadData是否经过掩码处理,客户端发出的数据帧需要进行掩码处理,所以此位1。
Payload length ===x,如果
如果x值在0-125,则后面2个字节形成的16位无符号整型数的值是payload的真实长度。
如果x值是126,则后面2个字节形成的16位无符号整型数的值是payload的真实长度。
如果x值是127,则后面8个字节形成的64位无符号整型数的值是payload的真实长度。

图六

图七
5.客户端给服务端发送了应用协议数据(31)。查询图五的协议格式:
Fin等于1,表示为消息结束。
Reserved是0,
Opcode等于1表示文本消息,
Mask等于1表示是客户端发的消息。
payload等于126,后面2个字节形成的16位无符号整型数的值是payload的真实长度为253个字节(31)
图七对应的是具体的协议数据内容253个字节。

图八
6.服务端给客户端回应用协议数据(34)。查询图五的协议格式:
FIN等于1,表示为消息结束
Reserved是0,
Opcode等于1表示文本消息。
Mask等于0表示是服务端发的消息。
payload等于126,后面2个字节形成的16位无符号整型数的值是payload的真实长度为135个字节(34)
本文详细介绍了WebSocket协议的工作原理,从三次握手建立连接开始,到客户端和服务端如何通过HTTP协议切换到WebSocket,再到WebSocket数据帧的结构和消息传递。通过示例分析了数据帧的各个字段含义,并展示了客户端和服务端的交互过程。
1214

被折叠的 条评论
为什么被折叠?



