第十三章 生成樹協議

    一個局域網通常由多臺交換機互連而成,爲了避免廣播風暴,我們需要保證在網絡中不存在路徑環路,也就是說所有鏈路應該組成一顆無迴環的樹,交換機上的STP(生成樹協議)就實現了這樣的功能。在本章中我們首先會學習有關STP協議的一些基本概念,以及STP協議是如何通過實現冗餘鏈路的閉塞和開啓從而實現一棵動態的生成樹的,最後我們還會介紹一下RSTP(快速生成樹協議)和MSTP(多生成樹協議),以及如何在交換機上對生成樹進行配置。


STP產生背景

路徑迴環的影響

wKioL1aXBnLy0lDZAAEnU-zuTpE188.jpg

    在交換網絡中,網橋不會對以太網數據幀做任何修改,幀中也不會記錄到底經過了幾個網橋。如果網絡小紅存在環路,幀有可能在環路中不斷循環和增生,造成網絡帶寬被大量重複幀佔據,導致網絡擁塞。

    上圖中是一個由於環路造成數據幀循環和增生的例子。

    開始,假定PCA還沒有發送過任何幀,因此網橋SWA、SWB和SWC的地址表中都沒有PCA的地址記錄。

    當PCA發送了一個幀,最初三個網橋都接收了這個幀,記錄PCA的地址在物理段A上,並將這個幀轉發到物理段B上。

    網橋SWA會將此幀轉發到物理段B上,從而SWB和SWC將會再次接收到這個幀,因爲SWA對於SWB和SWC來說是透明的,這個幀就好像是PCA在物理段B上發送的一樣,於是SWB和SWC記錄PCA在物理段B上,將這個新幀轉發到物理段A上。

    同樣的道理,SWB會將最初的幀發到物理段B上,那麼SWA和SWC都接收到這個幀。SWC認爲PCA仍然在物理段B上,而SWA又發現PCA已經轉移到物理段B上了,然後SWA和SWC都會轉發新幀到物理段A上。如此下去,幀就在環路中不斷循環,更糟糕的是每次成功的幀發送都會導致網絡中出現兩個新幀。

STP的作用

wKioL1acisLC6rH1AAHou2D7G6k255.jpg

    儘管透明網橋存在這個隱患,但是它的應用還是相當有誘惑力的,因爲透明網橋在無迴路的網絡中發揮的作用是無可指摘的。那麼是不是就認爲我們不能組建有迴路的網絡呢?這顯然是不合適的,因爲迴路的存在可以在拓撲結構的某條鏈路斷開之後,仍然保證網絡的連通性。

    爲此,我們找到了一種很好的算法,它通過阻斷冗餘鏈路將一個有迴路的橋接網絡修剪成一個無迴路的樹形拓撲結構,這樣既解決了迴路問題,又能在某條活動(active)的鏈路斷開時,通過激活被阻斷的冗餘鏈路重新修剪拓撲結構以恢復網絡的連通。

    上面的圖中給出了一個應用生成樹的橋接網絡的例子,其中字符ROOT所標識的網橋是生成樹的樹根,實線是活動的鏈路,也就是生成樹的枝條,而虛線則是被阻斷的冗餘鏈路,只有在活動鏈路斷開時纔會被激活。

STP生成樹協議

wKioL1aclc3BJ2BCAAIpE_d7lcg740.jpg

    STP(Spanning Tree Protocol,生成樹協議)是根據IEEE協會制定的802.1D標準建立的,用於在局域網中消除數據鏈路層物理環路的協議。運行該協議的設備通過彼此交互信息發現網絡中的環路,並有選擇的對某些端口進行阻塞,最終將環路網絡結構修剪成無環路的樹型網絡結構,從而防止報文在環路網絡中不斷增生和無限循環,避免設備由於重複接收相同的報文造成的報文處理能力下降的問題發生。

    STP包含了兩個含義,狹義的STP是指IEEE 802.1D中定義的STP協議,廣義的STP是指包括IEEE 802.1D定義的STP協議以及各種在它的基礎上經過改進的生成樹協議,如RSTP、MSTP。

    STP採用的協議報文時BPDU(Bridge Protocol Data Unit,橋協議數據單元),BPDU中包含了足夠的信息來完成生成樹的計算。

    BPDU在STP協議中分爲兩類:

  • 配置BPDU(Configuration BPDU):用來進行生成樹計算和維護生成樹拓撲的報文。

  • TCN BPDU(Topology Change Notification BPDU):當拓撲結構發生變化時,用來通知相關設備網絡拓撲結構發生的報文。


配置BPDU的生成和傳遞

wKioL1acmVbDm__DAAJpxvjwn4w966.jpg

    STP協議的配置BPDU報文攜帶了如下幾個重要信息:



    • 根橋ID(RootID)

      由根橋的優先級和MAC地址組成。通過比較BPDU重根橋ID,STP最終決定誰是根橋。

    • 根路徑開銷(RootPathCost)

      到根橋的路徑開銷。根端口選舉時,開銷最小的端口被選舉爲根端口:指定橋選舉時,開銷最小的橋北選舉爲指定橋。

    • 指定橋ID(DesignatedBridgeID)

      根端口選舉時,所連橋ID最小的端口被選舉爲根端口。指定橋選舉時,橋ID最小的橋被選舉爲指定橋。

指定端口ID(DesignatedPortID)

根端口選舉時,所連端口ID最小的端口被選舉爲根端口。

各臺設備的各個端口再初始時會生成以自己爲根橋的配置消息,根路徑開銷爲0,指定橋ID爲自身設備ID,指定端口爲本端口。各臺設備都向外發送自己的配置信息,同時也會收到其他設備發送的配置消息。通過比較這些配置消息,交換機進行生成樹計算,選舉根橋,決定端口角色。


網絡收斂後,根橋會按照一定的時間間隔產生並向外發送配置BPDU,其他的設備對該配置BPDU進行轉發,從而保證拓撲的穩定。


根橋的選舉

wKioL1acnDjjxYqvAAG3VPwa75E597.jpg

    樹形的網絡結構,必須要有樹根,於是STP引入了根橋(Root Bridge)的概念。

    網絡中每臺設備都有自己的橋ID,橋ID由優先級(BridgePriority)和橋MAC地址(BridgeMacAddress)兩部分組成。因爲橋MAC地址在網絡中是唯一的,所以能夠保證橋ID在網絡中也是唯一的。在進行橋ID比較時,先比較優先級,優先級值小者爲優;在優先級相等的情況下,再用MAC地址來進行比較,MAC地址小者爲優。

    網絡初始時,網絡中所有的STP設備都認爲自己是“根橋”。設備之間通過配置BPDU而比較橋ID,網絡中橋ID最小的設備被選爲根橋。根橋會按照一定的時間間隔產生並向外發送配置BPDU,其他的設備對該配置BPDU進行轉發,從而保證拓撲的穩定。

    在上圖中,因爲SWA的橋ID最小,所有SWA被選舉爲根橋。

端口角色的確定

wKioL1acniXxZyuiAAJLjd7_rdM643.jpg

    STP的作用是通過阻斷冗餘鏈路使一個有迴路的橋接網絡修剪成一個無迴路的樹型拓撲結構。它通過將環路上的某些端口置爲阻塞狀態,不允許數據幀通過而做到這一點。下面是確定哪些端口是阻塞狀態的過程:

  1. 根橋上的所有端口爲指定端口(Designated Port);

  2. 爲每個非根橋選擇根路徑開銷(RootPathCost)最小的那個端口作爲根端口(RootPort),該端口到根橋的路徑是此網橋到根橋的最佳路徑;

  3. 爲每個物理段選出根路徑開銷最小的那個網橋作爲指定橋(Designated Bridge),該指定橋到該物理段的端口作爲指定端口,負責所在物理段上的數據轉發;

  4. 既不是指定端口也不是根端口的端口置於阻塞狀態。

根路徑開銷

wKioL1anNpyRwITPAAHRfJhOkJY906.jpg

    根路徑開銷(RootPathCost)是生成樹協議中用來判斷到達根的距離的參數。它是到達根的路徑上所有鏈路開銷(Cost)的代數和。

    非根橋進行根端口選舉時,會首先比較各端口的根路徑開銷,開銷最小的端口被選舉爲根端口;物理段進行指定橋選舉時,也會首先比較各橋的根路徑開銷,開銷最小的橋北選舉爲指定橋。

    通常情況下,鏈路的開銷與物理帶寬成反比。帶寬越大,表明鏈路通過能力越強,則路徑開銷越小。

    IEEE802.1D和802.1t定義了不同速率和工作模式下的以太網鏈路(端口)開銷,H3C則根據實際的網絡運行狀況優化了開銷的數值定義,制定了私有標準。上述三種標準的常用定義如表所示。其他細節定義請參照相關標準文檔及設備手冊。

wKiom1anN-GjyUmxAAFF_1i9xyI798.jpg

    H3C交換機默認採用私有標準定義的鏈路開銷。交換機端口的鏈路開銷可手工設置,以影響生成樹的選路。

通過橋ID決定端口角色

wKiom1aoglvw6IUYAAGHhqu1cxU741.jpg

  在跟路徑開銷和指定橋ID都相同的情況下,生成樹協議根據端口ID來決定端口角色。

  如果非根橋上多個端口經過相同的上游到達根,且根路徑開銷相同,則協議會比較端口所連上游橋的端口ID,所連端口ID最小的端口被選舉爲根端口。

    端口ID由端口索引號和端口優先級兩部分組成。在進行比較時,先比較端口優先級,優先級小得端口優先;在優先級相同時,再比較端口索引號,索引號小得端口優先。

    上圖中,SWB上的2個端口連接到SWA,這2個端口的根路徑開銷相同,上游指定橋ID也相同,協議根據上游指定端口ID來判定,所連指定端口ID小得端口爲根端口。

    在通常情況下,端口索引號無法改變,用戶可通過設置端口優先級來影響生成樹的選路。

端口狀態

wKiom1aohAqQ3FGKAAFxGaDhICA677.jpg

    事實上,在802.1D的協議中,端口共有五種狀態:

  • Disabled:表示該端口處於失效狀態,不接收和發送任何報文,這種狀態可以是由於端口的物理狀態(比如端口物理層沒有up)導致的,也可能是管理者手工將端口關閉。

  • Blocking:處於這個狀態的端口不能夠參與轉發數據報文,但是可以接收配置消息,並交給CPU處理。不過不能發送配置消息,也不進行地址學習。

  • Listening:處於這個狀態的端口也不參與數據轉發,不進行地址學習;但是可以接收併發送配置消息。

  • Learing:處於這個狀態的端口也不參與數據轉發,但是開始地址學習,並可以接收、處理和發送配置消息。

  • Forwarding:一旦端口進入該狀態,就可以轉發任何數據了,同時也進行地址學習和配置消息的接收、處理和發送。

    以上五種狀態中,Listening和Learing是不穩定的中間狀態。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章