1. 程式人生 > >Windows 下網絡卡對802.1Q tag 的支援

Windows 下網絡卡對802.1Q tag 的支援

Windows 下網絡卡對802.1Q tag 的支援 

目標:測試裝置對802.1p 的支援,即裝置能對802.1q tag 裡的priority 值, 對資料進行不同優先順序級別的轉發。由於手頭沒有smartbits ,也沒有VLAN 終端裝置,沒有VLAN 交換機,所以只能依靠PC 機的網絡卡來生成802.1q 的網路包。

從理論上來講,VLAN 是軟體級別的功能,網絡卡只充當物理鏈路的角色,只要驅動支援的話,任何網絡卡都可以支援VLAN。比如在Linux下,只要載入了8021q.o 模組之後,就可以用vconfig 工具對VLAN ID、Priority 等進行任意設定。而在WINDOWS 系統下,很多網絡卡聲稱支援802.1q/p, 但是根據實際的測試結果,支援的情況不盡相同。本來可以通過Linux 直接進行我要的測試,出於好奇,進行了下面幾種對Windows 的測試:

測試條件:

1, PC1 Linux 系統,用vconfig 配置VLAN ID 為3,IP 為192.168.1.5

2, PC2 Windows XP 系統(並裝有Linux 虛擬機器、Ethereal 抓包工具),上面插有待測的網絡卡,IP 為192.168.1.6

一、系統:Windows XP 網絡卡:Realtek RTL8169/8110 Family Gigabit Ethernet NIC 在網絡卡的配置頁裡有一項“802.1Q/1p VLAN Tagging”,如下:

到底Enable 這一項之後有什麼作用呢?先用一臺Linux 機(PC1)對其發VLAN ID 為3 的Tag 包,結果如下:

在PC2 用Ethereal 抓包發現,PC2 收到了帶tag 的包,但是向PC1 迴應ARP Reply 時卻不帶VLAN tag。所以PC1 就丟棄迴應包,表面現象就是PC1 PING 不通PC2。

那怎麼讓PC2 發出帶VLAN tag 的包呢?首先在Windows 下裝一個虛擬機器VMWare ,在這個虛擬機器上裝一個Linux 系統,RedHat9 或Fedora 都可以,主要是網絡卡的設定,要設定成Bidged 方式:

並且指定成物理網絡卡,Edit->Virtual Network Setting 裡的Host Virtual Network Mapping 設定如下:

這樣虛擬機器直接連線RTL8169 外部網絡卡,而Linux 裡又很容易載入VLAN 協議。(方法:

modprobe 8021q vconfig add eth0 3 ifconfig eth0.3 192.168.1.217 netmask 255.255.255.0

) OK, 現在可以在虛擬機器上向PC1 發包了,或者PC1 向虛擬機發包,並且在PC2 用Ethereal 抓包發現都是帶tag 的!

二、系統:Windows XP 網絡卡:Realtek RTL8139/810x Family Fast Ethernet NIC 在網絡卡的配置頁裡,沒有找到對應VLAN/802.1Q 的配置項,配置頁如下:

而測試結果和RTL 8169 的完全相同。

三、系統:Windows XP 網絡卡:Marvell Yukon 88E8038 PCI-E Fast Ethernet Controller

同樣,用Linux 向其髮帶tag 的包,在PC2 上用Ethereal 抓包,這一次結果和以前不同,Ethereal 裡抓到的是不帶tag 的包, 說明網絡卡直接將802.1q 的tag 剝除了,自然,迴應的時候也是不帶tag 的包,網路自然不通。利用前面的方法,也在XP 系統下裝一個虛擬機器,並且也用vconfig 配置了VLAN, 然後向PC1 發包,在PC1 上抓包發現,虛擬機器通過PC2 的網絡卡發出的包是帶tag 的。PC1 於是向PC2 髮帶tag 的迴應包,這時在PC1 抓包發現,網絡卡又將tag 標誌給剝除了,導致虛擬機器收到的是不帶tag 的包,自然又不能通訊了。

四、系統:Windows XP 網絡卡:SiS191 Ethernet Controller

這一款網絡卡對VLAN 有直接的支援,可設定VLAN ID,如下圖:

設定之後就只能和相同的VLAN ID 的網路通訊,自然和PC1 可以直接的通訊,並且通訊都是帶tag 的。但是此網絡卡只能屬於一個VLAN, 而且無法設定tag 裡的priority 。

相比之下還是Linux 下使用起來比較方便,可以將網絡卡加入多個VLAN, 並且可以設定進出包的priority 。