| |
|
开发:
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本身是基于TCP协议的,它将 TCP 的 Socket(套接字)应用在了web page上,从而使通信双方建立起一个保持在活动状态连接通道,并且属于全双工(双方同时进行双向通信)。 原理:?? ? ?它是先借用 HTTP协议 的 101 switch protocol 来达到协议转换的,从HTTP协议切换成WebSocket通信协议。 特点:? ? ?1.服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。其他特点包括: ? ? ? 2.建立在 TCP 协议之上,服务器端的实现比较容易。 ? ? ? 3.与 HTTP 协议有着良好的兼容性。默认端口也是 80 和 443 ,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。 ? ? ? 4.数据格式比较轻量,性能开销小,通信高效。 ? ? ??5. 可以发送文本,也可以发送二进制数据。 ? ? ? 6.没有同源限制,客户端可以与任意服务器通信。 ? ? ? 7.协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。 握手:客户端握手形式如下:
请求字段意义如下: ????????Connection: Upgrade:表示Upgrade是一个hop-by-hop的字段,这个字段是给proxy看的 如果没有该字段 ????????Upgrade: websocket:表示要升级到 websocket 协议。这个字段是给最终处理请求的程序看的。 ????????Sec-WebSocket-Version: 13:表示 websocket 的版本。如果服务端不支持该版本,需要返回一个?Sec-WebSocket-Versionheader?,里面包含服务端支持的版本号。 ????????Sec-WebSocket-Key:与后面服务端响应数据的?Sec-WebSocket-Accept是配套的,其值是16字节的随机数的被base64编码后的值。 ? ? ? ?服务器响应客户端握手请求形式如下: ????????????????
????????Sec-WebSocket-Accept:根据客户端请求的Sec-WebSocket-Key计算出来。 计算公式为: 将?Sec-WebSocket-Key跟258EAFA5-E914-47DA-95CA-C5AB0DC85B11拼接。再进行SHA1加密和BASE64编码得到的值。 数据传输数据帧格式 FIN:1 个比特。 如果是 1,表示这是? RSV1, RSV2, RSV3:各占 1 个比特。 一般情况下全为 0。当客户端、服务端协商采用 WebSocket 扩展时,这三个标志位可以非 0,且值的含义由扩展进行定义。如果出现非零的值,且并没有采用 WebSocket 扩展,连接出错。 Opcode: 4 个比特。 操作代码,Opcode 的值决定了应该如何解析后续的?
Mask: 1 个比特。 表示是否要对数据载荷进行掩码操作。从客户端向服务端发送数据时,需要对数据进行掩码操作;从服务端向客户端发送数据时,不需要对数据进行掩码操作。 如果服务端接收到的数据没有进行过掩码操作,服务端需要断开连接。 如果 Mask 是 1,那么在? Payload length:数据载荷的长度 单位是字节。为 7 位,或 7+16 位,或 1+64 位。 假设数 Payload length === x,如果
此外,如果? Masking-key:0 或 4 字节(32 位) 所有从客户端传送到服务端的数据帧,数据载荷都进行了掩码操作,Mask 为 1,且携带了 4 字节的Masking-Key。如果 Mask 为 0,则没有Masking-Key。 备注:载荷数据的长度,不包括 mask key 的长度。 Payload data:(x+y) 字节 载荷数据:包括了扩展数据、应用数据。其中,扩展数据 x 字节,应用数据 y 字节。 扩展数据:如果没有协商使用扩展的话,扩展数据数据为 0 字节。所有的扩展都必须声明扩展数据的长度,或者可以如何计算出扩展数据的长度。此外,扩展如何使用必须在握手阶段就协商好。如果扩展数据存在,那么载荷数据长度必须将扩展数据的长度包含在内。 应用数据:任意的应用数据,在扩展数据之后(如果存在扩展数据),占据了数据帧剩余的位置。载荷数据长度 减去 扩展数据长度,就得到应用数据的长度。 掩码对传输数据的处理: Masking-Key表示掩码数据 Real-Data表示需要传输数据 MaskDeal-data表示掩码处理后的数据 i 表示处理数据的第几个字节 j = i % 4
状态码:
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 5:41:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |