發明者
生成樹協定是由Sun微系統公司著名工程師拉迪亞·珀爾曼博士(Radia Perlman)發明的。
1988 年, 珀爾曼在MIT完成了她的計算機科學博士學位。
珀爾曼在1993年離開了DEC去了Novell工作, 1997她又加入Sun Microsystems 公司。
珀爾曼博士擁有80多個技術發明專利, 其中40多個是在Sun Microsystems 公司發明的。
珀爾曼博士被哈佛大學和華盛頓大學聘請為客座教授。
珀爾曼博士在數據通信領域的經典著作有:
《Interconnections: Bridges, Routers, Switches,and Internetworking Protocols》
《Network Security: Private Communication in a Public World》
珀爾曼博士被授予了許多傑出工程師獎,
她被評為20個數據通信領域最有影響力的人之一。
結構思路
生成樹協定拓撲結構的思路是: 不論網橋(交換機)之間採用怎樣物理聯接,網橋(交換機)能夠自動發現一個沒有環路的拓撲結構的網路,這個邏輯拓撲結構的網路必須是樹型的。生成樹協定還能夠確定有足夠的連線通向整個網路的每一個部分。所有網路節點要么進入轉髮狀態,要么進入阻塞狀態,這樣就建立了整個區域網路的生成樹。當首次連線網橋或者網路結構發生變化時,網橋都將進行生成樹拓撲的重新計算。為穩定的生成樹拓撲結構選擇一個根橋, 從一點傳輸數據到另一點, 出現兩條以上條路徑時只能選擇一條距離根橋最短的活動路徑。生成樹協定這樣的控制機制可以協調多個網橋(交換機)共同工作, 使計算機網路可以避免因為一個接點的失敗導致整個網路聯接功能的丟失, 而且冗餘設計的網路環路不會出現廣播風暴。
例如,網路中,A點到C點,有兩條路可以走,當ABC的路徑不通的時候,可以走ADC。C點到A點也是,路徑CDA不通的時候可以走CBA。
如果某一時刻的網路,使能生成樹協定,阻塞了B到C的連線埠,那么網路拓撲就會變成下圖。如果有廣播包,一定會終結於B點或者C點,不會循環轉發。
特點
網橋使用珀爾曼博士發明的這種方法能夠達到2層路由的理想境界:冗餘和無環路運行。你可以把生成樹協定構想為一個各網橋設備記在心裡的用於進行最佳化和容錯傳送數據的過程的樹型結構. 生成樹協定(Spanning Tree)定義在 IEEE 802.1D 中,是一種鏈路管理協定,它為網路提供路徑冗餘同時防止產生環路。為使乙太網更好地工作,兩個工作站之間只能有一條活動路徑。網路環路的發生有多種原因,最常見的一種是有意生成的冗餘- 萬一一個鏈路或交換機失敗,會有另一個鏈路或交換機替代。
實現
802.1D生成樹協定概述
1,幾個關鍵的概念:(1)網橋標識(bridge ID):
①非擴展的:網橋優先權(2bytes)+ MAC地址②擴展的:網橋優先權(4bits) + 系統標識(VLAN ID;12bits) + MAC地址
(2)網橋協定數據單元(BPDU):
①配置(CFG)BPDU: 初始時每個網橋都會傳送,假設自己就是根網橋
收斂後,只從根網橋發出,其他網橋在根連線埠接收後向下中繼。
②拓撲改變提示(TCN)BGDU:當拓撲發生變化時,其他網橋可以從根連線埠發出該BPDU,到達根網橋。
根網橋在配置BPDU中設定TCN位,提示其他網橋快速清理MAC地址表。
(3)時間值:
①HELLO間隔:2秒,CFG BPDU傳送間隔
②MAX AGE: 20秒,CFG BPDU的保留時間
③FWD_DELAY: 15秒,監聽(listening)和學習(learning)的時間
(4)路徑代價:與鏈路速率相關,用於計算網橋間的距離
(5)連線埠狀態:
①關閉(disable):連線埠處於管理關閉狀態
②阻塞(blocking): 不能轉發用戶數據
③監聽(listening): 接口開始啟動
④學習(learning) : 學習MAC地址, 構建MAC表進程項
⑤轉發(forwarding): 可以轉發用戶數據
(6)選擇標準:
①最低的網橋標識號
②最低的路徑代價到根網橋
③最低的傳送者的網橋標識號
④最低的連線埠標識號
2,選擇操作順序:
(1)選擇一個根網橋:每一個網路選擇一個
(2)選擇一個根連線埠:每一個非根網橋選擇一個
(3)選擇一個指派連線埠:每一個網段選擇一個
(4)非指派連線埠被放置在阻塞狀態
在園區網中實現生成樹協定
1,實現最佳化的生成樹拓撲
(1)每VLAN生成樹協定(PVST):每一個VLAN有一個生成樹的計算進程
(2)根網橋的選擇:樓內分布層交換機應該成為根網橋,即避免訪問層交換機成為根網橋
(3)生成樹的負載平衡:配置不同的分布層交換機成為不同VLAN的根網橋
2,配置根網橋:兩種方式
(1)定義優先權:
(config)#spanning-tree vlan priority
(2)定義交換機為根網橋:
(config)#spanning-tree vlan root [primary|secondary]
加速生成樹協定的收斂過程
1,連線埠快速(postfast):
(1)連線埠立即從阻塞狀態進入轉髮狀態,不經過監聽和學習狀態
(2)應該只將這一特性配置在連線終端主機的連線埠上,即不應配置在交換機間的連線埠上。
(3)配置命令:兩種方式
①接口配置模式:
(config-if)#spanning-treeportfast
②全局模式:對所有非骨幹鏈路連線埠生效
(config)#spanning-treeportfastdefault
2,快速生成樹協定(RSTP):802.1w
(1)連線埠狀態:
①丟棄(discarding):不能轉發用戶數據
②學習(learning):學習MAC地址, 構建MAC表進程項
③轉發(forwarding): 可以轉發用戶數據
(2)連線埠類型:
①根(root)連線埠:與802.1D相同
②指派(designated)連線埠: 與802.1D相同
③預備(alternative)連線埠: 連線埠被阻塞,作為根連線埠的備份
④備份(backup)連線埠:(learning) : 連線埠被阻塞,作為指派連線埠的備份
(3)網橋協定數據單元:
①數據欄位:增加了4個欄位描述位,說明連線埠的狀態和類型
②CFG BPDU:直接在兩個交換機間交換,如果丟失3個BPDU,意味著鏈路拓撲發生改變。
③TCNBPDU:直接在交換機間泛洪。
(4)快速收斂機制:
①邊緣(edge)連線埠: 連線終端主機的連線埠,自動實現連線埠快速特性
②點到點鏈路:即全雙工鏈路,自動實現快速連線埠狀態改變,不再有max-age和fwd-delay的延遲
(5)配置命令:
(config)#spanning-tree mode rapid-pvst
(6)校驗命令:
#show spanning-tree vlan
#debug spanning-tree
增強生成樹協定的操作性能
1,多進程生成樹協定(MSTP):
(1)定義:映射多個vlan生成樹計算進程到一個MST的進程;減少PVST的計算負擔;實現與CST域的互操作
(2)配置命令:
①進入MST配置模式:
(config)#spanning-tree mst configuration
②定義MST域名:
(config-mst)#name
③定義MST的配置版本號:
(config-mst)#revision
④映射多個VLAN到一個MST進程:
(config-mst)#instance vlan
⑤定義根網橋:
(config)#spanning-tree mst root [primary|secondary]
(3)校驗命令:
#show spanning-tree mst configuration
#show spanning-tree mst
2,以太通道(etherchannel):
(1)定義:
①綁定多條相同的乙太網鏈路作為一個邏輯的通道。
②生成樹協定將其看作為一個連線埠的鏈路
③實現多鏈路上的負載平衡和冗餘
(2)配置二層的以太通道:
①指定要綁定的連線埠範圍:
(config)#interface range
②定義通道管理協定:
(config-if-range)#channel-protocol [pagp|lacp]
③定義連線埠到通道:
(config-if-range)#channel-group mode on
④定義負載平衡模式:
(config)#port-channel load-banlance
(3)校驗命令:
#show interfaces etherchannel
#show etherchannel port-channel
#show etherchannel summary
保護最佳化的生成樹拓撲結構
1,防止"連線埠快速"的錯誤:
錯誤:把交換機連線到了配置了"連線埠快速"的連線埠上,可能引起環路問題
(1)BPDU守衛(GUARD):
①定義:當配置了"連線埠快速"的連線埠接收到BPDU時,關閉該連線埠。
②配置命令:
(config)#spanning-treeportfastbpduguard
③校驗命令:
#show spanning-tree summary totals
(2)BPDU過濾(filtering):
①定義:當配置了"連線埠快速"的連線埠接收到BPDU時,該連線埠失去"連線埠快速"特性。
②配置命令:
(config)#spanning-treeportfastbpdufilter default
③校驗命令:
#show spanning-tree summary totals
2,保護現有最佳化的根網橋:"根守衛"(root guard)
(1)定義:當連線埠收到一個具有更好的參數的網橋協定數據單元(superiorbpdu)時,
將該連線埠放置在一個"根不一致(root-inconsistent)"狀態,不轉發這一BPDU。
(2)配置命令:
(config-if)#spanning-tree guardroot
(3)校驗命令:
#show spanning-tree inconsistentports
3,阻止可能的生成樹的環路:
(1)單向鏈路檢測(UDLD):
①定義: 通過傳送檢測訊息發現物理鏈路出現單向中斷時,關閉該鏈路連線埠。
②配置命令:
(config)#udld enable →在所有的光纖連線埠上啟用
或(config-fi)#udld enable →在某一個光纖或非光線連線埠上啟用
③校驗命令:
#show udld interface
(2)環路守衛(loop guard):
①定義: 當某一方向連線埠在MAX-AGE時間後沒有收到BPDU時,
將該連線埠放置在一個"環路非一致(loop-inconsistent)"狀態,
阻止該連線埠傳送用戶數據。
②配置命令:
(config-if)#spanning-tree guardloop
③校驗命令:
#show spantree guard