有时,我不得不面对这样的情况,我需要快速而明确地知道全长 VLAN 数据包是否可以在两个 RJ45 端口之间穿越。
是的,我的意思是 802.1Q 以太网帧的 Etype=81 00(下图)。
我现在能做的是:准备两台 Windows PC,每台 PC 安装英特尔千兆网卡和英特尔特定驱动程序来创建虚拟网卡,并分配 VLAN ID=3。
然后将两台 PC 分别连接到两个 RJ45 端口。
最后执行ping生成一个全长的以太网数据包。
ping -f -l 1472 <dest-IP>
这样,我可以确保发送的数据包具有 1500 字节的最大“IP 数据有效负载”(8 字节的 ICMP 头和 1472 字节的 ICMP 数据)。
如果 ping 得到回复,我就知道以太网通道支持全长 VLAN 数据包。
从我的实验来看,一些家用交换机或宽带路由器(例如 Linksys WRT54G)不支持全长 VLAN 数据包交换,因此只能ping -f -l 1468
成功。
你看,我必须使用昂贵的 Intel NIC 来进行那个测试,非常不方便。你知道,对于当今的大多数笔记本电脑,它们都没有配备 Intel NIC,而且,即使是 Intel NIC,Intel VLAN 驱动程序,Intel 对可以安装 VLAN 驱动程序的型号也有限制。
所以,我的问题是:有没有一个小程序可以让我在不安装专用的 VLAN 驱动程序的情况下发送全长的 VLAN 数据包?或者更好的是,该程序有一个库存功能,可以满足我的情况。
首选 Windows 程序,欢迎 Linux 解决方案。程序越简单越好。谢谢。
[额外的]
2006 年左右购买的 Linksys 路由器使用官方固件 v7.00.6。 (linksys 网络管理员图像)
[2012-11-09] 这项技术非常有用。要检查的以太网通道可以是更有趣的东西,例如 802.11 WDS 桥接器。
答案1
如果 NIC/驱动程序是限制,那么您就无法采取任何措施,即使程序允许您发送更大的数据包,它也会碎片化。
在 Linux 中启用 VLAN 标记很容易。您需要安装 vconfig(ubuntu 中的 vlan 包),然后可以使用相同的 ping 测试或 iperf。
答案2
我想另一个选择是使用数据包嗅探软件包,例如来自的 wiresharkhttp://www.wireshark.org/监控两端的流量,这样可以确保您看到通过的数据,尽管它不允许您为测试创建全尺寸的数据包。
如果你将它与类似 nemesis 的东西结合起来http://nemesis.sourceforge.net/;此工具可用于制作要注入的数据包,也可用于重新发送捕获的数据包,因此,理论上,您可以使用您的方法生成测试数据包,捕获它,然后将其与 nemesis 一起重新使用并在远端监控它以查看它是否通过,从而省去了安装和配置能够进行 VLAN 标记的卡的麻烦。如果这有效,您可以非常轻松地围绕预先捕获的数据包和 nemesis 构建脚本,然后使用 wire shark 在远端监听它,或者在近端监听 icmp 响应(如果远端配置了 VLAN)。
由于我从未使用过 nemesis,因此此方法完全未经测试,但它在 wireshark 网站上被列为一种有用且得到很好支持的数据包注入工具。
答案3
在 Andres 的 Linux 提示vconfig
和一些空闲时间尝试之后,我终于成功了。
我的实验箱里有以下东西:
- 运行 Windows XP 的笔记本电脑,且至少有两个可用的 USB 端口。
- 在 Windows 上安装 VMware Workstation 7.1,创建两个运行 openSUSE 12.2 的虚拟机。
- 两个支持全长 VLAN 数据包的 USB 以太网适配器。我的选择是中特 ZK011,其采用的是 Realtek RTL8150 芯片。
RTL8150 非常好,以至于 openSUSE Linux(至少从 SuSE 9.0 开始)内置了它的驱动程序,并且 vconfig 也是一个预安装的包。一旦插入 Linux,Linux 就会eth1
为其创建一个设备。
然后,在 eth1 上创建 vlan=30 接口,
vconfig add eth1 30
现在ifconfig
将显示一个名为 的新 nic 设备eth1.30
。
为 eth1.30 分配一个 IP,
ifconfig eth1.30 10.1.1.5 up
对另一个 Linux VM 执行上述操作,但分配不同的 IP。
最后,通过任何集线器/交换机将两个加密狗与以太网电缆连接起来进行检查。
现在,我可以尝试使用最大 MTU 进行 ping 操作。
ping -s 1472 -M do 10.1.1.6
干杯!
这里最不确定的因素是,USB 以太网适配器本身是否支持全长 VLAN 数据包。为了验证这一点,我曾经使用交叉线将两个适配器连接起来并互相 ping。
顺便说一句:Z-TEK ZE543(Moschip MCS7830)似乎不支持全长 VLAN 数据包,至少在默认的 Linux 驱动程序中不支持。