好吧,Wireshark 不会给数据包本身加上时间戳。它依赖于 libpcap 来完成它们,并且在几乎所有操作系统上,libpcap 本身也不会给它们加上时间戳,而 libpcap 使用的操作系统的数据包捕获机制也会这样做。主要的例外是 Windows,WinPcap 必须在 NDIS 之上的内核中提供自己的捕获机制,但该机制的行为与大多数 UN*Xes 内部的机制非常相似,并且会给出类似的行为。(另一个例外是 HP-UX,其中操作系统的捕获机制根本不对数据包进行时间戳记,因此 libpcap 会这样做;它给出的答案与其他操作系统有些相似,但在数据包之前可能有更长的延迟有时间戳。)
如果 Wireshark(或任何其他数据包嗅探器!)在发送方上运行,数据包将在操作系统内“环绕”并交给捕获机制;时间戳可以在发送方开始传输数据包之前应用,但时间戳将更接近 x 而不是 y。
如果在接收器上运行 Wireshark(或任何其他数据包嗅探器),则在接收到整个数据包后的某个时间应用时间戳;这可能涉及由于数据包排队而导致的延迟,“批处理”中断,在数据包时间戳之前完成一些网络堆栈处理等。时间戳将更接近 y 而不是 x。
如果 Wireshark(或任何其他数据包嗅探器)正在第三台机器上运行,被动地嗅探网络,则时间戳可能更接近 y 而不是 x,但由于接收器和嗅探器是不同的机器,因此存在差异可能会在不同的时间看到数据包,有不同的接收代码路径等。