tcpdump从libpcap获取time-stamp,libpcap从OS内核获取time stamp
When is a packet time-stamped? How accurate are the time stamps?
Q: When is a packet time-stamped? How accurate are the time stamps?
Tcpdump gets time stamps from libpcap, and libpcap gets them from the OS kernel, so tcpdump - and any other program using libpcap, such as Ethereal or snoop - is at the mercy of the time stamping code in the OS for time stamps.
In most OSes on which tcpdump and libpcap run, the packet is time stamped as part of the process of the network interface's device driver, or the networking stack, handling it. This means that the packet is not time stamped at the instant that it arrives at the network interface; after the packet arrives at the network interface, there will be a delay until an interrupt is delivered or the network interface is polled (i.e., the network interface might not interrupt the host immediately - the driver may be set up to poll the interface if network traffic is heavy, to reduce the number of interrupts and process more packets per interrupt), and there will be a further delay between the point at which the interrupt starts being processed and the time stamp is generated.
On some OSes, such as HP-UX, the OS kernel does not time stamp the packet at all; instead, it's time stamped by libpcap at the time it reads the packet from the OS kernel, which means that there will be an even greater delay between the time the packet arrives and the time that it's time-stamped.
Thus, the packet time stamp is not necessarily a very accurate indication of the time it arrived at the machine that captured the packet.

本文探讨了TCPdump和libpcap如何获取包的时间戳,分析了不同操作系统中时间戳的准确性及其产生的延迟原因,并解释了Linux环境下时间戳分辨率仅为100毫秒的问题。
1149

被折叠的 条评论
为什么被折叠?



