- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组的讨论机会,私下对wireshark的一些进阶功能,比如专家模式、图表等功能进行调研,并结合实际场景抓包分析对功能进行对照说明.
Wireshark的专家信息是非常强大的一个分析模块,分别对错误、警告、注意、对话等数据信息做出分类和注释,对网络故障分析提供了强有力的信息依据,让你准确快速地判断出故障点,并进行下一步处理.
◦对话(Chat):关于正常通信的基本信息; 。
◦注意(Note):正常通信时的异常数据包; 。
◦警告(Warn):不是正常通信中的异常数据包(个人理解为:非正常的通信产生的数据包); 。
◦错误(Error):数据包中的错误,或者解析器解析时的错误; 。
◦ 假设 (Assumption):协议字段的数据不完整,根据假定值进行了剖析 。
◦ 检验和 (Checksum):校验和无效 。
◦ 注释 (Comment):数据包注释 。
◦ 调试 (Debug):调试信息,你不应该在wireshark的发布版本中看到这个组 。
◦ 解密 (Decryption):解密问题 。
◦ 已弃用 (Deprecated):协议字段已经被弃用 。
◦ 畸形的 (Malformed):格式错误的数据包或者解析程序有错误。此数据报的解析已中止 。
◦ 协议 (Protocol):违反协议规范(比如无效字段值或者非法长度)。可能会继续对该数据包进行解析 。
◦ 重新组装 ():重新组装时出现问题。比如,不是所有的碎片都可用,或者在重新组装期间发生异常 。
◦ 请求代码 (Request Code):一个应用程序请求。通常分配聊天级别.
◦ 响应代码 (Response Code):应用程序响应代码表示潜在问题,比如找不到HTTP 404 。
◦ 安全 (Security):安全问题,比如不安全的实现 。
◦ 序列 (Sequence):协议序列号可疑,比如它不连续或者检测到重传 。
◦ 未编码 (Undecoded):解析不完整或者数据因为其他问题无法解码 。
◦ 对话消息(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毫秒内进行.
Wireshark IO Graph能把原始数据过滤并把数据以图表的形式展示出来,是一个非常好用的工具。 基本的Wireshark IO Graph会显示抓包文件中的整体流量情况。X轴为时间,Y轴是每一时间间隔的报文数。默认情况下,X轴时间单位为1s,Y轴是Packet/tick,可以自己调节单位。通过调节单位,对于查看流量中的波峰/波谷很有帮助.
对于排查网络延时/应用问题有一些过滤条件是非常有用的,下面罗列了一些常用的过滤条件:
◦ 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。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失,拥塞,等等).
IO Graphs有六个可用函数:SUM, MIN, AVG, MAX, COUNT, LOAD.
◦MIN(), AVG(), MAX() 。
MIN、AVG、MAX分别表示帧/报文之间的最小、平均、最大时间,对于查看帧/报文之间的延时非常有用.
我们可以将这些函数结合“frame.time_delta”过滤条件看清楚帧延时,并使得往返延时更为明显。如果抓包文件中包含不同主机之间的多个会话,而只想知道其中一个pair,可将“frame.time_delta”结合源和目标主机条件如“ip.addr x.x.x.x &&ip.addr y.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的时候可能看不到正确的数据显示。因为图编号越低表示在前台显示,可能会覆盖较高图号.
参数设置: 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 。
如果只是简单的排查网络问题,只需要使用wireshark中简单的添加过滤规则,通过观察抓取到的数据包就可以达到定位问题的目的,其实这几个进阶的功能,无论是专家模式、还是IO图表,底层其实还是需要配置规则,亦或者是通过wireshark的内置规则做了一个集成。针对一些场景,比如观测网络是否拥塞,可以通过IO图表直观的进行判断,,,,,以上.
作者:京东科技 宋慧超 。
来源:京东云开发者社区 转载请注明来源 。
最后此篇关于聊聊wireshark的进阶使用功能的文章就讲到这里了,如果你想了解更多关于聊聊wireshark的进阶使用功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Wireshark 何时对数据包加时间戳?完全接收一帧后?或者已经在接收帧的第一个字节?我阅读了以下关于 Wireshark timestamps 的描述但该文本仅说明:“在捕获数据包时,每个数据包在
在我们的团队中,我们有一个标准化的开发设置,我们有一个 Win8 工作站,在 Hyper-V 上运行各种虚拟机。所有开发都在虚拟机上进行。 我遇到了一个问题,我无法使用 VS2012 从 Team F
我对 Wireshark 中的抖动计算方法有疑问。 Wireshark 根据 RFC3550 (RTP) 计算抖动: 如果 Si 是数据包 i 的 RTP 时间戳,Ri 是数据包 i 在 RTP 时间
我正在尝试使用以下选项从 cli 启动 wireshark... wireshark -k -i eth2 -a filesize:1000000 -f 我遇到的问题是我想使用预定义的wiresha
我们通过 WireShark 使用 JN5148EK010 节点捕获流量。收到的数据包显示在提供的屏幕截图中。 我想知道如何解码数据 捕获几个数据包后发生错误,还提供了屏幕截图。如何解决此错误? 列表
我正在尝试自动化我使用 WireShark 的重复手动过程: 1) 加载给定的 pcap 文件 2) 为给定协议(protocol)应用一个简单的过滤器 3) 使用导出对话框将显示的数据包导出为 CS
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
有没有办法清除 Wireshark 中的捕获窗口,而无需重新启动捕获或重新应用过滤器?如果不仔细查看时间戳,很难区分一组流量和另一组流量。 最佳答案 我没有找到清除窗口的方法,但点击“重新启动正在运行
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
我想知道wireshark 是如何工作的。可以监听给定机器所有端口上的流量的应用程序的设计是什么?这样的应用程序会产生什么样的窃听?编写一个监控流量的应用程序的好方法是什么? 谢谢 最佳答案 Wire
我想构建一个自己的 Wireshark 数据包解析器,并按照https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html中给出的
假设我有这样的模式 01:02:(anything):04:05 如何在wireshark中构造一个显示过滤器来过滤掉它? 我必须这样做吗? data[0:2]==01:02 and data[3:2
我想构建一个自己的 Wireshark 数据包解析器,并按照https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html中给出的
假设我有这样的模式 01:02:(anything):04:05 如何在wireshark中构造一个显示过滤器来过滤掉它? 我必须这样做吗? data[0:2]==01:02 and data[3:2
是否可以在 Wireshark 中重新编号。例如,我已将数据包过滤到一侧: 所以数字是(由于过滤它们没有按顺序排列): 416,419,420,423,424,426,427。 但我想像这样一行一行地
我想使用 Opus-48 编解码器捕获和解码 VoIP 对话。我正在使用 Wireshark 来捕获数据包。网上有免费的解码器吗?? Wireshark 不保存双向对话,因为它适用于 G-729 等其
tshark中的-Y、-2和-R选项让我困惑了很久。 看了说明书,我知道-Y用在单通滤波,-2用在2通滤波(万一我们不能在第一遍过滤器结束之前获取一些信息) 但我还是不明白 -2 -Y 'blabla
如果我想编写一个使用 Wireshark 功能的脚本,我会使用 tshark。我听说还有一个 libwireshark 可以在用 C 编写程序时使用,但是,就我的一生而言,我找不到任何文档!我尝试隔离
我有一个正在分析的 Wi-Fi 捕获 (.pcap),并且遇到了在我看来 802.11 规范与 Wireshark 对数据的解释之间的不一致之处。具体来说,我想要拆分的是 2 字节的 802.11 帧
有没有办法过滤或关注 TCP/SSL使用 Wireshark 基于特定进程 ID 的流? 最佳答案 以防万一您正在寻找替代方法并且您使用的环境是 Windows,Microsoft 的 Network
我是一名优秀的程序员,十分优秀!