【问题标题】:how pcap header are being set?如何设置 pcap 标头?
【发布时间】:2014-05-30 17:58:42
【问题描述】:

上下文: 我正在编写一个嗅探器来测量 SYN-ACK -> ACK 之间的 TCP RTT(round Time Trip)。 这个想法是让从 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) */   
};

【问题讨论】:

    标签: pcap


    【解决方案1】:

    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 是我所知道的唯一例外),它是由内核在主机第一次看到数据包和将其交给捕获之间的某个时间点设置为其时钟值的libpcap/WinPcap 正在使用的机制。

    2) 有没有更好的方法来获得 RTT 测量值?

    RTT = ACK pcap_timeval - SYN-ACK pcap_timeval,因为这通常是正数。

    3) 会不会是内核在设置pcap header的时候有时序bug?

    这是可能的,但如果 SYN-ACK pcap_timeval - ACK pcap_timeval 为负数,那绝对不是表明存在错误 - 它应该为负数。

    4) 我想知道这个 pcap_timeval 是如何设置的。知道去哪里看吗?

    如果是 UN*X,则在操作系统内核的源代码中;如果是 Windows,则在 WinPcap 驱动程序的源代码中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多