websocket原理、加密、解密

websocket是什么,websocket是基于tcp/ip协议封装的一套实现tcp连接的接口,或者说是工具。我们应该都知道他的业务应用逻辑。
1创建socket
2绑定
3监听
4等待数据
5接受数据
那么他和http之间有什么区别呢,websocket原理又是如何加密和解密的?
http协议:\r\n分割、请求头和请求体\r\n分割、无状态、短连接,属于超文本传输协议,对应于应用层,用于如何封装数据。
websocket协议:\r\n分割,创建连接后不断开、验证+数据加密,属于传输控制协议,对应于传输层,主要解决数据在网络中的传输。
websocket本质就是一个创建连接后不断开的socket,当连接成功之后,客户端会自动向服务端发送消息,包含: Sec-WebSocket-Key和magic_string。
什么是magic_string?
客户端向服务端发送消息时,会有一个’sec-websocket-key’和’magic string’的随机字符串(魔法字符串),
服务端接收到消息后会把他们连接成一个新的key串,进行编码、加密,确保信息的安全性。
所有服务端接收之后,会对该数据进行加密
  事实上,我们第一次发送websocket请求也是一种http请求,我们只是把请求头Upgrade设置为websocket\r\n Connection: Upgrade\r\n,该字段用于改变 HTTP 协议版本或者是换用其他协议,对于Sec-WebSocket-Key 字段,它由客户端生成并发给服务端,用于证明服务端接收到的是一个可受信的连接握手,可以帮助服务端排除自身接收到的由非 WebSocket 客户端发起的连接,该值是一串随机经过 编码的字符串,服务端通过从客户端请求头中读取 Sec-WebSocket-Key 与一串全局唯一的标识字符串魔法字符串做拼接,生成长度为160位的 SHA-1 字符串,然后进行 编码,作为 Sec-WebSocket-Accept 的值回传给客户端。即解析头部构造字典、base64加密、构建响应头、发送、客户端校验,然后进行双工通道进行数据传输,这里借助其他博主的流程图帮助大家理解
在这里插入图片描述发送的数据是加密,解密,根据payload_len的值进行处理:

-payload_len <= 125

-payload_len == 126

-payload_len == 127

获取内容:

-mask_key

数据

根据mask_key和数据进行位运算,就可以把值解析出来。
  客户端通过ws.send()发送请求、服务器接收,并且send_msg加密发送
  接收后解码指令如下例子
  在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值