抓包分析Websocket连接建⽴的全过程
Websocket连接建⽴过程
最近为了加深对Websocket协议的理解,通过wireshark抓包⼯具,对websocket建⽴连接、消息推送以及确认等⼀系列操作进⾏分析,为了⽅便后续查及回顾,特此记录。
考虑到部分⽼旧浏览器不⽀持websocket协议,采⽤socketjs,完成连接的建⽴。websocket和socket
选择协议
发送选择协议的请求
客户端向服务端发送如下请求,⽤于咨询使⽤哪类协议建⽴连接。
请求响应如下
通过响应结果,发现,该连接可使⽤websocket协议进⾏建⽴。
3次握⼿
通过响应结果,客户端开始基于websocket协议建⽴连接。
客户端向服务端发送连接请求包
服务端接收客户端报⽂
服务端接收客户端发送的报⽂,通过SYN=1,确认客户端需要建⽴连接。于是向客户端发送SYN=1,ACK=1的报⽂。同时将Acknowledgement number序号加1。
客户端接收服务端发送的报⽂,并确认
客户端接收服务发送的报⽂,检查序列号是否正确(第⼀次发送的SYN报⽂的序号 + 1),以及ACK位是否为1。若正确,则发送⼀个确认包。
⾄此,完成tcp3次握⼿。
协议转换
接着,客户端向服务端发送⼀个特殊的HTTP请求。
响应如下所⽰
101响应码,表名服务器了解客户端请求,开始切换Upgrade请求头中定义的协议。
Websocket协议本质上,是⼀个基于TCP的协议,练级连接前,完成3次握⼿后,客户端向服务端发起⼀个特殊http请求,server端解析后,应答给客户端,⾄此⼀个websocket连接完成建⽴。
连接订阅
客户端通过websocket协议,项服务端发送⼀个CONNECT命令帧
服务端接收后,返回⼀个CONNECTED命令帧
客户端向服务端发送SUBSCRIBE命令帧
在此命令帧中,客户端提供需要订阅的⽬的地地址。
消息推送与确认
服务端推送消息
服务端,通过MESSAGE命令帧,向客户端推送数据。
消息内容如下所⽰
客户端确认收到消息
客户端收到消息后,向服务端发送⼀个ack消息,⽤于确认该消息已收到。⾄此,完成Websocket连接建⽴分析操作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。