websocket 消息包粗解

最近在搞websocket解析,记录一下:

原始字符串

bash 复制代码
�~�{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success","cmdv":"success","cmdvar":"success","rndm":"success"}}},"a":"d"}}�+{"t":"d","d":{"r":9,"b":{"s":"ok","d":{}}}}

转成字节

这里重点讲一下字节的前几位,也就是字符串乱码的部分
129 126 0 142

首先我们先看下定义

1.FIN(1 bit): 表示消息是否已经完成。如果是 1,表示这是消息的最后一个帧;如果是 0,表示后面还有帧。

2.RSV1, RSV2, RSV3(各占 1 bit): 这三个标志位一般用于扩展协议或自定义协议的使用。在通常情况下,它们都是 0。

3.Opcode(4 bit): 表示帧的类型,例如,Text Frame、Binary Frame 等。常见的值有:

0x1 表示 Text Frame

0x2 表示 Binary Frame

0x8 表示 Connection Close Frame

0x9 表示 Ping Frame

0xA 表示 Pong Frame

4.Mask(1 bit): 表示是否使用掩码。WebSocket 客户端发送给服务器的消息需要进行掩码处理,而服务器发送给客户端的消息则不需要。

5.Payload Length(7 bit 或 7+16 bit 或 7+64 bit): 表示消息负载的长度。如果长度小于等于 125 字节,则使用 7 位来表示。如果长度在 126 到 65535 之间,则使用 7 位加上 16 位来表示。如果长度大于 65535,则使用 7 位加上 64 位来表示。

6.Masking Key(0 或 4 个字节): 只有在 Mask 标志位被设置为 1 时才会有这个字段。它用于对负载进行异或运算,确保数据在传输过程中不容易被篡改。

7.Payload Data: 消息的实际数据。如果设置了 Mask 标志位,需要对 Payload Data 进行掩码处理。

开始分析过程

129 转成二进制是 10000001

第一位是FIN,这里的fin是1表示这是消息的最后一个帧。

第二,三,四位是RSV1, RSV2, RSV3,这里是000,表示没有扩展协议或自定义协议

后四位是Opcode(4 bit),这里是0001,表示是 Text Frame,即带有文本数据的帧(0x1其实就是16进制的1)

前八位就分析完了,得出结论这个websocket消息是文本类型,是最后一帧,且没有没有扩展协议或自定义协议,

然后是126转成二进制是01111111

第一位是Mask,这里是0,表示没有使用掩码

后7位表示数据长度,这里是11111111,看说明,那么表示数据长度超过了125位,具体长度就要看后面的数据了。再次说明一下,这里的规则是如果长度小于等于 125 字节,则使用 7 位来表示。如果长度在 126 到 65535 之间,则使用 7 位加上 16 位来表示。如果长度大于 65535,则使用 7 位加上 64 位来表示。

接下来是 0 142 转成二进制就是00000000 10001110

从这里可以看出长度只有16位,数据长度即为142.

然后再后面的就是具体的数据了。

差不多这样就能够理解了。

相关推荐
web打印社区11 分钟前
JS 静默打印怎么做:纯前端为什么不行,以及最小可跑通写法
开发语言·前端·javascript·websocket·网络协议·http·pdf
一条破秋裤30 分钟前
TCP 并发服务器:连接分析、多线程与多进程
服务器·网络·tcp/ip
北京恒星科通刘军37 分钟前
灾害监测预警系统中,应急疏散广播的“应急叫应”实际送达率与有效性研究
网络·数据库·人工智能
TDengine (老段)1 小时前
集群从“能用“到“高可用“:副本、选主与故障切换到底怎么配
大数据·网络·数据库·物联网·oracle·时序数据库·tdengine
自己的九又四分之三站台1 小时前
TCP 与 UDP:从可靠字节流到无连接数据报,怎么选、怎么测
网络协议·tcp/ip·udp
rest10241 小时前
做io测试
linux·服务器·网络
一条破秋裤1 小时前
Linux 网络编程基础:网络分类、分层模型与数据封装
linux·运维·网络
欣欣之王来了1 小时前
5G的行业应用:工业互联网、车联网、智慧医疗中的网络支撑
网络·学习·计算机网络·安全·教程
AOI小白新手上路2 小时前
视频去雨网络的模块缝合路线 · 实践笔记
网络·笔记·音视频
Brookty2 小时前
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍
网络·tcp