Visual c++ 使用准确的时间戳捕获网络数据包

Visual c++ 使用准确的时间戳捕获网络数据包,visual-c++,network-programming,packet-capture,hardware-interface,transport-stream,Visual C++,Network Programming,Packet Capture,Hardware Interface,Transport Stream,我正在使用winpcap库捕获网络数据包(传输流)及其到达时间。但我面临一些问题。每当我在我的机器上播放音频或从网络复制一个大文件时,我捕获的数据包的时间信息就会失真。一些数据包的时间戳彼此非常接近,而另一些则有点远。有什么解决方案(软件/硬件)要纠正这一点,我需要准确的网络数据包时间戳。您可以使用任务管理器将捕获应用程序的进程优先级提高到较高 但是你真的需要考虑你想要达到的目标和原因。您想知道数据包何时到达NIC、内核何时对其进行处理、内核何时将其放入捕获程序的套接字缓冲区、捕获程序何时将其从

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

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

但是你真的需要考虑你想要达到的目标和原因。您想知道数据包何时到达NIC、内核何时对其进行处理、内核何时将其放入捕获程序的套接字缓冲区、捕获程序何时将其从缓冲区中读取、内核何时将其放入某些其他程序的套接字缓冲区,还是其他程序何时从其套接字缓冲区中读取


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

提高进程优先级在windows上有效吗?我以前试过这个,但感觉它的工作方式和正常过程一样。无论如何,当数据包到达NIC时,我需要时间戳。目前我使用winpcap,我猜它会在应用程序从自己的套接字缓冲区读取数据包时给出时间戳。是否有任何方法可以在NIC获取时间戳提高优先级“起作用”,因为它确实提高了优先级。当多个进程争夺相同的资源时,这会影响性能。您提到在运行多个进程时出现问题,这可能会有所帮助。NIC独立于CPU和系统时钟运行。没有办法确切知道它什么时候做什么。您可以查找您的NIC品牌的典型延迟。但是,除非驱动程序特别支持时间戳,否则您从用户空间中所能知道的最好信息是何时从套接字读取数据包,并根据该数据包进行估计。