【问题标题】:capturing network packets with accurate timestamp捕获具有准确时间戳的网络数据包
【发布时间】:2012-06-02 18:42:42
【问题描述】:

我正在使用 winpcap 库捕获网络数据包(传输流)及其到达时间。但我遇到了一些问题。每当我在我的机器上播放音频或从网络复制一个大文件时,我捕获的数据包的时间信息就会被扭曲。一些数据包的时间戳彼此非常接近,而另一些则有点远。是有任何解决方案(软件/硬件)来纠正这个问题。我需要准确的网络数据包时间戳。

【问题讨论】:

    标签: visual-c++ network-programming packet-capture hardware-interface transport-stream


    【解决方案1】:

    您可以使用任务管理器将捕获应用程序的进程优先级提高到高。

    但您确实需要考虑您想要实现的目标以及原因。你想知道数据包什么时候到达网卡,什么时候被内核处理,什么时候内核把它放到捕获程序的套接字缓冲区中,什么时候捕获程序从它的缓冲区中读取它,内核什么时候把它放入其他一些程序的套接字缓冲区,或者当一些其他程序从它的套接字缓冲区中读取它时?

    所有这些时间戳都是不同的,当系统处于负载状态时,差异必然会变得更大。来自捕获程序的时间信息很可能反映捕获程序从其自己的套接字缓冲区中读取数据包的时间。增加捕获应用程序的进程优先级将使这一过程更加顺利,但它会使任何其他应用程序处理数据包的可靠性降低。

    【讨论】:

    • 提高进程优先级是否适用于 Windows?我之前尝试过,但感觉它的工作方式与正常流程相同。无论如何,当数据包到达 NIC 时,我需要时间戳。目前我使用 winpcap,我猜它会在应用程序从其自己的套接字缓冲区读取数据包时给出时间戳。有没有办法在 NIC 处获取时间戳
    • 提高优先级“有效”,因为它确实提高了优先级。当多个进程竞争相同的资源时,这会影响性能。您提到在多个进程运行时遇到问题,所以这可能会有所帮助。 NIC 独立于 CPU 和系统时钟运行。没有办法确切知道它什么时候做任何事情。您也许可以查找您的 NIC 品牌的典型延迟。但除非驱动程序特别支持时间戳,否则您可以从用户空间知道的最佳信息是从套接字读取数据包并据此进行估计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2018-08-16
    相关资源
    最近更新 更多