tcpdump P 方向的含义

tcpdump P 方向的含义

情况是,在 kvm/libvirt/qemu ( 10.202.7.128) 下运行的 VM 通过虚拟机管理程序的桥接器 ping 另一个基于硬件的系统 ( 10.202.7.4)。一切正常,但'tcpdump -neli any icmp and host 10.202.7.128'每个请求显示三个条目:

14:42:39.921785 P 52:54:00:14:71:1b 
ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 2485, seq 1, length 64

第二项与第一项完全相同,只是P被 替换为"Out",第三项与第一项完全相同。接下来是来自同一 MAC 地址的三个回复,10.202.7.4唯一的区别是POutP序列。

为什么每次 ping 都会有三个条目,P方向中的 是什么意思?我在网上搜索无果,除非我搜索错了。

更新:

根据 Zoredache 的回答,我将接口规范调整为三个相关项:(vnet5虚拟机管理程序上的客户虚拟机网卡)、br0(虚拟机管理程序的桥接器)和eno1(被标识为桥接器桥接端口的物理网卡),并在测试每个接口时为每个 ping 获得一个请求/回复,因此我(大胆地)猜测这就是三个条目使用“任何”的原因。我仍然对 、 、 的顺序感到困惑,PP什么 见解吗?OutP.

进一步更新(我要感谢 Anton 的研究,非常感谢。)

使用四个 tcpdump 规范再次运行测试,所有规范都'-neli <interface> icmp and host 10.202.7.128'带有接口vnet5br0eno1any”。注意时间戳以确定哪个“ any”条目与各个接口条目匹配。

“任何”结果(vnet5/10.202.7.12852:54:00:a2:bd:4810.202.7.4b0:00:b4:02:93:6e

00:06:57.775050   P 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775074 Out 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775050   P 52:54:00:a2:bd:48 ethertype IPv4 (0x0800), length 100: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940   P b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64
00:06:57.775956 Out b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64
00:06:57.775940   P b0:00:b4:02:93:6e ethertype IPv4 (0x0800), length 100: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

vnet5 结果

00:06:57.775050 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775956 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

br0 结果

00:06:57.775050 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

eno1 结果

00:06:57.775074 52:54:00:a2:bd:48 > b0:00:b4:02:93:6e, ethertype IPv4 (0x0800), length 98: 10.202.7.128 > 10.202.7.4: ICMP echo request, id 27288, seq 1, length 64
00:06:57.775940 b0:00:b4:02:93:6e > 52:54:00:a2:bd:48, ethertype IPv4 (0x0800), length 98: 10.202.7.4 > 10.202.7.128: ICMP echo reply, id 27288, seq 1, length 64

时间戳775050对应于vnet5br0,即预期的第一个“跳跃”(vnet5br0)。775074对应于eno1是预期的第二个“跳跃”(br0eno1)。 我无法解释第二个775050条目的重复,因为它仍然是一个请求。

时间戳775940对应于eno1br0,即回复(eno1br0)的预期第一个“跳跃”。775956时间戳对应于vnet5,即回复(br0vnet5)的预期第二个“跳跃”。同样,我无法解释第二个条目的重复,775940因为它仍然是回复。

最后要注意的是,两个“ Out”条目均指br0传输到接口(eno1出站、vnet5入站)。

如果有人对这两条条目的重复有解释,请回复。

答案1

我看过了源代码tcpdump

数据包类型字段含义:

  • In- 数据包发往主机
  • Out- 传出数据包
  • B- 播送
  • M- 多播
  • P- 数据包发往其他主机

更新

由于选项tcpdump导致输出中出现重复的数据包。-i any

当以太网帧通过 Linux 桥接器并使用-i anytcpdump 选项时,您将多次看到此帧。第一次在输入接口上看到该帧(vnet5),第二次在桥接器接口本身上看到该帧(br0),第三次在输出接口上看到该帧(eno1)。在桥接器接口上看到传输帧是 Linux 内核中以太网桥接实现的副作用。

此外,当桥接接口有多个端口(从属接口)时,在某些情况下,当以太网帧被淹没时,您会在每个端口上看到帧的副本。广播、多播和未知单播帧都会发生这种情况。

答案2

您的大部分重复都是由-i any您传递的选项引起的。

当你这样做时,tcpdump 将在每个接口上进行捕获,如果是路由器、网桥或某些在接口之间转发数据包的设备,它将返回数据包的副本每一个它击中的界面。

我不太熟悉 KVM,但我相信如果您有 2 个通过桥接接口连接的虚拟机,则每个虚拟机都会有一个虚拟接口和桥接接口。

无论如何,如果您不想出现重复,请通过为选项提供特定接口的名称将 tcpdump 限制为单个接口-i。尽管对于某些问题,您可能实际上想要所有接口,在这种情况下,您只需了解您将会看到重复。

相关内容