如何使用 tcpdump 通过 LACP 捕获带和不带 VLAN 标记的混合数据包?

网络工程 VLAN arp IEEE-802.1ax 转储
2021-08-01 13:38:57

在 Linux 中给出以下配置:

  • bond0 在 LACP (802.3ad) 模式下运行两个 VLAN 网络。
  • bond0.111 配置静态IP
  • bond0.222 配置了 DHCP

如何从bond0 捕获数据包,以便我可以查看ARP 响应数据包是否具有正确的VLAN 标记?如果我做

sudo tcpdump -vvv -i bond0 -U -l -n

我收到了所有数据包(包括 LACP 同步),但没有数据包包含有关 VLAN 标记的信息,因此我不知道它们属于哪个网络。

如果我做

sudo tcpdump -vvv -i bond0 -U -l -n -e vlan

相反,我得到了所有包含 VLAN 标记的数据包,但我丢失了所有没有 VLAN 标记的数据包。

如何运行tcpdump以便我可以看到所有数据包(包括 LACP 同步、不带 VLAN 标记的 ARP 请求和带 VLAN 标记的 ARP 请求),包括(但不要求)使用的 VLAN 标记值?

我在诊断网络失败的问题时遇到了这个问题,因为交换机配置不正确并且它丢弃了 VLAN 111 中所有数据包的 VLAN 标记。用 Cisco 的话说,VLAN 111 被意外配置为“本地 vlan”。如果我能够从一开始就看到所有流量,那么诊断问题就会容易得多。

我知道流量足够低,无法填充缓冲区(-B标志为tcpdump),因此我不会因为缓冲区空间不足而丢失数据包。

1个回答

-e标志不以这种方式工作。当你写

tcpdump .... -e vlan

这并不意味着“如果可用,则显示 vlan 标签”。它的意思是“显示链接级标头”“仅显示与表达式 匹配的数据包vlan”。旗帜-e不接受争论!

所以捕获一切的正确命令是

sudo tcpdump -vvv -i bond0 -U -l -n -e