1 實驗內容
1、基于已有代碼,實現生成樹運行機制,對于給定拓撲(four_node_ring.py),計算輸出相應狀態下的生成樹拓撲
2、構造一個不少于7個節點,冗余鏈路不少于2條的拓撲,節點和端口的命名規則可參考four_node_ring.py,使用stp程序計算輸出生成樹拓撲
2 實驗原理
一、生成樹機制
通過禁止(block) 設備的相關端口,在有環路的網絡中構造出一個總體開銷最小的生成樹拓撲,使得網絡在連通的前提下,避免廣播風暴。
二、生成樹的唯一性
具有相同開銷的生成樹可能并不唯一,選擇優先級最高的生成樹作為唯一生成樹。
-
- 節點ID最小的點作為生成樹的根節點
- 每個節點選擇到樹的根節點優先級最高的路徑
- 優先級順序:路徑開銷 > 所連接的節點ID大小 > 所連接的端口ID大小 > …
-
-
- 路徑開銷路徑開銷等于路徑上全部鏈路開銷之和,鏈路開銷與鏈路帶寬相關,帶寬越高,開銷越小
-
三、生成樹機制的基本原理
經過有限次的收發Config消息,網絡中能夠“選舉”出唯一的根節點,即ID最小的節點;
除根節點外,每個節點選擇通過自己的根端口連接到根節點,使得到根節點的路徑開銷最小;
為了保證新的Config消息能夠擴散到其他節點,每個節點會通過指定端口發送Config消息;
生成樹機制收斂后,每個網段內所有端口存儲的配置都相同。
四、構建生成樹拓撲的流程
1、初始化階段:每個節點認為自己是根節點,并將自己的所有端口設定為指定端口,用于發送config消息
2、運行階段:
(1)根節點通過hello定時器(2秒)周期發送Config消息
(2)處理config消息:當端口收到config消息時,將本端口的config與收到的config進行優先級比較。
-
-
- 如果收到的config優先級高:
-
-
-
-
- 說明該網段應該通過對方端口連接根節點,因此本端口為非指定端口(斷開鏈路),本端口的config消息更新
- 節點狀態更新,從本節點中所有非指定端口中選舉根端口,通過比較端口間config消息的優先級,選舉config消息優先級最高的非指定端口為根端口
- 更新節點其他端口的config消息,并通過指定端口發送出去
-
-