7.3. 时间戳

时间戳,时间戳的精度,等等是在让人感到困惑。本节将向你介绍介绍Wireshark处理时间戳时都发生了什么。

在包被捕捉时,每个包在进入时都被加上时间戳,这个时间戳将会保存在捕捉文件中,所以他们也可以在以后分析时使用。

那么说,时间戳是从哪里来的呢?是捕捉的时候产生的。Wireshark从 libpcap(WinPcap) libraray(库)中获得时间戳。而libpcap(winpcap)又是从操作系统内核获得的时间。如果捕捉数据是从捕捉文件载入的,很显然Wireshark从文件中获得时间戳数据。

7.3.1. Wireshark内置

Wireshak内置的格式使用的时间戳格式由日期(从1.1.1970开始)和时间(从凌晨起,纳秒(10亿分之一秒)为单位)组成。你可以调整Wireshark在包列表的时间戳显示方式。见第 3.7 节 “"View"菜单”的"Time Display Format"项。

当读取或写入捕捉文件时,Wireshark按需要在内置格式和其他捕捉文件格式间进行时间戳转换。

捕捉时,Wireshark使用libpcap(WinPcap)捕捉库(支持纳秒精度)。除非你在专用的捕捉硬件上进行捕捉,一般这样的精度已经足够了。

7.3.2. 捕捉文件格式

Wireshark支持的捕捉文件格式都带有时间戳。不同的捕捉文件格式的时间戳精度有很大不同,从秒"0"到纳秒 "0.123456789"都有。大多数格式捕捉文件存储的时间戳都是固定精度的,些捕捉文件格式甚至存储了时间戳精度本身(可能是出于方便)。

大多数被Wireshark(和或多其他工具)使用的libpcap捕捉文件格式都仅支持固定的百万分之一固定精度"0.123456"

[]注意

写入数据到一个实际支持精度比你写入数据精度低的格式文件中,可能会导致数据丢失。例如:如果你载入一个纳秒精度的捕捉文件,然后将其存储为libpcap文件(百万分之一秒精度)。Wireshark很明显会将时间精度调整为百万分之一秒。

7.3.3. 准确性

经常有人问:"Wireshark的时间戳的准确性如何?"。实际上,Wireshark自身不会创建时间戳,而是通过其他的地方得到时间并显示他们。所以,准确性取决于你实用的捕捉系统(操作系统,性能。。。)。因此以上问题很难通过通常的途径回答。

[]注意

通常USB连接的网络适配器提供的精度非常差。入口的实际上“占用很长的时间和走很曲折的路”才能穿过USB数据线到系统内核。而数据包只有被系统内核处理过以后才会打上时间戳,这种时间戳机制将会导致准确性大大降低。

结论:如果你需要精确的时间戳,请不要使用USB连接的网卡!(笔者的注脚:有没有网卡在USB硬件上提前加上时间戳的?)[17]



[17] 译者注:前文提到,时间戳是Wireshark用库获取的时间加在包上的,不知为何有此一问。难道以后要识别硬件是否有时间戳功能。