1.webscoket
2.握手handshake(open, close)
3.发送数据:3种方法
4.断开:协议层+tcp close()
1.webscoket
访问:ws://192.168.232.128:8888
协议 地址 端口
怎么判断是websocket:Upgrade:websocket
从Sec-WebSocket-Key 到Sec-WebSocket-Accpet:
//1.request:
//Upgrade:websocket 区分出协议
//Sec-WebSocket-Key: 身份 base64
//2.response:
//Sec-WebSocket-Accpet:
//为什么要加公开的GUID RFC4122上。填充的作用
//1.从Sec-WebSocket-Key 到Sec-WebSocket-Accpet:
//步骤:1.key字符拼接 key=Sec-WebSocket-Key+GUID
// 2.哈希 sha=SHA-1(key)
// 3.base64的编码 base64(sha);
2.握手handshake(open close)
为什么要握手?已经有TCP了。
多种协议共存
兼容http webserver
验证双方身份是否合法
3.发送数据
3.1报文头定义:
根据数据长度,报文头的格式:
一般数据长度: <126时:6个
=126时:8个
==127时:14个
6:
8:多了2,3两个字节
14:
3.2发送数据的最长个数:73bits
3.3明文还是密文:
mask是否为1.
如果是密文,计算如下:
3.4读取3种方式:
4.断开:
为什么要断开?因为大量close_wait
方法:应用层 websocket-->fin;//协议层
tcp close(); //tcp4次挥手