建立一个网站的步骤,wordpress更改主站点,巴州住房和城乡建设局网站,ps美工教程自学网一、前言
上一篇 WebSocket实战之一 讲了WebSocket一个极简例子和基础的API的介绍#xff0c;这一篇来分析一下WebSocket的协议#xff0c;学习网络协议最好的方式就是抓包分析一下什么就都明白了。
二、WebSocket协议 本想盗一张网络图#xff0c;后来想想不太好#x…一、前言
上一篇 WebSocket实战之一 讲了WebSocket一个极简例子和基础的API的介绍这一篇来分析一下WebSocket的协议学习网络协议最好的方式就是抓包分析一下什么就都明白了。
二、WebSocket协议 本想盗一张网络图后来想想不太好还是自己画了一张。
1、WebSocket握手
WebSocket握手是用一个特殊的HTTP请求和响应来完成客户端握手请求头会携带Upgrade:websocket表示请求将协议升级为WebSocket协议。 响应码 101 表示同意将协议进行升级Sec-WebSocket-Accept是从请求的Sec-WebSocket-key继承而来包含一个特殊的响应值必须和客户端预期精确匹配才能握手成功。Sec-WebSocket-AcceptBase64(SHA1(Sec-WebSocket-keyKEY_SUFFIX))。
2、发送数据
WebSocket握手成功连接打开后客户端和服务端就可以在任何时候相互发送数据在昨天简单例子中客户端open事件加上发送信息在浏览器可以看到发送的消息和接收到的消息。这就是和HTTP最本质的区别只要握手完成后无论哪一端想发送数据就发送而不是像HTTP那样服务端一定要等客户端的请求然后做出响应。 将前一节例子客户端也改成每隔5秒发送一条数据。 在浏览器控制台Message标签可以查看Send向上箭头和Receive向下箭头的数据全双工相互发送。
3、关闭握手
终止连接的端点发送一个数字代码以及关闭原因字符串关闭握手能正常关闭连接使应用程序可以区分出是有意关闭还是意外终止连接。
三、抓包分析
IP:115.192.133.59 WebSocket客户端
IP:172.16.79.224 WebSocket服务端内网IP
为了便于查看数据包内容代码稍微调整将客户端服务端持续发送数据去掉
服务端改为接连发送三条数据 客户端改为不发送消息而只在收到消息后关闭websocket 1、【1、2、3】开始三个包就是普通的TCP三次握手。
2、【4】第4个包是请求头携带了Upgrade:websocket的普通HTTP请求。
3、【5】服务端一个TCP响应包【6】服务端一个HTTP响应包101 Switching Protocols告诉客户端协议进行升级。
4、【7、8、9】第7、8、9个包服务端向客户端以WebSocket协议发送了三个包WebSocket以帧格式发送消息内容 Fin1位用来表明这是一个消息的最后的消息片断当然第一个消息片断也可能是最后的一个消息片断. RSV1, RSV2, RSV3: 分别都是1位如果双方之间没有约定自定义协议那么这几位的值都必须为0,否则必须断掉WebSocket连接. Opcode:4位操作码定义有效负载数据如果收到了一个未知的操作码连接也必须断掉以下是定义的操作码. Payload length: 传输数据的长度以字节的形式表示. Payload data: 负载数据,这一帧里传的数据是 【b】.
5、【10、11、12、13】客户端向服务端发送4个TCP应答包应该是对收到消息的一个应答
6、【14】客户端调用close方法关闭websocket连接可以看到在关闭之前服务端包已经发出来了。
7、【15】服务端对客户端的close进行了应答关闭了连接。
8、【16、17、18、19、20】 TCP的4次挥手另外一个包没搞清楚是做什么的。
四、总结
WebSocket是基于TCP的与HTTP同样也是应用层协议但WebSocket的首次握手是依赖于HTTP协议握手成功协议升级为WebSocket然后就是长连接可以相互一直发送消息而不再是HTTP的那种请求/响应机制另外可以看到客户端的端口在开始随机用了一个值是52914后在关闭之前一直会用同一端口这样才能找得到IP用来找机器端口用来找应用。
注下一篇再介绍一下心跳机制以及断开重连机制。