聊聊wireshark的进阶使用功能 | 京东云技术团队
1. 前言
emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组的讨论机会,私下对wireshark的一些进阶功能,比如专家模式、图表等功能进行调研,并结合实际场景抓包分析对功能进行对照说明。

2. wireshark中的分析菜单——专家模式
2.1什么是专家模式?
Wireshark的专家信息是非常强大的一个分析模块,分别对错误、警告、注意、对话等数据信息做出分类和注释,对网络故障分析提供了强有力的信息依据,让你准确快速地判断出故障点,并进行下一步处理。

2.2 严重性级别的每种分类分别代表什么含义?
◦对话(Chat):关于正常通信的基本信息;
◦注意(Note):正常通信时的异常数据包;
◦警告(Warn):不是正常通信中的异常数据包(个人理解为:非正常的通信产生的数据包);
◦错误(Error):数据包中的错误,或者解析器解析时的错误;
2.3 除了严重性级别之外,专家信息项还按组进行了分类:
◦假设(Assumption):协议字段的数据不完整,根据假定值进行了剖析
◦检验和(Checksum):校验和无效
◦注释(Comment):数据包注释
◦调试(Debug):调试信息,你不应该在wireshark的发布版本中看到这个组
◦解密(Decryption):解密问题
◦已弃用(Deprecated):协议字段已经被弃用
◦畸形的(Malformed):格式错误的数据包或者解析程序有错误。此数据报的解析已中止
◦协议(Protocol):违反协议规范(比如无效字段值或者非法长度)。可能会继续对该数据包进行解析
◦重新组装():重新组装时出现问题。比如,不是所有的碎片都可用,或者在重新组装期间发生异常
◦请求代码(Request Code):一个应用程序请求。通常分配聊天级别。
◦响应代码(Response Code):应用程序响应代码表示潜在问题,比如找不到HTTP 404
◦安全(Security):安全问题,比如不安全的实现
◦序列(Sequence):协议序列号可疑,比如它不连续或者检测到重传
◦未编码(Undecoded):解析不完整或者数据因为其他问题无法解码
2.4 TCP的14种专家模式?
◦对话消息(Chat):
窗口更新(window update)_:_由接收者发送,用来通知发送者TCP接收窗口的大小已经发生变化。

◦注意消息(Note):
▪ 重复ACK(Duplicate ACK )_:_当一台主机没有收到下一个期望序列号的数据包时,会生成最近一次收到的数据的重复ACK。
注意:其实重复确认本身并不是问题,但如果接收方连续发送多个重复确认,则可以视为网络拥塞的信号。TCP协议中定义了一种拥塞控制机制,在发现网络拥塞时会触发这个机制,以减缓数据传输的速度,从而避免拥塞的加剧。 快速重传:当TCP接收方连续发送三个重复确认时,发送方就会认为一个数据包已经丢失,并立即进行快速重传(Fast Retransmit)操作。它会重新发送那个没有收到确认的数据包,而不是等待超时时间后再重传。这样做可以尽快地填补丢失的数据包,提高数据传输速度和效率。

▪TCP重传(retransmission)_:_数据包丢失的结果。发生在收到重传的ACK, 或者数据包的重传计时器超时的时候。

▪零窗口探查_:_在一个零窗口包被发送出去后,用来监视TCP接收窗口的状态。
▪零窗口探查ACK:用来响应零窗口探查数据包。
▪保活(TCP Keep-Alive Segment):当一个连接的保活数据出现时触发。
▪保活ACK(ACK to Tcp keep-alive):用来响应保活数据包。

▪窗口已满:用来通知传输主机接受者的TCP窗口已满。
•警告信息(Warn):
◦上一段丢失(Previous segments not captured):指明数据包丢失。发生在当数据流中一个期望序列号被跳过时。

◦收到丢失数据包的ACK(ACKed segment that was not captured):发生在当一个数据包被确认丢失但在之后收到了这个已经被确认丢失的数据包的ACK数据包。
◦零窗口(TCP Zero Window):当接收方已经达到TCP接收窗口大小时,发出一个零窗口通知,要求发送方停止传输数据。可能是网络拥塞或接收方未及时处理数据等原因导致的。
◦乱序:当数据包被乱序接收时,会利用序列号进行检测。

◦快速重传输:一次重传会在收到一个重复ACK的20毫秒内进行。
3. 统计菜单——IO图表、数据流图
3.1 IO图表的用途?
Wireshark IO Graph能把原始数据过滤并把数据以图表的形式展示出来,是一个非常好用的工具。 基本的Wireshark IO Graph会显示抓包文件中的整体流量情况。X轴为时间,Y轴是每一时间间隔的报文数。默认情况下,X轴时间单位为1s,Y轴是Packet/tick,可以自己调节单位。通过调节单位,对于查看流量中的波峰/波谷很有帮助。
3.2 一些常用的排错过滤条件?
对于排查网络延时/应用问题有一些过滤条件是非常有用的,下面罗列了一些常用的过滤条件:
◦tcp.analysis.lost_segment:表明已经在抓包中看到不连续的序列号。报文丢失会造成重复的ACK,这会导致重传。
◦tcp.analysis.duplicate_ack:显示被确认过不止一次的报文。大量的重复ACK是TCP端点之间高延时的迹象。
◦tcp.analysis.retransmission:显示抓包中的所有重传。如果重传次数不多的话还是正常的,过多重传可能有问题。这通常意味着应用性能缓慢和/或用户报文丢失。
◦tcp.analysis.window_update:将传输过程中的TCP window大小图形化。如果看到窗口大小下降为零,这意味着发送方已经退出了,并等待接收方确认所有已传送数据。这可能表明接收端已经不堪重负了。
◦tcp.analysis.bytes_in_flight:某一时间点网络上未确认字节数。未确认字节数不能超过你的TCP窗口大小(定义于最初3此TCP握手),为了最大化吞吐量你想要获得尽可能接近TCP窗口大小。如果看到连续低于TCP窗口大小,可能意味着报文丢失或路径上其他影响吞吐量的问题。
◦tcp.analysis.ack_rtt:衡量抓取的TCP报文与相应的ACK。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等)。
3.3 IO图表中的一些常用的函数?
IO Graphs有六个可用函数:SUM, MIN, AVG, MAX, COUNT, LOAD。
◦MIN(), AVG(), MAX()
MIN、AVG、MAX分别表示帧/报文之间的最小、平均、最大时间,对于查看帧/报文之间的延时非常有用。
我们可以将这些函数结合“frame.time_delta”过滤条件看清楚帧延时,并使得往返延时更为明显。如果抓包文件中包含不同主机之间的多个会话,而只想知道其中一个pair,可将“frame.time_delta”结合源和目标主机条件如“ip.addrx.x.x.x &&ip.addry.y.y.y”。

从上图可见,在第106秒时数据流的MAX frame.delta_time达到0.7秒,这是一个严重延时并且导致了报文丢失。
◦Count()
此函数计算时间间隔内事件发生的次数,在查看TCP分析标识符时很有用,例如重传。

◦Sum()
该函数统计事件的累加值。有两种常见的用例是看在捕获TCP数据量,以及检查TCP序列号。
参数设置:分别使用客户端IP 192.168.1.4为源、目的地址,并将SUM功能结合tcp.len过滤条件;

从图表中我们可以看到,发送到客户端的数据量(IP.DST = = 192.168.1.4过滤条件)比来自客户端的数据量要高。在图中红色表示。黑条显示从客户端到服务器的数据,相对数据量很小。这是有道理的,因为客户只是请求文件和收到之后发送确认数据,而服务器发送大文件。很重要的一点是,如果你交换了图的顺序,把客户端的IP作为图1的目标地址,并且客户端IP作为图2的源地址,采用了FBAR的时候可能看不到正确的数据显示。因为图编号越低表示在前台显示,可能会覆盖较高图号。
4. 实例场景分析
参数设置:1是HTTP总体流量,显示形式为packets/tick,时间间隔1秒。图2是TCP丢失报文片段。图3是TCP 重复ACK。图4是TCP重传。

图1:HTTP总体流量图

图2:TCP丢失报文片段图

图3:TCP 重复ACK
从这张图可以看到:整体的HTTP流量,TCP重传以及重复ACK的流量,这些事件发生的时间点,以及在整体流量中所占的比例。
•数据包丢失和延迟的TCP序列号场景:我们可以在下面的图中看到若干峰值和下降,表示TCP传输有问题。

图4:数据包丢失和延迟的TCP序列号场景
与正常TCP报文比较:

这张图可以看到TCP序列号相当稳定地增加,表示传输平稳,没有过多重传或丢包。
•对比视频会议在网络卡顿与流畅时的IO图表实例场景:
https://zhiliao.h3c.com/Theme/details/104284
5. 总结
如果只是简单的排查网络问题,只需要使用wireshark中简单的添加过滤规则,通过观察抓取到的数据包就可以达到定位问题的目的,其实这几个进阶的功能,无论是专家模式、还是IO图表,底层其实还是需要配置规则,亦或者是通过wireshark的内置规则做了一个集成。针对一些场景,比如观测网络是否拥塞,可以通过IO图表直观的进行判断,以上。
作者:京东科技 宋慧超
来源:京东云开发者社区 转载请注明来源
相关文章:
聊聊wireshark的进阶使用功能 | 京东云技术团队
1. 前言 emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组…...
小米手机安装面具教程(Xiaomi手机获取root权限)
文章目录 1.Magisk中文网:2.某呼:3.最后一步打开cmd命令行输入的时候:4.Flash Boot 通包-Magisk(Flash Boot通刷包)5.小米Rom下载(官方刷机包)6.Magisk最新版本国内源下载 1.Magisk中文网: htt…...
DSU ON TREE
DSU ON TREE DSU:并查集 DSU ON TREE:树上启发式合并 我也不知道为啥树上并查集就是树上启发式合并 启发式合并的思想是每次把小的往大的合并,也就是最大化利用已有的答案(大的数组不用清空,在原基础上加上小的即可&…...
Java“对象”
Java:PO、VO、BO、DO、DAO、DTO、POJO PO持久化对象(Persistent Object) PO是持久化对象,用于表示数据库中的实体或表的映射通常与数据库表的结构和字段对应PO的属性对应数据库表的字段,可以进行持久化操作࿰…...
vuepress+gitee免费搭建个人在线博客(无保留版)
文章目录 最终效果,一睹为快!一、工具选型二、什么是VuePress三、准备工作3.1 node 安装3.2 Git安装3.3 Gitee账号注册 四、搭建步骤4.1 初始化VuePress4.2 安装VuePress4.3 初始化目录4.4 编写文章 五、部署到Gitee5.1 创建仓库5.2 个人空间地址设置4.3…...
Android 12.0 系统限制上网系列之iptables用IOemNetd实现app上网白名单的功能实现
1.前言 在12.0的系统rom定制化开发中,对于系统限制网络的使用,在system中netd网络这块的产品需要中,会要求设置app上网白名单的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现app上网白名单的的相关功能,就是在 系统中只能允许某个app上网,就是…...
Idea和DataGrip自定义常用代码模板,熟练使用快捷模板可促进开发效率
场景: 在实际工作中,我们不可能一个一个字母的去敲代码,为了提升开发效率,可以使用常用的快捷代码模板。idea和datagrip自带的有,我们也可以自定义快捷模板 一、Idea自定义代码模板、有些是基于 hutool 常用包 1、-&g…...
Vue.js :实现嵌套对话框的查看按钮
Vue.js :实现嵌套对话框的查看按钮 Vue.js 是一款流行的 JavaScript 框架,用于构建交互性强、响应式的前端应用程序。本博客将介绍如何使用 Vue.js 和 Element UI 库创建一个前端应用,其中包括了嵌套对话框的查看按钮,以及如何在…...
9.2.4 【MySQL】段的结构
段不对应表空间中某一个连续的物理区域,而是一个逻辑上的概念,由若干个零散的页面以及一些完整的区组成。像每个区都有对应的XDES Entry来记录这个区中的属性一样,定义了一个INODE Entry结构来记录段中的属性。 它的各个部分释义如下…...
怎么快速提取图片中的文字信息?怎么使用OCR图片文字提取一键提取文字
图片里的文字如何提取?一些图片中的文字信息是我们需要的,但是一个个输入太麻烦了,怎么将图片上的文字提取出来?Initiator是一款易于使用的小型 macOS OCR(光学字符识别)应用程序,可提取和识别 Mac 计算机屏幕上的任…...
Selenium隐藏浏览器特征
Selenium隐藏浏览器特征 Selenium特征1. CDP2. stealth.min.js3. undetected_chromedriver4. 操作已开启的浏览器4. 常见的隐藏Selenium特征的方法4.1 修改navigator.webdriver标志4.2 改变user-agent4.3 排除或关闭一些Selenium相关的开关4.4 代码展示4.5 总结 Selenium特征 …...
Linux下的buff/cache
目录 一、buff/cache二、buff/cache与内存管理三、buff/cache对系统性能的影响四、优化buff/cache1、调整vm.dirty_ratio和vm.dirty_background_ratio2、配置vm.swappiness3、配置vm.vfs_cache_pressure 五、释放buff/cache 一、buff/cache 按照Linux内核文档所说的࿰…...
3.wifi开发,网络编程
网络协议栈LwIP WiFi UDP Clinet编程 WiFi UDP Server编程 WiFi TCP Client编程 WiFi TCP Server编程 一。LWIP原理介绍,API介绍,文件结构 1.Lwip支持的协议 2.API 3.文件结构 1.api目录:应用程序接口文件。 2.arch目录:与硬件和…...
Android框架mqtt库无法兼容高版本android13的问题
最近使用mqtt库,测试的时候发现在Android12及以下正常,但在13上闪退,闪退日志如下 java.lang.IllegalArgumentException: com.yummo.xcar: Targeting S (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be spe…...
一招解除csdn复制限制
先看这个代码 python读取英文pdf翻译成中文pdf文件导出代码 想要复制代码,csdn有限制怎么办(csdn流氓,无耻) 解除方法 ctrlu 看效果...
安全基础 --- nodejs沙箱逃逸
nodejs沙箱逃逸 沙箱绕过原理:沙箱内部找到一个沙箱外部的对象,借助这个对象内的属性即可获得沙箱外的函数,进而绕过沙箱 前提:使用vm模块,实现沙箱逃逸环境。(vm模式是nodejs中内置的模块,是no…...
Redis集群架构搭建——主从、哨兵、集群
上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis,在这篇文章中,将会教大家搭建Redis的几种高可用的架构:主从架构、哨兵集群、Cluster集群。 本篇文章使用的redis版本为6.2.13,不同版本的配置可能有略微的区别&a…...
39 | selenium基础架构,UI测试架构
什么是测试基础架构? 测试基础架构指的是,执行测试的过程中用到的所有基础硬件设施以及相关的软件设施。因此,我们也把测试基础架构称之为广义的测试执行环境。通常来讲,测试基础架构主要包括以下内容: 执行测试的机器…...
2023研究生数学建模E题保姆级思路 出血性脑卒中临床智能诊疗
本次E题是一道J机器学习题目,难度也比较高,该题一般是有正确结果的,容易踩坑,不太建议小白选择,小白可以选择D题,D题思路也可以看另一篇文章,总的难度都不算低,这三道的难度接近&…...
画电路板通用知识
快捷键 快捷键 功能 shift+鼠标滚轮左右移动Ctrl+鼠标滚轮放大缩小 (Alt+) 鼠标滚轮上下移动滚轮按下鼠标滚轮可任意方向拖动图纸(可以一直保持按下状态或者按一下松开) CTRL+鼠标左键拖动复制该元件CTRL+E编辑选中元件的属性CTRL+鼠标左键 元叠选izoom in,聚焦光标所…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
