在使用WireShark分析networking接口时,哪个设备的时间戳被logging?

好吧,这可能看起来微不足道,但由于我的应用程序所需的testing性质,我需要得到精确的时间戳。

我正在使用WireShark来分析数据包。

假设我有两台主机h1和h2的networking

h1和h2分别通过接口h1-eth0和h2-eth0相连。

当我在主机h1上运行Wireshark来捕获接口h1-eth0时,我可以绝对确定所logging的时间戳对应于主机h1的系统时间吗?

虽然这应该是这样,除了你有用的评论,如果我能得到一个相同的链接(这只是我可以正式化我的应用程序)真的会有所帮助。


[CONCLUDING REMARKS]:tcpdump的时间戳模块的联机帮助页。 PCAP-TSTAMP 。

注意:该手册页由Guy Harris自己撰写。 🙂

引用:

当捕获stream量时,每个数据包都有一个时间戳,代表数据包的到达时间,对于传出数据包,表示数据包的传输时间。 这一次是到达或传输时间的近似值。

假设我有两台主机h1和h2的networking。

h1和h2分别通过接口h1-eth0和h2-eth0相连。

当我在主机h1上运行Wireshark来捕获接口h1-eth0时,我可以绝对确定所logging的时间戳对应于主机h1的系统时间吗?

如果在主机h1上运行Wireshark(或tcpdump或WinDump或snoop或Microsoftnetworking监视器或Sniffer或OmniPeek或Commview或任何其他嗅探器,答案不是特定于Wireshark …),则数据包来自捕​​获机制在主机h1上运行的OS的networking堆栈以及时间戳相应于分组由该networking堆栈加时间戳的时间(即由主机h1加时间戳),或者在某些情况下与时间戳数据包由插入主机h1的networking适配器(或者在HP-UX上,在libpcap 主机h1上的networking堆栈中读取数据包的时刻标记),因为HP-UX的捕获机制本身没有时间限制,邮票包)。

所以时间标记最接近运行嗅探程序的机器上的主机时间。 它不一定与数据包到达主机h1的networking适配器的确切时间(微秒或毫微秒)一致(除非networking适配器是对数据包进行时间标记,大多数不支持)。 数据包到达networking适配器的时间与时间标记的时间之间可能存在延迟,可能包括:

  • 数据包到达和中断信号之间的时间,告诉主机一个数据包已经到达(每个数据包不一定有中断信号);
  • 中断信令和主机响应之间的时间;
  • 主机响应中断和分组被交给捕获机制之间的时间;
  • 包裹被递交到捕获机构之间的时间并由捕获机制加时间戳。

所以如果通过“我可以绝对确定被logging的时间戳对应于主机h1的系统时间吗? 你的意思是“我能够绝对确定所logging的时间标记是否与包裹到达时主机h1的系统时间高精度一致”,答案是“不一定,即使你在主机上运行H1" 。 它离主机h1到达包的时间比从主机h2发送包的时间还要近,但是如果你需要知道高精度和高精度的时间戳值,你需要专门的在networking适配器或专门调整的接收代码path上标记数据包的硬件(这可能意味着您必须破解接口驱动程序代码和networking堆栈代码;这种特殊调整的接收代码path不是,例如,Linux内核的configuration选项或Windows内核的registry选项)。

(顺便说一句,Mitch的答案只适用于Windows;在我的个人计算机上没有像KeQuerySystemTime这样的例程 – 数据包是用名为microtime的例程返回的值加上时间戳。

请记住,Wireshark是查看器,winpcap是捕获应用程序。

根据代码和邮件列表中有用的post ,时间戳来自非x86系统上的KeQuerySystemTime,以及KequerySystemTime和非x86系统上的rdtsc指令的组合。

无论如何,相对于系统时钟,您应该具有高于100ns的精度。

官方说明: http : //wiki.wireshark.org/Timestamps

在您提到的configuration中捕获networkingstream量时,您无法得到精确的时间戳,原因如下:

  • 在Windows上。 Linux和FreeBSD,你必须记住,由于主机上的负载以及networking驱动程序的实现性质,时间戳可能会很容易地偏离至less几毫秒(最长10-25毫秒) NIC本身。 尤其是networking中断处理以及内存分配和其他硬件中断处理(如从硬盘驱动器)造成的延迟。 认识到这个问题,现代操作系统通常使用两步中断处理。 中断处理分成短段和长段会进一步造成混淆,因为所有其他进程必须在同一台机器上进行,所以接收到这个或那个数据包的确切时间。 因此,就任何时间测量而言,您都没有确定性,而且很难具有任何准确性或精度。
  • 时钟漂移。 除非你有专门的硬件,否则你的时间戳会漂移。 例如,在几个小时或几天之后,主机h1和h2上的时间戳会相差数秒或更长时间。 仅供参考:根据英特尔规格(2004年10月)的HPET漂移从500到2000 ppm或0.05%到0.2%,旧的RTC更糟糕。
  • 如果stream量突发超过NIC驱动程序分配的缓冲区数量,则可能由于硬件stream量控制而导致数据包丢失或时间戳错误。

简单地说,使用在同一主机上运行的winpcap来testing主机是非常困难的。 我通常使用具有良好时钟的外部数据包捕获设备,如USC4060。