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的神秘面纱:利用Wireshark的抓包分析 -> 正文阅读

[网络协议]揭开WebSocket的神秘面纱:利用Wireshark的抓包分析

目录

一、引语

一、抓包过程

抓包软件下载

选择网络

发送WebSocket请求

设置过滤器

二、抓包分析

建立连接的流程概述

客户端:请求升级协议

服务端:同意升级协议

发送数据帧

客户端:关闭WebSocket连接

为什么需要掩码处理?

三、小结


一、引语

互联网发展迅速,最初的网页是以文本为主,但很快就发展到使用大量的图片、音频、视频,并且对页面的实时性要求也越来越高。

在学习HTTP协议后,我们知道了,人们已经陆续使用HTTP/1.1的持续连接、HTTP/2的TCP复用等技术来解决这一问题。

那么有没有其他的方式呢?答案是肯定的,那就是我们今天要介绍的WebSocket,它是一种在单个TCP连接上进行全双工通信的协议。

在这里我借助抓包软件Wireshark,图文并茂,辅助理解

一、抓包过程

抓包软件下载

Wireshark · Go Deep.

选择网络

选择电脑连接的网络,这里我使用的是校园网WLAN

发送WebSocket请求

为了便于学习,我们可以使用网站(在线websocket测试-online tool-postjson)来体验这个过程。点击“连接”,就可以向服务器端发送请求信息,建立WebSocket连接啦

设置过滤器

返回软件,你会看到眼花缭乱的抓包结果。赶紧设置过滤器为服务端的ip地址,就可以找到我们的抓包结果啦!

二、抓包分析

建立连接的流程概述

步骤1:客户端和服务端完成三次握手建立TCP连接,这一点和HTTP协议没有差异

步骤2:由客户端发起HTTP请求,升级协议为WebSocket

步骤3:只需完成一次握手后,就可以实现客户端和服务端主动发送消息内容

步骤4:客户端发送关闭帧,关闭所有连接

现在就让我们来康康,客户端和服务端都偷偷商量了啥~

客户端:请求升级协议

客户端:服务器您好!我想要升级协议为websocket,版本号为13,再给你个暗号用于咱们俩碰头~

说明:Sec-WebSocket-Key是一个“简单”的认证密钥

服务端:同意升级协议

服务端:我回复你一个状态码为101的报文,表明我收到啦。协议已经升级成了websocket,我还把暗号处理了一下,也一并回复给你~

说明:Sec-WebSocket-Accept是根据发来请求中的认证密钥,通过约定好的规则生成,依然是用于验证

到这里,只经过一次握手,客户端和服务端就成功建立了WebSocket连接,下一步就可以进行双向的通信啦!

发送数据帧

接下来让我们康康,使用WebSocket协议发送的数据帧是长的啥样子

这是我向服务端发送了一个文本信息“Hello”

这是服务器端发送给我的一个文本信息“Hello”

仔细看,你会发现如下华点:

1、我发给服务端的信息被MASK了

2、服务端发给我的信息是裸奔的

3、WebSocket的数据帧其实蛮短的

光看抓包结果,当然是云里雾里,这个时候就要打开我们的RFC6455文档,翻到第28页,来康康它写的都是个啥(敲重点!)

前2个字节是必须存在的帧首部,详情如下:


FIN:是否为消息的最后一帧,是扣1、不是扣0

RSV1、2、3:保留部分,没啥用(高情商:未雨绸缪)

opcode:帧类型,说明这个帧是干嘛用的,若值为1,该帧为文本类型

MASK:数据是否需要掩码处理,需要的请扣1

Payload len:数据的长度,长度的最大值是可以调整的,有7、7+16、7+64三种模式

Mask-key:若进行了掩码处理,则在此处填写4个字节的掩码


以上看不懂也没关系,简单来说,首部=结束标志位+操作码+帧长度+掩码

注意,以上所有双向通信、数据传输的过程,都是在同一个TCP连接下进行的,这是该协议最大的特点

客户端:关闭WebSocket连接

客户端:我要讲的东西都讲完了,给你发个关闭帧,后面我就没话说了,挂啦~

服务端:收到关闭帧啦,那我也不发消息烦你了,拜拜~

说明:opcode=8(二进制:1000),数值8代表此帧的类型为关闭帧

为什么需要掩码处理?

不难看出,客户端发出的消息包裹的很紧,而服务端发出的消息一直在裸奔,两者形成了鲜明的对比。

为什么客户端向服务器发送数据需要掩码处理?其实这是RFC6455的规定,主要是为网络安全考虑,防止出现“缓存污染攻击”,即防止HTTP代理服务器被攻击。


举个例子,我是个坏蛋,我有一台电脑和一台服务器,我看一台代理服务器不爽,想捉弄它。

我的电脑-->代理服务器:麻烦把这条消息,送给我的服务器

代理服务器:好嘞!

代理服务器-->我的服务器:好兄弟,你这来消息啦!

我的服务器:啥玩意啊?我不收,我故障了,这会收不了

代理服务器:那咋办啊?给你你不要,又是交给你的,那要不先先放我缓存里

Two Hours Later 。。。。。。

代理服务器:之前是不是谁有条消息放我缓存了,完了我找不到了,是不是错发出去了?


看完这段描述,大家能否意识到危险了?假如我塞给代理服务器的,是条伪造的破坏消息呢?指不定就发了给哪位倒霉蛋。

然而,在设置了掩码的条件下,消息是乱七八糟的字符,HTTP代理服务器就不会缓存下来尝试解码转发,这样就防止了恶意攻击。

如图,Masked Payload是经过掩码处理的天书,这样发给代理服务器,它就会因为看不懂而直接转发了,会使网络更安全。

三、小结

不难看出,WebSocket(又称“网套”)是一种全双工通信,它使得客户端和服务器之间的数据交换变得更加简单,且允许服务端主动向客户端推送数据。

WebSocket显然解决了传统的“轮询”模式带来的缺点,因为HTTP请求每次都要携带完整的首部。建立websocket连接后交换数据,能够显著减少用于协议控制的数据包首部。

在WebSocket中,浏览器和服务器只需要一次握手,就直接可以创建持久性的连接,并进行双向的数据传输。由于协议是全双工的,服务器可以随时主动给客户端发送数据,相比HTTP的请求-响应模式,这种方式的延迟明显更少,更适合用于对实时性要求高的应用场景。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 13:09:19  更:2021-10-27 13:09:52 
 
开发: 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:59:21-

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