上下文: 我正在编写一个嗅探器来测量SYN-ACK之间的TCP RTT(圆形时间跳闸) - >确认 我们的想法是拥有自SYN-ACK数据包返回ACK数据包所需的时间。
问题:
问题是,由于我计算RRT的方式,有时我得到负RTT或非常差的测量。
因此,RTT = SYN-ACK pcap_timeval - ACK pcap_interval
问题:
1)如何在pcap标头上设置时间戳? 2)有更好的方法来获得RTT测量吗? 3)设置pcap头时内核是否有可能存在时间错误? 4)我想知道这个pcap_timeval是如何设置的。知道在哪里看?或任何其他想法?
struct pcap_timeval {
bpf_int32 tv_sec; /* seconds */
bpf_int32 tv_usec; /* microseconds */
};
struct pcap_sf_pkthdr {
struct pcap_timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
答案 0 :(得分:0)
RTT = SYN-ACK pcap_timeval - ACK pcap_interval
(我猜你的意思是
RTT = SYN-ACK pcap_timeval - ACK pcap_timeval
此处。)
这通常是否定的,因为ACK是对SYN + ACK的响应,因此应该在收到SYN + ACK后发送。
1)如何在pcap标头上设置时间戳?
在几乎所有的操作系统上(HP-UX是我所知道的唯一例外),它在内核首次看到数据包之间的某个时刻由内核设置为时钟值。 #39;交给捕获机制libpcap / WinPcap正在使用。
2)有更好的方法来进行RTT测量吗?
RTT = ACK pcap_timeval - SYN-ACK pcap_timeval,因为它通常是正的。
3)设置pcap标头时内核是否有可能存在时间错误?
这是可能的,但是如果SYN-ACK pcap_timeval - ACK pcap_timeval是否定的,那肯定不表示存在错误 - 它 应该是否定的。
4)我想知道这个pcap_timeval是如何设置的。知道在哪里看?
在您的操作系统内核的源代码中,如果它是UN * X,或者在WinPcap驱动程序的源代码中,如果它是Windows。