如何设置pcap标头?

时间:2014-05-30 06:18:24

标签: pcap

上下文: 我正在编写一个嗅探器来测量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) */   
};

1 个答案:

答案 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。