WEBSOCKET研究
一、WEBSOCKET的通信方式
通过捕包可以知道,WEBSOCKET的通信至少经过如下两个阶段
1、第一阶段是HTTP连接阶段
由客户端连接服务器TCP端口,然后发出标准的HTTP GET请求。
但这个GET请求里会带一个安全码Sec-WebSocket-Key。
GET / HTTP/1.1\r\n
Host: 192.168.120.33:8080\r\n
Connection: Upgrade\r\n
Upgrade: websocket\r\n
Sec-WebSocket-Version: 13\r\n
Sec-WebSocket-Key: tRbfQhJzXEBmQlEIjVyIDA==\r\n
\r\n
2、WEBSOCKET服务器要判断这个KEY,如果存在,就要获取下来
以便于后续认证
并回复101升级,同时带一个服务器的KEY:Sec-WebSocket-Accept
HTTP/1.1 101 Switching Protocols\r\n
Upgrade: websocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Accept: a2TlOCxzgJ30SiwCycOC4A8CHCE=\r\n
\r\n
3、 这样双方就有了一个通信密钥交互结果
在服务端给客户端发送数据时,会带一个WEBSOCKET的头:
WebSocket
0… … = Fin: False
.000 … = Reserved: 0x0
… 0010 = Opcode: Binary (2)
0… … = Mask: False
.111 1110 = Payload length: 126 Extended Payload Length (16 bits)
Extended Payload length (16 bits): 4082
Payload
头共32位。
前16位,是选项位以及长度标识
后16位,是长度