WebSocket协议探究(序章)
生活随笔
收集整理的這篇文章主要介紹了
WebSocket协议探究(序章)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一 WebSocket協(xié)議基于HTTP和TCP協(xié)議
- 與往常一樣,進入WebSocket協(xié)議學習之前,先進行WebSocket協(xié)議抓包,來一個第一印象。
- WebSocket能實現(xiàn)客戶端和服務(wù)器間雙向、基于消息的文本或二進制的數(shù)據(jù)傳輸。
- HTTP握手機制用于協(xié)商連接參數(shù)
- 二進制消息分幀機制用于支持低開銷的數(shù)據(jù)傳輸
- WebSocket協(xié)議特點:
- 連接協(xié)商和同源策略
- 與既有 HTTP 基礎(chǔ)設(shè)施的互操作
- 基于消息的通信和高效消息分幀
- 子協(xié)議協(xié)商及可擴展能減少通信量
二 抓包分析
- WebSocket客戶端(MQTTBox)
- IP:192.168.1.10
- port:2994
- WebSocket服務(wù)器(Eclipse的MQTT服務(wù)器)
- IP:198.41.30.241
- port:80
1 TCP三次握手
192.168.1.10 198.41.30.241 TCP 2994 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1 198.41.30.241 192.168.1.10 TCP 80 → 2994 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1412 SACK_PERM=1 WS=64 192.168.1.10 198.41.30.241 TCP 2994 → 80 [ACK] Seq=1 Ack=1 Win=66304 Len=0注:TCP講解了很多遍了,就簡單貼出來了。
2 HTTP協(xié)議交換
# 1.客戶端 -> 服務(wù)器 ,HTTP升級Webscoket請求 192.168.1.10 198.41.30.241 HTTP 310 GET /ws HTTP/1.1 Hypertext Transfer ProtocolGET /ws HTTP/1.1\r\n # Method url 協(xié)議版本Connection: Upgrade\r\n # 升級協(xié)議Upgrade: websocket\r\n # 升級為webscoketHost: iot.eclipse.org\r\n # 主機名Sec-WebSocket-Version: 13\r\n # websocket版本Sec-WebSocket-Key: MTMtMTU0NDE1NjY2MjM2NA==\r\n # 客戶端標識符Sec-WebSocket-Protocol: mqtt\r\n # 子協(xié)議Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n # 拓展屬性# TCP應(yīng)答報文 198.41.30.241 192.168.1.10 TCP 60 80 → 2994 [ACK] Seq=1 Ack=257 Win=15680 Len=0# 2.服務(wù)器 -> 客戶端,協(xié)議升級應(yīng)答 198.41.30.241 192.168.1.10 HTTP 213 HTTP/1.1 101 Switching Protocols Hypertext Transfer ProtocolHTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\n# base64(sha1(客戶端標識符+固定UUID))Sec-WebSocket-Accept: pC5iSVAHF4dkYCnA6rA0VDfEpuI=\r\nSec-WebSocket-Protocol: mqtt\r\n3 數(shù)據(jù)傳輸
- HTTP協(xié)議升級為WebSocket協(xié)議后,并不適用HTTP報文封裝WebSocket報文,而是直接基于TCP報文。
- 報文的格式為二進制或字符。
- 發(fā)送方需要設(shè)置Mask為True,并發(fā)送Masking-Key;Masking-Key會一直變化。(解析方式以后細說)
注:MQTT報文請參考MQTT協(xié)議探究(一)
參考:
- 《圖解HTTP》
- 《Web性能權(quán)威指南》
轉(zhuǎn)載于:https://www.cnblogs.com/linzhanfly/p/10083161.html
總結(jié)
以上是生活随笔為你收集整理的WebSocket协议探究(序章)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web 前端基本框架
- 下一篇: Python_day4