万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践(19)
2023-04-29 来源:飞速影视
在上图中:简单分析了 “发送普通文本” 示例对应的数据帧格式。这里我们来进一步介绍一下 Payload length,因为在后面开发数据解析功能的时候,需要用到该知识点。
Payload length 表示以字节为单位的 “有效负载数据” 长度。
它有以下几种情形:
1)如果值为 0-125,那么就表示负载数据的长度;
2)如果是 126,那么接下来的 2 个字节解释为 16 位的无符号整形作为负载数据的长度;
3)如果是 127,那么接下来的 8 个字节解释为一个 64 位的无符号整形(最高位的 bit 必须为 0)作为负载数据的长度。
备注:多字节长度量以网络字节顺序表示,有效负载长度是指 “扩展数据” “应用数据” 的长度。“扩展数据” 的长度可能为 0,那么有效负载长度就是 “应用数据” 的长度。
另外:除非协商过扩展,否则 “扩展数据” 长度为 0 字节。在握手协议中,任何扩展都必须指定 “扩展数据” 的长度,这个长度如何进行计算,以及这个扩展如何使用。如果存在扩展,那么这个 “扩展数据” 包含在总的有效负载长度中。
PS:关于数据帧格式的详细讲解,可以深入读读以下几篇:
《WebSocket从入门到精通,半小时就够!》
《理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性》
5.4.2)掩码算法:
掩码字段是一个由客户端随机选择的 32 位的值。掩码值必须是不可被预测的。因此,掩码必须来自强大的熵源(entropy),并且给定的掩码不能让服务器或者代理能够很容易的预测到后续帧。掩码的不可预测性对于预防恶意应用的作者在网上暴露相关的字节数据至关重要。
掩码不影响数据荷载的长度,对数据进行掩码操作和对数据进行反掩码操作所涉及的步骤是相同的。
掩码、反掩码操作都采用如下算法:
j = i MOD 4
transformed-octet-i = original-octet-i XOR masking-key-octet-j
解释一下:
1)original-octet-i:为原始数据的第 i 字节;
2)transformed-octet-i:为转换后的数据的第 i 字节;
3)masking-key-octet-j:为 mask key 第 j 字节。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号