4

Wireshark 什么时候给数据包加上时间戳?完全接收帧后?或者已经在接收帧的第一个字节?我阅读了以下有关Wireshark 时间戳的描述,但此文本仅说明:“在捕获数据包时,每个数据包都会在其进入时加上时间戳”。

考虑以下场景和准确的操作系统时间:

发送者----> Wireshark ----> 接收者

发送方在时间 x 开始传输帧。在时间 y(y = 传输开始 x + 帧长度 / 链路速度),接收器完全接收到该帧。捕获的帧会出现在 Wireshark 中,时间戳接近 x 还是 y?

最好的问候,乔纳斯

4

1 回答 1

5

好吧,Wireshark 不会给数据包本身加上时间戳。它依赖于 libpcap 来完成它们,并且在几乎所有操作系统上,libpcap 本身也不会给它们加上时间戳,而 libpcap 使用的操作系统的数据包捕获机制也会这样做。主要的例外是 Windows,WinPcap 必须在 NDIS 之上的内核中提供自己的捕获机制,但该机制的行为与大多数 UN*Xes 内部的机制非常相似,并且会给出类似的行为。(另一个例外是 HP-UX,其中操作系统的捕获机制根本不对数据包进行时间戳记,因此 libpcap 会这样做;它给出的答案与其他操作系统有些相似,但在数据包之前可能有更长的延迟有时间戳。)

如果 Wireshark(或任何其他数据包嗅探器!)在发送方上运行,数据包将在操作系统内“环绕”并交给捕获机制;时间戳可以在发送方开始传输数据包之前应用,但时间戳将更接近 x 而不是 y。

如果在接收器上运行 Wireshark(或任何其他数据包嗅探器),则在接收到整个数据包后的某个时间应用时间戳;这可能涉及由于数据包排队而导致的延迟,“批处理”中断,在数据包时间戳之前完成一些网络堆栈处理等。时间戳将更接近 y 而不是 x。

如果 Wireshark(或任何其他数据包嗅探器)正在第三台机器上运行,被动地嗅探网络,则时间戳可能更接近 y 而不是 x,但由于接收器和嗅探器是不同的机器,因此存在差异可能会在不同的时间看到数据包,有不同的接收代码路径等。

于 2013-05-21T18:05:47.983 回答