Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed

简介

Wireshark 显示过滤器中有很多 time 相关的过滤表达式,譬如一般常看到的 frame.time 字段代表帧被捕获的绝对时间,以及一些用于分析关联数据包之间时间的字段,像是本文计划讲到的 frame.time_deltaframe.time_delta_displayed ,包括还有 RTT 相关、 tcp.timehttp.timedns.time 等等功能强大的字段。如果能好好掌握并运用上述时间字段的功能,对于网络数据包协议分析将会有极大的帮助。

本文简单讲解下最常用到的 frame.time_deltaframe.time_delta_displayed 字段。

frame.time
Absolute time when this frame was captured,帧被捕获的绝对时间。

frame.time_delta
Time delta from previous captured frame,相较于上一个捕获帧的时间增量。

frame.time_delta_displayed
Time delta from previous displayed frame,相较于上一个显示帧的时间增量。

以上时间单位均为 s 秒。


原理

一图胜千言
FF-01

Time Delta 列为自选添加,字段即为 frame.time_delta_displayed

frame.time

可以简单认为就是 Time 列中的时间(注:只是时间显示格式的不同),实际字段显示见下
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第1张图片
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第2张图片

frame.time_delta

拿帧 2 为例,和帧 1 (相对于帧2,为上一个捕获帧)的时间增量值为 0.000963327 s。
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第3张图片

frame.time_delta_displayed

如果仍拿上图的帧 2为例,和帧 1 (相对于帧2,为上一个显示帧)的时间增量值同样也为 0.000963327 s。

那么该值在什么情况下会不一样呢?就体现在 displayed 上,如果应用显示过滤器,譬如过滤源 ip 为 192.168.0.1 的情况下,显示过滤后的帧仅有帧 1 和 帧 3 ,如下图。
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第4张图片
那么在帧 3 的数据包细节中,frame.time_delta_displayed 即和帧 1 (相对于帧3,为上一个显示帧)的值为 0.003788956 s。而 frame.time_delta 即和帧 2 (此处因过滤显示的原因隐藏,但实际存在,所以相对于帧 3,仍为上一个捕获帧)的值为 0.002825629 s。


扩展

以上为 frame.time_deltaframe.time_delta_displayed 字段最基本的解释,可以结合包括 is present、==、!=、>、<、>=、<=、in 等关系表达式进行各种显示过滤。

而对于排查网络缓慢问题时,对于高增量时间的判断一般会用到 >、<、>=、<=。在其中特别想提到的就是 frame.time_delta > 0.01 可成功过滤,而 frame.time_delta_displayed > 0.01 是无法正常过滤的,这是什么问题???

这也是本文的由来,重点想表达的地方。

​​

frame.time_delta

Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第5张图片
​​

frame.time_delta_displayed

为什么帧 3 的 frame.time_delta_displayed 值为 0.0028256296 s ,但却无法成功过滤出来。
FF-07
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第6张图片

解答
仔细查看帧 1, frame.time_delta_displayed 显示为 0,不匹配,因此被过滤掉未显示。现在是帧 2,由于帧 1 未显示,因此 frame.time_delta_displayed 也显示为 0,不匹配,因此被过滤掉未显示。然后是帧 3 … 无限套娃 。

明白了嘛?仔细体会下 disaplayed 的含义。

那么,有人问非要用 frame.time_delta_displayed > xxx 过滤行不行,嗯,也行,必须通过显示帧 1 来开始工作,例如使用显示过滤器 frame.number == 1 || frame.time_delta_displayed > xxx
Wireshark 提示和技巧 | frame.time_delta 和 frame.time_delta_displayed_第7张图片


感谢阅读,更多技术文章可关注个人公众号:Echo Reply ,谢谢。

你可能感兴趣的:(NetShark,wireshark,tcp/ip,网络,网络协议,tcpdump)