預備知識:
tag, untag以及交換機的各種端口模式是網絡工程技術人員調試交換機時接觸最多的概念了,然而筆者發現在實際工作中技術人員往往對這些概念似懂非懂,筆者根據自己的理解再結合一個案例,試圖向大家闡明這些概念。
untag就是普通的Ethernet報文,普通PC機的網卡是可以識別這樣的報文進行通訊;
tag報文結構的變化是在源mac地址和目的mac地址後,加上了4bytes的vlan信息,也就是vlan tag頭,一般來說這樣的報文普通PC機的網卡是不能識別的;
帶802.1Q的幀是在標準以太網幀上插入了4個字節的標識。其中包含:
2個字節的協議標識符(TPID),當前置0x8100的固定值,表明該幀帶有802.1Q的標記信息。
2個字節的標記控制信息(TCI),包含了三個域。Priority域,佔3bits,表示報文的優先級,取值0到7,7爲最高優先級,0爲最低優先級。該域被802.1P採用。規範格式指示符(CFI)域,佔1bit,0表示規範格式,應用於以太網;1表示非規範格式,應用與Token Ring。VLAN ID域, 佔12bit,用於標識VLAN的歸屬。
以太網端口的三種鏈路類型:Access、Hybrid和Trunk:
Access類型的端口只能屬於1個VLAN, 一般用於連接計算機的端口;
Trunk類型的端口可以允許多個VLAN通過,可以接收和發送多個VLAN的報文,一般用於交換機之間的連接端口;
Hybrid類型的端口可以允許多個VLAN通過,可以接收和發送多個VLAN的報文,可以用於交換機之間的連接,也可以用於連接用戶的計算機。
Hybrid端口和Trunk端口在接收數據時,處理方法是一樣的,唯一不同之處在於發送數據時:Hybrid端口可以允許多個VLAN的報文發送時不打標籤,而Trunk端口只允許缺省VLAN的報文發送時不打標籤。
在這裏大家要理解端口的缺省VLAN這個概念
Access端口只屬於1個VLAN,所以它的缺省VLAN就是它所在的VLAN,不用設置;
Hybrid端口和Trunk端口屬於多個VLAN, 所以需要設置缺省VLAN ID。缺省情況下,Hybrid端口和Trunk端口的缺省VLAN爲VLAN 1;
如果設置了端口的缺省VLAN ID,當端口接收到不帶VLAN tag的報文後,則將報文轉發到屬於缺省VLAN的端口;當端口發送帶有VLAN tag的報文時,如果該報文的VLAN ID與端口缺省的VLAN ID相同,則系統將去掉報文的VLAN tag,然後再發送該報文。
注:對於華爲交換機,缺省VLAN被稱爲“Pvid Vlan”,對於思科交換機缺省VLAN被稱爲“Native Vlan”。
交換機接口出入數據處理過程:
Access端口收報文:
收到電腦或者其他設備的一個報文,判斷是否有VLAN信息:如果沒有則打上端口的PVID, 並進行交換轉發;如果有則直接丟棄(缺省);重要
Access端口發報文:
將報文的VLAN信息剝離, 直接發送出去;
Trunk端口收報文
收到一個報文,判斷是否有VLAN信息:如果沒有則打上端口的PVID,並進行交換轉發;如果有則判斷該Trunk端口是否允許該VLAN的數據進入:如果可以則轉發,否則丟棄;
Trunk端口發報文:
比較端口的PVID和將要發送報文的VLAN信息,如果兩者相等則剝離VLAN信息,再發送,如果不相等則直接發送;
Hybrid端口收報文:
收到一個報文,判斷是否有VLAN信息:如果沒有則打上端口的PVID, 並進行交換轉發;如果有則判斷該Hybrid端口是否允許該VLAN的數據進入,如果可以則轉發,否則丟棄(此時端口上的untag配置是不用考慮的,untag配置只是對發送報文時起作用)。
Hybrid端口發報文
1、判斷該VLAN在本端口的屬性(disp interface即可看到該端口對哪些VLAN是untag,哪些VLAN是tag);
2、如果是untag則剝離VLAN信息,再發送,如果是tag則直接發送;
以下案例可以幫助大家深入理解華爲交換機的Hybrid端口模式:
[Switch-Ethernet0/1]int e0/1
[Switch-Ethernet0/1]port link-type hybrid
[Switch-Ethernet0/1]port hybrid pvid vlan 10
[Switch-Ethernet0/1]port hybrid vlan 10 20 untagged
[Switch-Ethernet0/1]int e0/2
[Switch-Ethernet0/2]port link-type hybrid
[Switch-Ethernet0/2]port hybrid pvid vlan 20
[Switch-Ethernet0/2]port hybrid vlan 10 20 untagged
此時 inter e0/1和 inter e0/2下所接的PC是可以互通的,但互通時數據所走的往返vlan是不同的。以下以inter e0/1下的所接的pc1訪問inter e0/2下的所接pc2爲例進行說明:
pc1所發出的數據,由inter0/1所在的pvid vlan10封裝vlan 10的標記後送入交換機,交換機發送inter e0/2允許vlan 10的數據通過,於是數據被轉發到inter e0/2上,由於inter e0/2上的vlan 10是untagged的,於是交換機此時去除數據包上的vlan 10的標記,以普通包的形式發給pc2,此時pc1->pc2走的是vlan 10。
再來分析pc2給pc1回包的過程:
pc2所發出的數據,由inter0/2所在的pvid vlan 20封裝vlan 20的標記後送入交換機,交換機發送inter e0/1允許vlan 20的數據通過,於是數據被轉發到inter e0/1上,由於inter e0/1上的vlan 20是untagged的,於是交換機此時去除數據包上的vlan 20的標記,以普通包的形式發給pc1,此時pc2->pc1走的是vlan 20。