作者:[email protected] 博客:fireaxe.blog.chinaunix.net
l Vlan原理
? Vlan介紹
? 匯聚鏈接
? 802.1Q協議
? QinQ
l 交換機實現
? 交換機要做什麽
? Ingress vlan處理
? Egress vlan處理
Vlan介紹--概念
n VLAN(Virtual Local Area Network)的中文名為“虛擬局域網”,遵循IEEE802.1Q協議。
n VLAN是一種將局域網設備從邏輯上劃分成一個個網段,從而實現虛擬工作組的數據交換技術。
n Vlan的優點
廣播風暴防範
網絡安全
成本降低:
普通的交換機如下圖所示:
所有的端口都在同一個廣播域,任何一個端口發送的廣播報文都會被發送到所有端口。這樣顯然不利於網絡的隔離,還有可能會出現網絡風暴(如arp等報文)。為了避免這些問題,通常的辦法是把不同的組放到不同的交換機上,如每個辦公室屬於一個交換機。交換機之間通過路由器連接。這樣可以在一定程度上避免廣播風暴。但假如我們使用20口的交換機,而每個房間只有四、五個用戶,顯然每個房間使用一個交換機有些浪費了。如果能在同一個交換機上實現端口的分組,那就太好了。
如下圖所示,我們把交換機劃分為兩個區域。
這樣做的效果與使用兩個小一些的交換機是一樣的,但組網形式就靈活多了。假如某天需要調整端口的分配,不需要重新購買新的設備,只需要在交換機上配一下。
上面所說的就是vlan 的概念,每個vlan代表一個組。
再考慮另一個問題,交換機互聯。
如果我們30臺電腦,這就需要兩個20口的交換機級聯起來。假如此時需要vlan,而每個vlan的電腦都分布在兩個交換機上,該如何組網?
可以想見,我們需要通過下面的形式組網。這樣如果A需要發送報文到C,則可以通過互聯的藍色端口把報文從交換機1轉發到交換機2。這顯然有個問題存在,每個vlan都需要一個單獨的端口用戶交換機級聯,顯然有些浪費。如果能通過一個口把所有數據都通過一個口發送就好了。
如下圖所示,這可行嗎?只有一個障礙,交換機如何知道其他交換機轉發來的報文是屬於哪個vlan的?
辦法很簡單,在報文中增加一個字段用戶區分,在vlan中稱為tag。這就是vlan協議的由來。而由此也產生了兩種端口:trunk與access。access口用於連接pc機,這個口顯然只能屬於一個vlan,而且入口與出口都不需要附加tag。trunk口用戶交換機互聯,這個口可能會屬於多個vlan,而且報文進出都需要帶tag。
vlan的實現是802.1Q協議,它完成下面的幾項工作:
1. 通過在報文中添加字段,支持多個交換機之間的組網
2. 該字段需要有獨特的標識
3. 該字段中應該有vlan ID
QinQ技術:
n QinQ技術(也成stacked vlan 或 double lan)。 標準出自IEEE802.1ad。其實現將用戶私網Vlan Tag封裝在公網Vlan Tag中,是報文帶著兩層Vlan Tag穿越運營商的骨幹網絡(公網)
n 優點: 緩解日益緊缺的公網VLAN ID資源問題,用戶可以規劃自己的私網VLAN ID,不會導致和公網VLAN ID沖突
其組網形式如下圖所示:
根據上述內容,顯然所有功能都需要依靠vlan的tag來實現,而tag不是生來就有的。要實現tag的添加,交換機(switch)顯然有些工作是必須要做的:
n 為進入switch的untagged報文增加tag
n 為進入switch的為Ctag的報文增加Stag
n 刪除從switch出去的Stag報文的Stag
n 刪除從switch出去的Double tag報文的Stag
n 保證帶某個Vlan ID的報文只在屬於該vlan的ports中發送
根據這些功能的要求,可以畫出入口與出口的功能能框圖:
根據原始的vlan需求,顯然tag是通過端口號添加的,但隨著發展,vlan tag的添加也豐富了起來。到目前為止,常見的tag添加方法有根據mac添加、根據protocol添加、根據port添加三種。同時增加的還有vlan翻譯功能,也就是說可以對用戶所帶的tag進行改變。
報文進入switch時,首先會判斷是否帶有tag,如果有則直接進入下面的L2轉發流程。如果沒有tag,會查找mac vlan翻譯表,根據報文的源mac地址查找是否在mac vlan表中有記錄,如果有則進入L2轉發流程,否則繼續檢測protocol。在proctocol vlan中查找後,如果還是沒有,則會根據端口號打上一個tag,然後進入L2轉發流程。
綜上,進入L2轉發的報文是一定帶tag的。
Tags: Network 網絡安全 路由器 辦公室 局域網
文章來源: