websocket / 使用 wireshark 分析 websocket 连接过程
一、連接過程時序圖
二、wireshark 分析
上圖是一個完整的進行 websocket 連接時產生的數據包。
根據時序圖可知,前 3 行是 tcp/ip 握手過程,因為可以通過標志來看到,前 3 個標志(Flags)分別為 SYN、SYN ACK、ACK。這是建立 http 請求的需要,和 websocket 沒有關系。
第 4 條就是 client 主動發給 server 的握手協議了,如下圖所示:
細心的小伙伴可以發現,這套代碼是基于 C++ 版的 websocketpp 實現的,大家可以參考下。
大家可以發現,websocket 的握手協議實際上是基于 http 協議實現的,client 告訴 server,我要升級為 websocket 了,不使用老土的 http 了。實現的方法就是 “Connection” 和 “Upgrade” 這兩個字段,
我要升級(Connection : upgrade),
升級為 websocket (Upgrade : websocket),
websocket 的版本得是 v13 的!(Sec-WebSocket-Version 13)。
第 5 條是 server 回復?client 的協議了。
狀態為 101,意味著協議切換成功。
這里?Sec-WebSocket-Accept 和?Sec-WebSocket-Key 是配套的,主要作用在于提供基礎的防護,減少惡意連接、意外連接。
Sec-WebSocket-Accept 的計算方法是:
計算公式為:
將 Sec-WebSocket-Key 跟 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接。通過 SHA1 計算出摘要,并轉成 base64 字符串。偽代碼如下:
toBase64( sha1( Sec-WebSocket-Key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 )??)?
參考鏈接:
https://blog.csdn.net/henryhu712/article/details/85090194
https://blog.csdn.net/libaineu2004/article/details/82774638
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的websocket / 使用 wireshark 分析 websocket 连接过程的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: boost / vs2017 编译 bo
- 下一篇: gdb / 调试进入 so 库的方法
