VLAN 标记:重复数据包

VLAN 标记:重复数据包

我对 VLAN 标记有疑问。我对 VLAN 完全是新手,所以也许我根本误解了一些东西......

基本上:我有一个 Linux 盒子,配置/etc/network/interfaces如下:

allow-hotplug eth0
iface eth0 inet static
   address 192.168.70.31
   netmask 255.255.255.0

allow-hotplug eth0.0001
iface eth0.0001 inet static
   address 192.168.1.31
   netmask 255.255.255.0

我调整了路由表,现在我有(ip r命令的输出):

192.168.1.0/24 dev eth0.0001 proto kernel scope link src 192.168.1.31
192.168.70.0/24 dev eth0 proto kernel scope link src 192.168.70.31

如果我使用 Wireshark 监视数据包,同时 ping 另一台标记有 VLAN ID 1 的主机(在我的测试中为 192.168.1.30),那么我会看到我的主机发出重复的数据包,一个正确的 VLAN ID 和另一个(来自同一个 192.168.1.31 接口!)没有VLAN 标记。另一台主机分别响应带有和不带正确 VLAN 标记的两个数据包,如下面的屏幕截图所示:

Wireshark 捕获屏幕截图

问题是:为什么我的主机发出重复的数据包?如果 ping 192.168.1.x 网络中的另一台主机,它不应该只发出带有正确 VLAN 标记的数据包(1在我的例子中)?

答案1

只有物理接口:eth0.链接到实际接口的任何虚拟接口(此处:eth0.0001)都会在其虚拟视图中显示封装的流量,直到流量通过实际接口发出。

网络堆栈将使此类流量流经每个接口,直到到达离开计算机的最终接口。每个步骤都可以单独捕获,从而导致同一有效负载的多次捕获,但具有不同的封装属性。

因此,使用 Wireshark 可以看到发生的情况(在非常简化的视图中):

  • VLAN 接口显示 VLAN 帧中的有效负载,因此不显示任何 VLAN

    该虚拟接口是参与 IP LAN 192.168.1.0/24 路由​​的虚拟接口。 IP 数据包被发出,并且本身被封装在(普通)以太网帧内。 (在此之前,ARP 流量也会发生,但不在捕获中)。该帧由 Wireshark 捕获,然后发送给处理 VLAN 接口的网络部分。

  • 界面eth0显示封装的负载,因此显示 VLAN ID 1。

    先前的以太网帧eth0.0001一旦到达,就会被封装上一个额外的 VLAN 标记(向帧添加 4 个字节),eth0并再次被 Wireshark 捕获(但不一样),然后再由 NIC 驱动程序提供给实际 NIC 的硬件。

Wireshark(也tcpdump适用于这个非常简单的情况)不会停留在第一层,而是显示更多内容:使用地址和 IP 协议 (ICMP) 进行 IPv4 解码。

答案2

好的,明白了,感谢 AB 的评论,它让我走上了正确的道路......

我正在捕捉全部Wireshark 中的接口,因此在捕获中显示了来自原始设备 (eth0) 和虚拟设备 (eth0.0001) 的数据包...

因此,基本上,当您将数据包发送到 192.168.1.x 时,它会在虚拟接口 eth0.0001 上路由(没有 VLAN 标记);虚拟接口添加 VLAN 标记并将其“传输”到“原始”接口(在我的例子中为 eth0),该接口实际上通过线路发送它...要求 Wireshark 显示所有接口,数据包被列出两次(一个来自虚拟接口)接口和原始接口之一)。

更新:@AB 几分钟后发布了他自己的答案,这比我更好地解释了这个主题......请参考他的答案(已投票并接受)

相关内容