WebSocket协议数据格式解析

本文详细介绍了WebSocket协议的工作原理,从三次握手建立连接开始,到客户端和服务端如何通过HTTP协议切换到WebSocket,再到WebSocket数据帧的结构和消息传递。通过示例分析了数据帧的各个字段含义,并展示了客户端和服务端的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                图一

说明:

      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)

 

 

                                                                                                

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值