1、websocket小针数据传输的格式:
- 1.1 websocket 发送"msg" 该字符长度不大于125长度通过 wireshark 抓包的显示16进制数据如下:
- 1.1.1
81 二进制表示 1000 0001
二进制第一位 1表示 当前数据没有被分片
二进制第八位 1表示 文本消息片断
- 1.1.1
- 1.1.2
83 二进制表示 1000 0011
二进制第一位 1表示 该数据包有掩码
二进制剩余位数据 000 0011表示 包体的长度 如果转成10进制 就是 3
- 1.1.2
- 1.1.3
e4 b4 b5 c3表示 随机4个字节的掩码
- 1.1.3
- 1.1.4
89 c7 d2 表示掩码后的数据内容 也就是对 'msg' 字符进行掩码后的16进制数据
- 1.1.4
2、websocket中针数据传输的格式:
- 2.1 websocket 发送"111...." 该字符长度大于125 小于65536 长度通过 wireshark 抓包的显示16进制数据如下:
- 2.1.1
81 二进制表示 1000 0001
二进制第一位 1表示 当前数据没有被分片
二进制第八位 1表示 文本消息片断
- 2.1.1
- 2.1.2
fe 二进制表示 1111 1110
二进制第一位 1表示 该数据包有掩码
二进制剩余位数据 111 1110表示 包体的长度 如果转成10进制 就是 126 如果长度为126 数据包后两个字节表示 包体长度
- 2.1.2
- 2.1.3
00 8c 表示 包体的长度 如果转成10进制 就是 140 实际上 发送了140个 字符为"1"的字符
- 2.1.3
- 2.1.4
69 77 68 06表示 随机4个字节的掩码
- 2.1.4
- 2.1.5
58 46 59 37...表示 掩码后的数据内容
- 2.1.5
3、websocket大针数据传输的格式:
- 3.1websocket 发送"111...." 该字符长度 大于65536 长度通过 wireshark 抓包的显示16进制数据如下:
- 3.1.1
81 二进制表示 1000 0001
二进制第一位 1表示 当前数据没有被分片
二进制第八位 1表示 文本消息片断
- 3.1.1
- 3.1.2
ff 二进制表示 1111 1111
二进制第一位 1表示 该数据包有掩码
二进制剩余位数据 111 111表示 包体的长度 如果转成10进制 就是 127 如果长度为127 数据包后八位字节表示 包体长度
- 3.1.2
- 3.1.3
00 00 00 00 00 01 7e d0表示 包体的长度 如果转成10进制 就是 98000 实际上 发送了98000个 字符为"1"的字符
- 3.1.3
- 3.1.4
59 2a 90 c3表示 随机4个字节的掩码
- 3.1.4
- 3.1.5
68 1b a1 f5...表示 掩码后的数据内容
- 3.1.5
4、websocket分片数据传输的格式: 【chrome浏览器在发送数据超过最大的tcp数据发送窗口(默认大小131072) 是会对消息进行分片 但是Safari 、ie 是不会 至于火狐是否会,我没有测试】:
image.png- 4.1.1
01二进制表示 0000 0001
二进制第一位 0表示 当前数据已经分片
二进制第八位 1表示 文本消息片断
- 4.1.1
- 4.1.2
ff 二进制表示 1111 1111
二进制第一位 1表示 该数据包有掩码
二进制剩余位数据 111 111表示 包体的长度 如果转成10进制 就是 127 如果长度为127 数据包后八位字节表示 包体长度
- 4.1.2
- 5.1.3
00 00 00 00 00 02 00 00 表示 包体的长度 如果转成10进制 就是 131072 实际上 发送了131072个 字符为"1"的字符
- 5.1.3
- 5.1.4
59 2a 90 c3表示 随机4个字节的掩码
- 5.1.4
- 5.1.5
bc f4 ea d0...表示 掩码后的数据内容
- 5.1.5
- 5.1.6
下图 就是数据包第二个分片 所以可以看出 websocket协议的分片数据包的格式 就是协议+内容1 协议+内容2 这样的格式
- 5.1.6
网友评论