一次VLAN標簽引發的網絡事件的處置
一、背景介紹
事件背景:
HZ某分公司新裝一套業務系統,通過一條專線和BJ總公司連通。分配給HZ公司的ip地址為:a.b.c.X,掩碼24位,網關a.b.c.1。BJ總公司網絡管理員無法聯系、相關配置未知。
故障現象:
HZ分公司端光貓下來網線直連某台服務器(ip、掩碼、網關設置好),能ping通網關a.b.c.1。
光貓下來網線連接到二層Hub,所有服務器也連到該Hub,所有服務器能正常ping通網關a.b.c.1。Hub網口不夠,且性能不佳,未采用。
光貓下來網線連接UNIS S5600 Series交換機,該交換機為出廠配置,所有服務器之間能互通,但是均無法ping通網關。
二、原因分析
光貓下來網線直接連接服務器,服務器能ping通網關。光貓下來網線連接S5600以太口G1/0/1(access模式,vlan 1),服務器連接S5600以太口G1/0/2(access模式,vlan 1),ping網關不通。
從服務器直連光貓到達BJ對端交換機端口的數據包未帶vlan tag,從S5600以太口G1/0/1(access模式)連接BJ對端交換機端口的數據包也未帶vlan tag,所以出去的數據包是一樣的。
那么很可能接收到的數據包攜帶了vlan tag,服務器收到帶vlan tag的數據包正常處理了。傻瓜機是不具備任何處理(修改,封裝,處理封裝等)數據的能力的,所以傻瓜交換機的轉發原則,收到什么轉發什么。而S5600以太口G1/0/1的PVID默認為1,如果收到數據包vlan tag不為1,S5600收到后直接丟棄。
三、wireshark抓包查看vlan tag
將光貓網線直連電腦,wireshark抓包,查看接收到的數據包vlan tag為1016,說明這個C類段的vlan為1016。具體過程如下:
(一)先設置Wireshark
1、打開Wireshark,點擊 編輯–>首選項
2、選擇 外觀 --> 列(中文版),對應appearance–>columns,並點擊下方 + 按鈕。
3、添加命名 “Vlan”(大小寫皆可),選擇802.1Q VLAN id,並確認保存。
(二)修改電腦注冊表
1、打開電腦 網絡和Internet設置,點擊 以太網–>更改適配器設置。
選擇抓包的網口,右鍵 點擊“屬性”。
選擇Microsoft網絡客戶端,點擊配置
選擇高級,找到Priority & VLAN(中文版為優先級和VLAN)並選擇Enabled(中文版為使能),確定保存。
選擇詳細信息,屬性找到驅動程序關鍵字,記錄值。
2、在windows運行下查找regedit,進入注冊表編輯器。
進入HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007
查看 MonitorModeEnabled的值是否為1,PreserveVlanInfoInRxPacket的值是否為1。若不存在,則新建 DWORD(32位),文件名分別為MonitorModeEnabled 、PreserveVlanInfoInRxPacket,設置值為1。設置完后重啟電腦。
(三)wireshark抓包查看vlan tag
數據包分析:
IEEE 802.1Q標准對Ethernet幀格式進行了修改,在源MAC地址字段和協議類型字段之間加入4字節的802.1Q Tag。VLAN幀最小幀長為64字節。
VLAN幀格式:
1、Destination address:6字節,目的MAC地址。
2、Source address:6字節,源MAC地址。
3.1、Type:2字節,長度為2字節,表示幀類型。取值為0x8100時表示802.1Q Tag幀。如果不支持802.1Q的設備收到這樣的幀,會將其丟棄。
3.2、PRI:3比特,Priority,長度為3比特,表示幀的優先級,取值范圍為0~7,值越大優先級越高。用於當阻塞時,優先發送優先級高的數據包。
如果設置用戶優先級,但是沒有VLANID,則VLANID必須設置為0x000。
3.3、CFI:1比特,CFI (Canonical Format Indicator),長度為1比特,表示MAC地址是否是經典格式。CFI為0說明是標准格式,CFI為1表示為非標准格式。用於區分以太網幀、FDDI(Fiber Distributed Digital Interface)幀和令牌環網幀。在以太網中,CFI的值為0。
3.4、VID:12比特 ,VLAN ID,長度為12比特,表示該幀所屬的VLAN。在VRP中,可配置的VLAN ID取值范圍為1~4094。0和4095協議中規定為保留的VLAN ID。三種類型:Untagged幀:VID 不計;Priority-tagged幀:VID為 0x000;VLAN-tagged幀:VID范圍0~4095。三個特殊的VID:0x000:設置優先級但無VID;0x001:缺省VID;0xFFF:預留VID。
4、Length/Type:2字節/指后續數據的字節長度,但不包括CRC檢驗碼。
5、Data:42~1500字節/負載(可能包含填充位)。
6、CRC:4字節/用於幀內后續字節差錯的循環冗余檢驗(也稱為FCS或幀檢驗序列)。
0x81 00時表示802.1Q Tag幀,0x 3f8為VLAN ID,轉換成十進制為1016。如下圖:
四、解決方法
(一)H3C交換機設備上access、trunk、hybrid端口的處理流程
(1)access端口
發送(從交換機內部往外發送):
帶有vlan tag:刪除tag后,發送
不帶vlan tag:不可能出現
接收:
帶有vlan tag:若該tag等於該access端口的pvid,則可以接收,進入交換機內部
不帶vlan tag:添加該access端口的pvid,進入交換機內部
(2)trunk端口(允許發送native VLAN數據的時候,可以不加tag)
發送(從交換機內部往外發送):
帶有vlan tag:若tag等於該trunk端口的pvid,則刪除tag后發送;否則保留tag直接發送
不帶vlan tag:不可能出現
接收:
帶有vlan tag:保留該tag,進入交換機內部
不帶vlan tag:添加該trunk端口的pvid,進入交換機內部
(3)hybrid端口(允許發送多個VLAN數據的時候,可以不加tag)
發送(從交換機內部往外發送):
帶有vlan tag:是否帶tag進行發送,取決於用戶配置(用戶可以配置tagged list,untagged list)
不帶vlan tag:不可能出現
接收:
帶有vlan tag:保留該tag,進入交換機內部
不帶vlan tag:添加該hybrid端口的pvid,進入交換機內部
注:數據幀在交換機內部處理時,均帶有vlan tag。
(二)對端互聯端口配置分析
對端交換機和我互聯端口不可能為access口(access口刪除tag后再發送出去)。
若為trunk口:(1)trunk口發送規則為:若tag等於該trunk端口的pvid,則刪除tag后發送;否則保留tag直接發送。說明該端口的pvid不可能為1016。(2)其接收規則為:不帶vlan tag的包添加該trunk端口的pvid,進入交換機內部 。而電腦直連能和網關通又要求trunk端口的pvid為1016。所以不成立。
對端和我互聯交換機端口則為hybrid端口。該端口pvid為1016(接收不帶vlan tag時添加該hybrid端口的pvid,進入交換機內部)。1016在tagged list中(發送帶有vlan tag時是否帶tag進行發送,取決於用戶配置)。
(三)我端交換機S5600配置。
滿足:(1)對端發過來的vlan tag 1016能接得住;(2)發過去的要么不帶vlan tag,要帶就帶1016即可。
連接服務器的端口配置:access模式,vlan 1016。
與對端交換機互聯口配置:(1)若為access模式,該端口pvid設置為1016即可。(2)若為trunk模式,該端口pvid不為1016,且允許1016過即可。(3)若為hybrid模式,將vlan 1016配置為tagged list,允許1016過即可。