当前位置: 首页 > news >正文

计算机网络————(三)

前文二
前文一

Websocket协议

是一种存在TCP协议之上的协议
当客户端需要了解服务器是否更新就需要不断给客户端发送请求询问是否更新,这行会造成服务端压力很大
而Websocket相当于服务器一旦更新了就会给客户端发送消息表明自己更新了,类似客户端订阅了服务器,一旦服务器更新就会给客户端返回更新消息

在这里插入图片描述

在浏览器自带WS代表的就是WebSocket协议 或者是过滤器中输入is:running
表格列:
Data:消息负载。如果消息为纯文本,则此处显示。二进制操作码,此列将显示操作码的名称和代码。
Length:消息负载的长度(字节为单位)
Time:收到或发送消息的时间
消息颜色:
浅绿色:发至服务器的文本消息
白色:接收到文本消息
浅黄色:操作码
浅红色:错误

成本

1.元数据放在应用层了,HTTP放在的是头部
2.传输是基于帧,HTTP是基于流传输
3.同源策略
4.同一台主机会根据URI、子协议支持同主机同端口上的多个服务

URI格式
we-URI/wws-URI =“ws/wws :” "//“host[”:“port]path[”?"query]

在这里插入图片描述

发送四类消息
红色的消息————必选的消息
请求:
必须是GET请求且为HTTP/1.1,头部必须是HOST头部,以及
携带WebSocket-Version的版本13,并且携带连接升级的消息Connection:keep-alive,Upgrade,
并且携带升级为什么类型Upgrade:Websocket

绿色的为随机数

蓝色的为传递跨域信息

黑色的为自协议等
响应:
必须返回的响应码为101,Connection为Upgrade,以及Upgrade为websocket

绿色:服务器必须根据客户端传来的随机数生成新的编码

蓝色为响应的跨域头部信息

如何证明握手被服务器接收

请求中绿色的随机数作64位编码
然后响应中的Sec-WebSocket-Accept 使用做拼接(BASE64(SHA1(Sec-WebSocket-KeyGUID)))作为验证

消息与数据帧

Message消息
1条消息由1个或多个帧组成,这些数据帧属于同一类型
代理服务器可能合并、拆分消息的数据帧

Frame数据帧
持续帧
文本帧、二进制帧

帧的格式:
在这里插入图片描述

0——31 表示几个二位数——4个字节,红色的为必然存在的帧的头部

FIN(Finish)是一个标志位,用于TCP连接的正常关闭过程。当一个设备想要终止与另一个设备之间的TCP连接时,它会发送一个带有FIN标志位设置为1的TCP段(或称为帧)。这表示该端不再有数据要发送了,但仍然可以接收对方发来的数据

RSV1-3:默认为0,仅当使用extension扩展时,由扩展决定其值

opcode:定义了帧的类型三种——1)持续帧————0表示跟前一个帧一样。
2)非控制帧————a.1——文本帧(UTF8) b.2——二进制帧 c.3-7为非控制帧
3)控制帧————a.8——关闭帧(关闭连接) b.9——心跳帧ping c.A——心跳帧pong d.B-F——控制帧保留

非控制帧的消息分片必须保证有序
在这里插入图片描述

插入FIN=1 OP=A 表示插入了一个控制帧,并且通知对方要结束传输了,但是还有挥手协议所以还会有FIN=1的传递

内容和长度

消息内容长度组成
1.应用消息长度
2.扩展数据长度————压缩等

当内容长度为<=125字节————使用Payload len 的格式,
126-2^16-1 Payload len 值为126使用Extended payload length 16位表示长度,
216至264-1 Payload len值为127 使用Extended payload length 共8字节64位
在这里插入图片描述

发送消息的前提

确保WebSocket会话处于POEN状态
以帧来承载消息,一条消息可拆分位多个数据帧
客户端发送的帧必须基于掩码编码
一旦发送或者接收到关闭帧,连接必须处于CLOSING状态
一旦发送了关闭帧,且接收到关闭帧,连接处于CLOSED状态
TCP连接关闭后,WebSocket连接才完全关闭

客户端向服务端发送消息要做掩码处理和原因
由一种针对代理服务器的缓存污染攻击
在这里插入图片描述

实现不当的代理服务器————只能识别HTTP请求,而不能识别WebSocket的服务器
首先恶意页面通过JS发送握手,然后代理服务器正常代理进恶意服务器————成功建立了WebSocket握手
问题就在第三步,恶意页面伪造GET 请求,而实际使用FROM增的请求,因为代理服务器无法识别WebSocket协议并且认为是HTTP请求就正常
转发给服务器。然后恶意服务器再返回响应给代理服务器,此时代理服务器就将这个恶意服务器的内容放入缓存————实际应该存放正常服务器的内容。
这样正常浏览器访问页面的话就会返回恶意服务器里面的内容。

解决办法:frame-masking-key 掩码
客户器端消息:MASK为1(控制帧),传递32位无法预测的、随机的Masking-key
服务器端消息MASK为0
强制浏览器生成32位 Frame-masking-key,不能让那个js代码猜出,否则任然可以反向构造
对传输包体按照Frame-masking-key执行可对称解密的XOR异或操作,使代理服务器不识别

心跳帧格式

WebSocket用来维持长连接,如果ping-pong存在保持连接
心跳帧插在数据帧中传输
服务器->客户端 ping帧————opcode=9 可以含有数据
客户端->服务器 pong帧————opcode=A 必须与ping帧具有相同

连接关闭的流程

控制帧中的关闭帧:在TCP连接之上的双向关闭
closing 一端发送关闭帧之后,不再发送任何数据,但是可以接受数据,另外一端任然可以接受数据
closed 接收到关闭数据帧之后,不再接收到任何数据

opcode=8表示关闭帧 关闭帧仍然可以有数据,但是仅用于解释关闭会话的原因,前2字节必须为无符号整型,遵循mask掩码格式

学习来源:计客时间

相关文章:

计算机网络————(三)

前文二 前文一 Websocket协议 是一种存在TCP协议之上的协议 当客户端需要了解服务器是否更新就需要不断给客户端发送请求询问是否更新&#xff0c;这行会造成服务端压力很大 而Websocket相当于服务器一旦更新了就会给客户端发送消息表明自己更新了&#xff0c;类似客户端订阅…...

请谈谈 React 中的状态管理,如何使用 Context API 和 Redux 进行状态管理?

一、Context API 深度应用 1. 核心实现原理 通过createContext创建上下文对象&#xff0c;使用Provider组件包裹需要共享状态的组件树&#xff0c;子组件通过useContext Hook或Consumer组件消费数据。 代码示例&#xff08;主题切换场景&#xff09;&#xff1a; // 创建上…...

【考研】复试相关上机题目

文章目录 22机试回忆版1、判断燃气费描述输入格式输出格式输入样例输出样例 C o d e Code Code 2、统计闰年数量描述输入格式输出格式输入样例输出样例 C o d e Code Code 3、打印图形描述输入格式输出格式 C o d e Code Code 4、密文数据描述输入格式输出格式输入样例输出样例…...

利用机器学习实现实时交易欺诈检测

以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…...

Modelfile配置说明

参数说明翻译 参数描述值类型示例用法mirostat启用Mirostat采样以控制困惑度。&#xff08;默认&#xff1a;0&#xff0c;0禁用&#xff0c;1Mirostat&#xff0c;2Mirostat 2.0&#xff09;intmirostat 0mirostat_eta影响算法对生成文本反馈的响应速度。较低的学习率将导致调…...

labview实现有符号位16进制转二进制补码转真值

今天在用一个采集模块时&#xff0c;发现读出寄存器的数据是不同的&#xff0c;它有两种范围&#xff0c;一个时十六进制整型&#xff0c;一种是有符号位十六进制&#xff0c;对应的量程和范围也是不同的&#xff0c;针对之前读取温度没有出现负数的情况&#xff0c;应该是转成…...

浏览器深度解析:打造极速、安全、个性化的上网新体验

在数字化时代,浏览器作为我们获取信息、娱乐休闲的重要工具,其性能与功能直接影响着我们的上网体验。今天,我将为大家介绍一款备受好评的浏览器——Yandex浏览器,并深入解析其独特功能与优势,帮助大家更好地了解并选择这款上网神器。 一、知名公司背书,开源项目融合 Yan…...

JavaScript 简单类型与复杂类型-堆和栈

深入理解JavaScript中的简单类型&#xff08;基本数据类型&#xff09;与复杂类型&#xff08;引用数据类型&#xff09;如何在内存中存储对于编写高效、无误的代码至关重要。本文将探讨这两种类型的差异&#xff0c;以及它们在内存中的存储机制——栈&#xff08;Stack&#x…...

【AI+智造】DeepSeek价值重构:当采购与物控遇上数字化转型的化学反应

作者&#xff1a;Odoo技术开发/资深信息化负责人 日期&#xff1a;2025年2月24日 引言&#xff1a;从事企业信息化工作16年&#xff0c;我见证过无数企业从手工台账到ERP系统的跨越。但真正让采购和物控部门脱胎换骨的&#xff0c;是融合了Deepseek AI的Odoo数字化解决方案——…...

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

mapbox添加自定义图片绑定点击事件,弹窗为自定义组件

一、首先构建根据后端返回的数据构建geojson格式的数据&#xff0c;点位的geojson数据格式&#xff1a; {"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "…...

SVT-AV1接入ffmpeg说明

一 编译集成 Files v2.3.0 Alliance for Open Media / SVT-AV1 GitLab cd /SVT-AV1/Build/linux/ ./build.sh make install GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git ./configure --enable-libsvtav1 --enable-gpl --extra-ldflags-L/usr/loca…...

基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库&#xff0c;内置超过 150 个开箱即用的 Fluent Designer 组件&#xff0c;支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例&#xff08;Qt6 也支持&#xff09;&#xff0c;将 libQFluentWidgets.d…...

OpenCV(6):图像边缘检测

图像边缘检测是计算机视觉和图像处理中的一项基本任务&#xff0c;它用于识别图像中亮度变化明显的区域&#xff0c;这些区域通常对应于物体的边界。是 OpenCV 中常用的边缘检测函数及其说明: 函数算法说明适用场景cv2.Canny()Canny 边缘检测多阶段算法&#xff0c;检测效果较…...

多模态人物视频驱动技术回顾与业务应用

一种新的商品表现形态&#xff0c;内容几乎存在于手淘用户动线全流程&#xff0c;例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力&#xff0c;能够从供给端缓解内容生产成本高的问题&#xff0c;通过源源不断的低成本供给倒推…...

星海智算+ DeepSeek-R1:技术突破与行业应用的协同革新

一、前言 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着商业和社会的方方面面。最近爆火的DeepSeek-R1系列模型&#xff0c;以其强大的推理能力和在中文的推理、代码和数学任务高效的性能得到了全球用户的热议。该模型不仅在多项专…...

选择排序:简单高效的选择

大家好&#xff0c;今天我们来聊聊选择排序&#xff08;Selection Sort&#xff09;算法。这是一个非常简单的排序算法&#xff0c;适合用来学习排序的基本思路和操作。选择排序在许多排序算法中以其直观和易于实现的特点著称&#xff0c;虽然它的效率不如其他高效算法&#xf…...

考研/保研复试英语问答题库(华工建院)

华南理工大学建筑学院保研/考研 英语复试题库&#xff0c;由华工保研er和学硕笔试第一同学一起整理&#xff0c;覆盖面广&#xff0c;助力考研/保研上岸&#xff01;需要&#x1f447;载可到文章末尾见小&#x1f360;。 以下是主要内容&#xff1a; Part0 复试英语的方法论 Pa…...

ARM Cortex-M处理器中的MSP和PSP

在ARM Cortex-M系列处理器中&#xff0c;MSP&#xff08;主堆栈指针&#xff09;和PSP&#xff08;进程堆栈指针&#xff09;是两种不同的堆栈指针&#xff0c;主要用于实现堆栈隔离和提升系统可靠性。以下是它们的核心区别和应用场景&#xff1a; 1. 基本定义 MSP&#xff08;…...

《Keras 3 使用 NeRF 进行 3D 体积渲染》:此文为AI自动翻译

《Keras 3 使用 NeRF 进行 3D 体积渲染》 作者: Aritra Roy Gosthipaty, Ritwik Raha 创建日期: 2021/08/09 最后修改时间: 2023/11/13 描述: 体积渲染的最小实现,如 NeRF 中所示。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 在此示例中,我们展示了…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性&#xff0c;分别代表什么&#xff0c;有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...

Java中栈的多种实现类详解

Java中栈的多种实现类详解&#xff1a;Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...