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

news/2025/2/27 1:17:03

前文二
前文一

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掩码格式

学习来源:计客时间


http://www.niftyadmin.cn/n/5869345.html

相关文章

模型蒸馏:让人工智能更智能、更小、更高效的艺术

你有没有想过,我们如何才能让一个需要巨大计算能力的庞大人工智能模型变得更精简、更快速、更强大?答案在于模型蒸馏,这是一种允许知识从大型、计算成本高昂的人工智能系统转移到较小、更高效的系统的技术,而不会牺牲智能。 什么是模型蒸馏 模型蒸馏是一种技术,其…

神经网络 - 神经元

人工神经元(Artificial Neuron)&#xff0c;简称神经元(Neuron)&#xff0c;是构成神经网络的基本单元&#xff0c;其主要是模拟生物神经元的结构和特性&#xff0c;接收一组输入信号并产生输出。 生物学家在 20 世纪初就发现了生物神经元的结构。一个生物神经元通常具有多个树…

基于GO语言的车牌识别api技术-港澳车牌文字识别

随着科技的飞速发展&#xff0c;智能化管理逐渐渗透到我们生活的方方面面。车牌识别技术作为智能交通的重要组成部分&#xff0c;不仅极大提升了交通管理的效率&#xff0c;还为市民出行带来了更多便利。而港澳地区的车牌识别技术&#xff0c;凭借其高效、精准、快速的特点&…

自动化反编译微信小程序工具-e0e1-wx

一、项目地址 https://github.com/eeeeeeeeee-code/e0e1-wx 二、简介 1.还在一个个反编译小程序吗&#xff1f;2.还在自己一个个注入hook吗&#xff1f;3.还在一个个查看找接口、查找泄露吗&#xff1f;现在有自动化辅助渗透脚本了&#xff0c;自动化辅助反编译、自动化注入…

vue2项目打包后js文件过大, 首次加载缓慢

vue2项目打包后js文件过大, 首次加载缓慢 安装插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…

QT C++ QtConcurrent::run 异步任务 简单例子

QtConcurrent命名空间提供了高级API&#xff0c;使得无需使用低级线程原语即可编写多线程程序。 ‌QtConcurrent::run‌是Qt框架中用于简化并发编程的一个功能&#xff0c;主要用于在后台线程中异步执行函数或成员函数。其主要用途包括&#xff1a; ‌异步执行函数‌&#xf…

java23种设计模式-享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;学习笔记 1. 模式定义 结构型设计模式&#xff0c;通过共享技术实现大量细粒度对象的复用&#xff0c;有效减少内存占用并提高性能。核心思想&#xff1a;分离内部状态&#xff08;可共享&#xff09;与外部状态&#xff0…

显式指定 ChromeDriver 路径

‌1️⃣ 显式指定 ChromeDriver 路径‌ 在代码中直接传递驱动路径&#xff0c;绕过 Selenium Manager 的自动检测&#xff1a; pythonCopy Code from selenium import webdriver from selenium.webdriver.chrome.service import Service# 指定 ChromeDriver 绝对路径&#xf…