現在我們的生活已經離不開網絡,如果我家斷網,我會抱怨這什麼破網絡,影響我刷抖音、打遊戲;如果公司斷網,那老闆估計會罵娘,因為會影響到公司正常運轉,直接造成經濟損失。網絡通信中,通常是以一條鍊路能夠正常工作為前提,如果鍊路斷開或節點故障,那麼互聯的設備就無法正常通信了,這類網絡問題叫做單點故障。沒有備份的鍊路或節點,出現故障會直接斷網。
如果要提供 7×24 小時不間斷的服務,那就需要在網絡中提前部署冗餘。避免出現單點故障,合理的做法是在網絡中的關鍵設備和關鍵鍊路添加冗餘。在冗餘的網絡環境中,任意一條鍊路發生故障斷開,都不會影響網絡,直接使用其它鍊路繼續轉發數據,解決單點故障的隐患。
但同時也帶來了另外的網絡問題。這種組網會構成二層環路,會引發廣播風暴、重複幀、MAC 地址漂移等問題,嚴重時會占滿鍊路帶寬,或打爆設備 CPU ,導緻設備無法正常工作,最終造成網絡癱瘓。當然,在實際的網絡中,不少二層環路是由于人為的錯誤操作導緻的,比如接錯了網線。
舉個栗子:
大劉的主機想要與小美的主機進行通信,現在隻知道小美主機的 IP 地址,不知道 MAC 地址。有 IP 地址,就可以通過 ARP 協議來獲取小美主機的 MAC 地址。我們來看看有冗餘的網絡中數據交換的過程:
通過這個簡單的演示,我們看到了冗餘鍊路帶來的風險。重複幀、MAC 地址漂移和廣播風暴,都是由一個廣播幀引起的,可是網絡中不可避免出現廣播幀,也不能因為二層環路問題而忽略冗餘鍊路增加網絡可靠性的好處。
那麼如何在保證網絡冗餘的情況下,消除二層環路呢?實際上交換機的二層環路是一個典型問題,解決方案也有不少。其中的一個解決方案就是 STP(生成樹協議),能夠阻斷冗餘鍊路來消除可能存在的環路,并且在網絡故障時激活被阻斷的冗餘備份鍊路,恢複網絡的連通性,保障業務的不間斷服務。
當網絡中部署了 STP 後,交換機之間會交互相關協議報文,并計算出一個無環路的網絡拓撲。當網絡存在環路時,STP 會将網絡中的一個或多個接口進行阻塞,将環路網絡結構修剪成無環路的樹狀網絡結構。被阻塞的接口不再轉發數據,這樣二層環路問題便迎刃而解。STP 會持續監控網絡拓撲狀況,當網絡拓撲發生變化時,STP 能夠及時感知,并動态調整被阻塞接口,而無需人工幹預。
STP 是用在局域網中消除數據鍊路層物理環路的協議,标準名稱是 802.1D 。STP 帶來的好處有:
在了解 STP 的原理之前,我們先來看看幾個專業術語:
1、橋 ID( Bridge ID ,BID )在公司内我們使用資産編号标記不同的設備,在 STP 裡我們使用不同的橋 ID 标識不同的交換機。每一台運行 STP 的交換機都有一個唯一的橋 ID 。橋 ID 一共 8 字節,包含 2 字節的橋優先級和 6 字節的橋 MAC 地址。橋優先級的值可以人為設定,默認值是 32768 。橋 MAC 地址通常是交換機默認 VLAN1 的 MAC 地址。
STP 要在整個二層網絡中計算出一棵無環的 “ 樹 ” ,樹形成了,網絡中的無環拓撲也就形成了。其中最重要的就是樹根,樹根明确了,“ 樹枝 ” 才能沿着網絡拓撲進行延伸。STP 的根橋就是這棵樹的樹根。當 STP 啟動後,第一件事就是在網絡中選舉出根橋。在一個二層網絡中,根橋隻有一個,其餘設備都是非根橋。當網絡的拓撲發生變化時,根橋也可能會發生變化。
網絡中橋 ID 最小的交換機将成為根橋。在比較橋 ID 大小時,首先比較的是橋優先級,橋優先級的值最小的交換機選為根橋;如果橋優先級相同,那麼會比較 MAC 地址,MAC 地址最小的交換機選為根橋。
3、根路徑開銷( Root Path Cost ,RPC )STP 交換機每一個端口都對應一個開銷值,這個值表示數據通過端口發送時的開銷,這個值與端口帶寬有關,帶寬越高,開銷值越小。對于端口開銷值的定義有不同的标準,通常設備默認使用 IEEE 802.1t 中定義的開銷值,同時還支持其它标準,以便兼容不同廠家的設備。
非根橋到達根橋可能有多條路徑,每條路徑都有一個總開銷值,也就是根路徑開銷( RPC ),這個值是通過這條路徑所有出端口的開銷值累加而來的。STP 不會計算入端口的開銷,隻在數據通過端口發出時,才計算這個端口的開銷。對于根橋來說,根路徑開銷是 0 。
運行 STP 的交換機使用端口 ID 标識每個端口,端口 ID 主要用于選舉指定端口。端口 ID 長度為 16 比特,其中前 4 比特是端口優先級,後 12 比特是端口編号。在進行比較時,先比較端口優先級,優先級小的端口優先;在優先級相同時,再比較端口編号,編号小的端口優先。通常情況下,端口編号無法改變,可通過設置端口優先級來影響生成樹的選路。
STP 協議使用 BPDU 報文進行交互,BPDU 包含與 STP 協議相關的所有信息,并且使用這些信息來完成生成樹的計算。BPDU 是組播幀,地址為 0180-c200-0000 ,并由 STP 交換機産生、發送、接收、處理,終端主機不參與。BPDU 分為兩種類型:
配置 BPDU 的參數詳情如下:
STP 的基本原理是在一個有二層環路的網絡中,交換機通過運行 STP ,自動生成一個沒有環路的網絡拓撲。這個無環網絡拓撲也叫做 STP 樹( STP Tree ),樹節點為某些交換機,樹枝為某些鍊路。當網絡拓撲發生變化時,STP 樹也會自動地發生相應的改變。
STP 樹的生成過程是:首先選舉根橋,然後确定根端口和指定端口,最後阻塞備用端口。既然是選舉,我們就看下參選者和選舉範圍。
STP 是通過比較 BPDU 中的信息進行選舉的,最終的結果是:
根橋是 STP 樹的根節點。要生成一棵 STP 樹,首先要确定一個根橋。根橋是整個二層網絡的邏輯中心,但不一定是物理中心。
在 STP 交換機剛連接到網絡時,每台交換機都以自己為根橋,從所有啟動的端口發送 BPDU ,宣告自己是根橋。收到 BPDU 的交換機會比較 BPDU 中的根橋 ID 與自己的根橋 ID ,選擇根橋 ID 值小的配置成自己 BPDU 中的根橋 ID 。交換機不停地交互 BPDU ,同時對根橋 ID 進行比較,直至選出一台根橋 ID 最小的交換機作為根橋。根橋會在固定的時間間隔發送 BPDU ,其它設備對 BPDU 進行轉發,從而保證網絡拓撲的穩定。
根橋交換機往往會承擔這個網絡中最大流量的轉發工作,我們希望性能最高的交換機當選根橋交換機。但是 STP 在選舉時,并不會把交換機的性能列入考量。為了讓網絡流量更合理的轉發,可以通過配置橋優先級的值來影響根橋的選舉。
同時,根橋是可以搶占的,在 STP 完成網絡收斂後,如果網絡中接入一台新的交換機,且新增交換機的優先級比根橋交換機更優,那麼新增交換機會成為網絡中新的根橋。同時,STP 将會重新收斂、重新計算網絡拓撲,這個過程會引發網絡震蕩,對流量的正常轉發造成影響。
2、選舉根端口( Root Port ,RP )根橋選舉出來後,其它沒有成為根橋的交換機稱為非根橋。STP 會為每個非根橋選舉一個根接口,也就是在交換機的所有端口中,選擇距離根橋最近的一個端口,這就是根端口。
在 STP 樹形成後的穩定期,根橋依然會周期性的向網絡中發送 BPDU ,而非根橋的根端口會收到 BPDU ,并向指定端口發送出去。
那是如何選擇根端口的呢?根橋周期性的發送 BPDU ,非根橋的所有端口都能收到 BPDU ,對比端口收到的 BPDU 中的參數值。
準确的說,選舉根端口的目的是選舉出 STP 網絡中每台交換機上與根交換機通信效率最高的端口。
3、選舉指定端口( Designated Port ,DP )根端口确保了交換機到根橋的路徑是唯一的,也是最優的。網絡中的每條鍊路與根橋之間的路徑也要是唯一且最優的。當一條鍊路中有兩條或兩條以上的路徑到達根橋,就必須确定出一個唯一的指定端口,防止出現二層環路。指定端口不但是這條鍊路内所有端口中到達根橋的最優接口,還會向鍊路内發送 BPDU 。
雖然選舉指定端口的範圍和根端口不同,但是選舉的原則是一緻的。指定端口的選舉同樣會按照以下過程進行:
如果有人不小心将同一台交換機上的兩個端口用網線連接起來,網絡中就會産生環路。選舉指定端口就是為了預防這種錯誤連接導緻環路的情況。當出現這種連接時,STP 會以端口 ID 較小的端口作為指定端口,從而打破環路。
為什麼根橋交換機的所有端口都是指定端口呢?
因為根橋交換機端口的根路徑開銷都是 0 ,根據選擇選舉原則,成為這條鍊路的指定端口。
4、阻塞備用端口( Alternate Port ,AP )在确定了根端口和指定端口後,交換機上剩下的非根端口和非指定端口都叫做備用端口。備用端口是打破環路的關鍵,STP 會對這些備用端口進行邏輯阻塞。邏輯阻塞,是指端口不會接收或發送任何數據,但是會監聽 BPDU 。當網絡的一些端口出現故障時,STP 會讓備用端口開始轉發數據,用來恢複網絡的正常通信。
三種端口的異同如下:
一旦備用端口被邏輯阻塞後,STP 樹的生成過程就完成了。
STP 端口狀态機STP 不但定義了 3 種端口角色:根端口、指定端口、備用端口,還講定義了 5 種端口狀态:禁用狀态、阻塞狀态、偵聽狀态、學習狀态、轉發狀态。
STP 交換機的端口啟動時,首先會從禁用狀态自動進入到阻塞狀态。在阻塞狀态,端口隻能接收和分析 BPDU ,不能發送 BPDU 。如果端口選為根端口或指定端口,則會進入偵聽狀态,這時端口可以接收并發送 BPDU ,這種狀态會持續一個 Forward Delay 的時間,默認是 15 秒。15 秒後端口會進入到學習狀态,并持續一個 Forward Delay 的時間。學習狀态的端口可以接收和發送 BPDU ,同時開始進行 MAC 地址學習,為數據轉發做好準備。最後,端口由學習狀态進入到轉發狀态,就開始進行數據轉發。在整個狀态的遷移過程中,端口一旦關閉或發生鍊路故障,就會進入到禁用狀态;如果端口不再是根端口或指定端口,那麼端口狀态會立刻退回到阻塞狀态。
在 STP 的生成過程中,為什麼要有兩個 Forward Delay 時間?
在偵聽狀态有一個 Forward Delay 的時間,是因為 BPDU 泛洪到全網需要一定的時間,STP 完成全網拓撲的計算同樣需要時間,所以停留 15 秒讓 STP 有充分的時間計算全網拓撲,避免網絡中出現臨時的環路。在學習狀态又有一個 Forward Delay 的時間,是由于交換機的接口上未學習到任何 MAC 地址,需要時間學習 MAC 地址,避免網絡中出現不必要的數據幀泛洪現象。停留 15 秒,為進入轉發狀态做好準備。
STP 時間參數STP 定義了 3 個重要的時間參數。
由于時間參數的設計,一個 STP 接口從阻塞狀态進入到轉發狀态,可能需要 30 ~ 50 秒的時間,這段時間内,網絡無法正常使用。
舉例說明
在實際應用中,STP 有很多不足之處,RSTP/MSTP 對 STP 進行了哪些改良?有哪些其它技術用來代替生成樹技術?欲知具體細節,且看下篇文章。
實戰演練STP 基礎配置我們用 3 台交換機搭建一個網絡環境,而且網絡中存在二層環路。為了對網絡進行破環,将在交換機上部署 STP 。
網絡拓撲
查看三台 STP 交換機的端口狀态,是否符合預期結果。
還可以抓包驗證 STP 交互的 BPDU 報文内容是否正常。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!