1、websocket小針數(shù)據(jù)傳輸?shù)母袷剑?/h3>
- 1.1 websocket 發(fā)送"msg" 該字符長度不大于125長度通過 wireshark 抓包的顯示16進(jìn)制數(shù)據(jù)如下:
image.png
- 1.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 1.1.2
83 二進(jìn)制表示 1000 0011
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 000 0011表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 3
- 1.1.3
e4 b4 b5 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 1.1.4
89 c7 d2 表示掩碼后的數(shù)據(jù)內(nèi)容 也就是對 'msg' 字符進(jìn)行掩碼后的16進(jìn)制數(shù)據(jù)
2、websocket中針數(shù)據(jù)傳輸?shù)母袷剑?/h3>
- 2.1 websocket 發(fā)送"111...." 該字符長度大于125 小于65536 長度通過 wireshark 抓包的顯示16進(jìn)制數(shù)據(jù)如下:
image.png
- 2.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 2.1.2
fe 二進(jìn)制表示 1111 1110
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 1110表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 126 如果長度為126 數(shù)據(jù)包后兩個(gè)字節(jié)表示 包體長度
- 2.1.3
00 8c 表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 140 實(shí)際上 發(fā)送了140個(gè) 字符為"1"的字符
- 2.1.4
69 77 68 06表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 2.1.5
58 46 59 37...表示 掩碼后的數(shù)據(jù)內(nèi)容
3、websocket大針數(shù)據(jù)傳輸?shù)母袷剑?/h3>
- 3.1websocket 發(fā)送"111...." 該字符長度 大于65536 長度通過 wireshark 抓包的顯示16進(jìn)制數(shù)據(jù)如下:
image.png
- 3.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 3.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 3.1.3
00 00 00 00 00 01 7e d0表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 98000 實(shí)際上 發(fā)送了98000個(gè) 字符為"1"的字符
- 3.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 3.1.5
68 1b a1 f5...表示 掩碼后的數(shù)據(jù)內(nèi)容
4、websocket分片數(shù)據(jù)傳輸?shù)母袷剑?【chrome瀏覽器在發(fā)送數(shù)據(jù)超過最大的tcp數(shù)據(jù)發(fā)送窗口(默認(rèn)大小131072) 是會(huì)對消息進(jìn)行分片 但是Safari 、ie 是不會(huì) 至于火狐是否會(huì),我沒有測試】:
image.png
- 4.1.1
01二進(jìn)制表示 0000 0001
二進(jìn)制第一位 0表示 當(dāng)前數(shù)據(jù)已經(jīng)分片
二進(jìn)制第八位 1表示 文本消息片斷
- 4.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 5.1.3
00 00 00 00 00 02 00 00 表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 131072 實(shí)際上 發(fā)送了131072個(gè) 字符為"1"的字符
- 5.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 5.1.5
bc f4 ea d0...表示 掩碼后的數(shù)據(jù)內(nèi)容
- 5.1.6
下圖 就是數(shù)據(jù)包第二個(gè)分片 所以可以看出 websocket協(xié)議的分片數(shù)據(jù)包的格式 就是協(xié)議+內(nèi)容1 協(xié)議+內(nèi)容2 這樣的格式
image.png

image.png
- 1.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 1.1.2
83 二進(jìn)制表示 1000 0011
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 000 0011表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 3
- 1.1.3
e4 b4 b5 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 1.1.4
89 c7 d2 表示掩碼后的數(shù)據(jù)內(nèi)容 也就是對 'msg' 字符進(jìn)行掩碼后的16進(jìn)制數(shù)據(jù)
- 2.1 websocket 發(fā)送"111...." 該字符長度大于125 小于65536 長度通過 wireshark 抓包的顯示16進(jìn)制數(shù)據(jù)如下:

image.png
- 2.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 2.1.1
- 2.1.2
fe 二進(jìn)制表示 1111 1110
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 1110表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 126 如果長度為126 數(shù)據(jù)包后兩個(gè)字節(jié)表示 包體長度
- 2.1.2
- 2.1.3
00 8c 表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 140 實(shí)際上 發(fā)送了140個(gè) 字符為"1"的字符
- 2.1.3
- 2.1.4
69 77 68 06表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 2.1.4
- 2.1.5
58 46 59 37...表示 掩碼后的數(shù)據(jù)內(nèi)容
- 2.1.5
3、websocket大針數(shù)據(jù)傳輸?shù)母袷剑?/h3>
- 3.1websocket 發(fā)送"111...." 該字符長度 大于65536 長度通過 wireshark 抓包的顯示16進(jìn)制數(shù)據(jù)如下:
image.png
- 3.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 3.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 3.1.3
00 00 00 00 00 01 7e d0表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 98000 實(shí)際上 發(fā)送了98000個(gè) 字符為"1"的字符
- 3.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 3.1.5
68 1b a1 f5...表示 掩碼后的數(shù)據(jù)內(nèi)容
4、websocket分片數(shù)據(jù)傳輸?shù)母袷剑?【chrome瀏覽器在發(fā)送數(shù)據(jù)超過最大的tcp數(shù)據(jù)發(fā)送窗口(默認(rèn)大小131072) 是會(huì)對消息進(jìn)行分片 但是Safari 、ie 是不會(huì) 至于火狐是否會(huì),我沒有測試】:
image.png
- 4.1.1
01二進(jìn)制表示 0000 0001
二進(jìn)制第一位 0表示 當(dāng)前數(shù)據(jù)已經(jīng)分片
二進(jìn)制第八位 1表示 文本消息片斷
- 4.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 5.1.3
00 00 00 00 00 02 00 00 表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 131072 實(shí)際上 發(fā)送了131072個(gè) 字符為"1"的字符
- 5.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 5.1.5
bc f4 ea d0...表示 掩碼后的數(shù)據(jù)內(nèi)容
- 5.1.6
下圖 就是數(shù)據(jù)包第二個(gè)分片 所以可以看出 websocket協(xié)議的分片數(shù)據(jù)包的格式 就是協(xié)議+內(nèi)容1 協(xié)議+內(nèi)容2 這樣的格式
image.png

image.png
- 3.1.1
81 二進(jìn)制表示 1000 0001
二進(jìn)制第一位 1表示 當(dāng)前數(shù)據(jù)沒有被分片
二進(jìn)制第八位 1表示 文本消息片斷
- 3.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 3.1.3
00 00 00 00 00 01 7e d0表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 98000 實(shí)際上 發(fā)送了98000個(gè) 字符為"1"的字符
- 3.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 3.1.5
68 1b a1 f5...表示 掩碼后的數(shù)據(jù)內(nèi)容

image.png
- 4.1.1
01二進(jìn)制表示 0000 0001
二進(jìn)制第一位 0表示 當(dāng)前數(shù)據(jù)已經(jīng)分片
二進(jìn)制第八位 1表示 文本消息片斷
- 4.1.2
ff 二進(jìn)制表示 1111 1111
二進(jìn)制第一位 1表示 該數(shù)據(jù)包有掩碼
二進(jìn)制剩余位數(shù)據(jù) 111 111表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 127 如果長度為127 數(shù)據(jù)包后八位字節(jié)表示 包體長度
- 5.1.3
00 00 00 00 00 02 00 00 表示 包體的長度 如果轉(zhuǎn)成10進(jìn)制 就是 131072 實(shí)際上 發(fā)送了131072個(gè) 字符為"1"的字符
- 5.1.4
59 2a 90 c3表示 隨機(jī)4個(gè)字節(jié)的掩碼
- 5.1.5
bc f4 ea d0...表示 掩碼后的數(shù)據(jù)內(nèi)容
- 5.1.6
下圖 就是數(shù)據(jù)包第二個(gè)分片 所以可以看出 websocket協(xié)議的分片數(shù)據(jù)包的格式 就是協(xié)議+內(nèi)容1 協(xié)議+內(nèi)容2 這樣的格式

image.png