聊聊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图表直观的进行判断,以上。

作者:京东科技 宋慧超

来源:京东云开发者社区 转载请注明来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/139656.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

小米笔试题——01背包问题变种

这段代码的主要思路是使用动态规划来构建一个二维数组 dp,其中 dp[i][j] 表示前 i 个产品是否可以组合出金额 j。通过遍历产品列表和可能的目标金额,不断更新 dp 数组中的值,最终返回 dp[N][M] 来判断是否可以组合出目标金额 M。如果 dp[N][M…

Flowable主要子流程介绍

1. 内嵌子流程 (1)说明 内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定…

【word格式】mathtype公式插入 | 段落嵌入后格式对齐 | 字体大小调整 |空心字体

1. 公式嵌入 推荐在线latex编辑器,可以截图转 latex 识别率很高 https://www.latexlive.com/home 美中不足,不开会员每天只能用3次识别。 通过公式识别后,输出选择align环境,然后在mathtype中直接粘贴latex就可以转好。 2.公式…

什么是语法糖?Java中有哪些语法糖?

什么是语法糖?Java中有哪些语法糖? 语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对…

JavaWeb开发-08-MySQL(三)

一.多表查询 -- 多表查询: 数据准备 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comm…

数字赋能 融链发展 ——2023工博会数字化赋能专精特新“小巨人”企业高质量发展论坛顺利举行

编者按:2023年政府工作报告提出“加快传统产业和中小企业数字化转型”要求,按照《“十四五”促进中小企业发展规划》《关于开展中小企业数字化转型城市试点工作的通知》等文件的部署,通过开展城市试点,支持地方政府综合施策&#…

JVM 参数详解

GC有两种类型:Scavenge GC 和Full GC 1、Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到…

绿色计算产业发展白皮书:2022年OceanBase助力蚂蚁集团减排4392tCO2e

9 月 15 日,绿色计算产业联盟在 2023 世界计算大会期间重磅发布了《绿色计算产业发展白皮书(2023 版)》。蚂蚁集团作为指导单位之一,联合参与了该白皮书的撰写。 白皮书中指出,落实“双碳”战略,绿色计算已…

LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT

本文将介绍在Lit-GPT上使用LoRA微调LLaMA模型,并介绍如何自定义数据集进行微调其他开源LLM 监督指令微调(Supervised Instruction Finetuning) 什么是监督指令微调?为什么关注它? 目前大部分LLM都是decoder-only&…

Leetcode 386. 字典序排数

文章目录 题目代码&#xff08;9.22 首刷看解析&#xff09; 题目 Leetcode 386. 字典序排数 代码&#xff08;9.22 首刷看解析&#xff09; 迭代DFS class Solution { public:vector<int> lexicalOrder(int n) {vector<int> ret(n);int number 1;for(int i 0…

stm32之PWM呼吸灯

呼吸灯是灯从渐亮到渐灭周而复始形成的一个效果。由于51没有PWM所以需要定时器模拟PWM才能实现呼吸灯的效果&#xff0c;但是stm32的通用定时器是有PWM模式的&#xff0c;所以不需要再用软件模拟&#xff0c;精准度也高。 本实验用的基于stm32f103C8t6。在PB8引脚上接了一个le…

rabbitMQ (1)

文章目录 1. RabbitMQ 介绍1.1 几个重要概念1.2 RabbitMq 的工作原理 2 RabbitMQ 安装3. RabbitMQ 入门操作3.1 添加依赖3.2 生产者代码3.3 消费者代码 4. Work Queues5. 管理端页面创建队列 1. RabbitMQ 介绍 引用 &#xff1a; RabbitMQ 是一个消息中间件&#xff1a;它接受…

扩展pytest接口自动化框架-MS数据解析功能

【软件测试行业现状】2023年了你还敢学软件测试&#xff1f;未来已寄..测试人该何去何从&#xff1f;【自动化测试、测试开发、性能测试】 开篇 MeterSphere的数据源通过html页面上传后&#xff0c;需要将请求方式进行拆分。 get接口的参数&#xff0c;常以params的方式进行传…

arcgis js 缓冲区分析(GP服务)

arcgis文档中的有提供缓冲区的接口 geometryService&#xff0c;但要4.19后版本才提供 案例中使用的版本为4.16&#xff0c;因此这里的缓冲区分析借助gp工具 新建服务 1、打开arcmap 选择工具将要存放的文件夹&#xff0c;右键> new > Toolbox 对新建好的工具的mode…

343. 整数拆分

题目&#xff1a; 343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

Springboot2 Pandas Pyecharts 量子科技专利课程设计大作业

数据集介绍 1.背景 根据《中国科学&#xff1a;信息科学》期刊上的一篇文章&#xff0c;量子通信包括多种协议与应用类型&#xff1a; 基于量子隐形传态与量子存储中继等技术&#xff0c;可实现量子态信息传输&#xff0c;进而构建量子信息网络&#xff0c;已成为当前科研热点&…

HTTP参数类型中的Query和Body参数

在接口中常见到query参数和body参数&#xff0c;那么它对应的传参方式是&#xff1f; ★ query查询参数 ---> params ---> route.params.参数 ★ body请求体参数 ---> data ---> route.query.参数 总结&#xff1a; GET请求只能传Query参数&#xff0c; POST请…

网络编程day05(IO多路复用)

今日任务&#xff1a; TCP多路复用的客户端、服务端&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> …

【动态规划刷题 17】回文子串 最长回文子串

647. 回文子串 链接: 647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由…