IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 理解WebSocket -> 正文阅读

[网络协议]理解WebSocket

Websocket详解

websocket协议介绍

1.websocket
websocket是一种标准协议,用于客户端和服务端之间进行双向数据传输,它是一种基于TCP协议的独立实现;其最大的特点是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。websocket借用http来完成一次握手,只需要一次HTTP握手,服务端就能一直与客户端保持通讯,直到关闭连接。

2.http与websocket的主要区别
在这里插入图片描述

websocket握手

1.典型的websocket握手过程

握手请求信息:
在这里插入图片描述

#两行表示发起的是websocket协议;
Upgrade:websocket
Connection:Upgrade
#websocket-key是由浏览器随机生成的,是一个Base64编码的值
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
#websocket-version表示ws的版本,询问服务端是否支持该版本
Sec-WebSocket-Version:13
#定义了服务需要的协议
Sec-WebSocket-Protocol:chat, superchat

握手响应信息
在这里插入图片描述

#101状态码表示服务器已经理解了客户端的请求
HTTP/1.1 101 Switching Protocols
#websocket-accept是经过服务器确认后的值
Sec-WebSocket-Accept:HSmrc0sMlYUkAGmm5OPpG2HaGWk==

Sec-WebSocket-Accept的计算方法:
(1)将Sec-WebSocket-Key跟258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接;
(2)通过SHA1计算出摘要,并转成base64字符串。

websocket协议分析

1.websocket报文解析
websocket包格式
在这里插入图片描述
(1) FIN:占1个bit
????0:表示不是消息的最后一个分片;
????1:表示是消息的最后的一个分片;
(2)RSV1, RSV2, RSV3:各占 1 个 bit
????一般情况下全为 0。当客户端、服务端协商采用 WebSocket 扩展时,这三个标志位可以非
0,且值的含义由扩展进行定义。如果出现非零的值,且并没有采用 WebSocket 扩展,连接出错。
(3)Opcode:4个bit
????%x0:表示一个延续帧。当 Opcode 为 0 时,表示本次数据传输采用了数据分片,当前收到的数据帧为其中一个数据分片;
????%x1:表示这是一个文本帧(frame);
????%x2:表示这是一个二进制帧(frame);
????%x3-7:保留的操作代码,用于后续定义的非控制帧;
????%x8:表示连接断开;
????%x9:表示这是一个 ping 操作;
????%xA:表示这是一个 pong 操作;
????%xB-F:保留的操作代码,用于后续定义的控制帧。
(4)Mask:1个bit
????表示是否需要对数据载荷进行掩码异或操作(1表示是,0表示否)。
(5)Payload length: 7bit or 7 + 16bit or 7 + 64bit
????表示数据载荷的长度:
????x 为 0~126:数据的长度为 x 字节;
????x 为 126:后续 2 个字节代表一个 16 位的无符号整数,该无符号整数的值为数据的长度;
????x 为 127:后续 8 个字节代表一个 64 位的无符号整数(最高位为 0),该无符号整数的值为数据的长度。
(6)Masking-key:0 or 4bytes
????当 Mask 为 1,则携带了 4 字节的 Masking-key;当 Mask 为 0,则没有 Masking-key。
????注:掩码的作用并不是为了防止数据泄密,而是为了防止早期版本的协议中存在的代理缓存污染攻击(proxy cache poisoning attacks)等问题。
(7)Payload Data:载荷数据

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:33:59  更:2021-08-25 12:34:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:43:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码