我想使用 Winpcap 捕获所有通过服务器千兆网卡的网络数据包。
假设我能够使用高达 100% 的网络链接,最大网络速度为 1000Mbps。如果我们排除 TCP/IP 标头,最大 TCP 数据速率应约为 940Mbps。
假设我使用 TCP 目标端口 6000 以 940Mbps 的速度通过 NIC 发送一个 1GB 的文件。我使用 Winpcap 捕获所有通过 NIC 的网络数据包,然后将其转储到 pcap 文件。如果我使用 Wireshark 分析 pcap 文件,然后检查发送到 TCP 端口 6000 的所有网络数据包的数据包大小总和,我是否能够从 pcap 文件中准确获取 1GB?
谢谢。
假设您能够 100% 地利用网络链接,最大网络速度不是 1Gbps。由于帧间间隙和校验和,它较少。这甚至在您开始考虑数据包标头之前(正如您在原始问题中正确提到的那样)。
同样如上面的评论所暗示的那样,典型的机器很难以线速生成数据包,更不用说同时以线速生成和捕获数据包了。我用来以线速(在 Linux 机器上)生成数据包的一种方法是制作 1500 字节的数据包并使用 tcpreplay。使用这种方法,我可以获得非常接近线速的速度,但这会占用大约 100% 的 CPU,除非您使用的是非常非常快的机器。
说了这么多,你的计划是通过wireshark抓包查看,确定发送到TCP端口6000的数据量,没有错。(确保您只捕获 TCP 端口 6000,而不是接口上的所有数据包。)您只需要确保 CPU 没有 100% 加载,这样数据包捕获就无法处理所有数据包。但是,无论您使用哪种方法,都是如此。