首页 > 解决方案 > 为什么环回接口上的 tcpdump 只捕获过滤器接收到的一半数据包?

问题描述

我试图理解为什么在环回接口上使用 tcpdump 时,过滤器接收到的数据包只有一半被捕获。但是当我运行完全相同的流量并在 eth0 接口上执行 tcpdump 时,所有流量都会被捕获。

在这两种情况下,我都针对流量和 tcpdump 的特定端口。

我在这里发现了一个类似的问题,为什么 tcpdump 捕获了一半的数据包

建议是它正在过滤接口发送和接收的重复项。他们正在查看整个界面,而不是挑选出特定的端口。在这里,情况似乎并非如此,因为我在特定端口上使用转储,流量的源端口和目标端口不同。还查看具有相同流量的 eth0,我可以看到 lo 和 eth0 过滤器正在接收的所有捕获的数据包。

例如,我向 eth0 和 lo 发送 10 个 udp 数据包,我得到以下信息:

tcpdump -i eth0 udp port xxxx

10 packets captured 
10 packets received by filter
0 packets dropped by kernel

tcpdump -i lo udp port xxxx

5 packets captured 
10 packets received by filter
0 packets dropped by kernel

所以看起来 tcpdump 只为环回过滤流量,可能每秒钟抓取一个数据包。时间戳似乎表明了这一点,就好像我以每秒 1 个数据包的速率发送数据包一样,在 eth0 上,我看到捕获的数据包以 1 秒的间隔发生。在 lo 上,捕获的数据包每隔 2 秒发生一次。

环回上的 tcpdump 是否有一些默认配置,导致它每隔一个数据包过滤一次?

还是我误解了什么?tcpdump 会根据所选的接口以不同的方式运行,这似乎很奇怪。

标签: loopbacktcpdumppacket-capture

解决方案


推荐阅读