HCNA Routing&Switching之STP基礎

  前文我們了解了VLAN動態註冊協議GVRP相關話題,回顧請參考//www.cnblogs.com/qiuhom-1874/p/15113770.html;今天我們來討論下二層環路和STP相關話題;

  我們知道網路設備之間產生環路是很正常的,但為了通訊品質,通常我們也要避免環路;對於三層網路,產生環路並不是很嚴重,因為我們有動態的路由協議可以防止環路,當然即便管理員手動配置靜態路由形成環路,但最終數據包會停下來(因為三層ip協議有TTL欄位可以讓數據包最終停下來);對於二層網路來說,一旦產生環路,那將是致命的(其原因是二層環路一旦產生,數據包在環路里停不下來),嚴重的話可以瞬間將整個二層網路的鏈路頻寬跑滿,從而導致整個網路不可用;所以二層環路我們無論如何都要避免;為了提高網路可靠性,通常情況交換網路中會使用冗餘鏈路,然而冗餘鏈路最最直接的後果就是給交換網路帶來環路的風險,並導致廣播風暴以及MAC地址表不穩定等問題,進而影響到用戶的通訊品質。為了解決二層環路所帶來的風險,stp協議誕生了;stp主要作用就是通過阻斷冗餘鏈路來消除網路中可能存在的環路,同時當活動鏈路發生故障時,激活冗餘鏈路及時恢復網路連通性,從而實現網路的可靠性;

  二層網路設計需求和問題

  提示:上圖是一個小型網路的拓撲圖,通常為了網路的可靠性,匯聚層,核心層都會放置兩個及兩個以上的交換機,並且兩兩相倆(主要作用就是做高可用檢測對方是否存活);接入層上聯匯聚層會有至少兩條鏈路,這樣一來接入層的交換機就和匯聚層的交換機可能形成環路;比如上圖紅色和藍色鏈路就是環路;

  二層環路問題—>廣播風暴

  實驗:如下拓撲圖,我們用pc發送一個arp廣播,看看在二層環路里會發生什麼?

  提示:默認情況華為的交換機是開啟了STP,為了演示出效果,我們需要先把各個交換機的STP關掉;

  關掉各交換機的STP

  命令:stp disable

  提示:S2,S3,都是一樣的操作;

  用pc ping同網段任意地址然後抓arp的包,看看會發生什麼?

  提示:可以看到我們用pc發了5個icmp包,而我們在鏈路上瞬間抓到了幾千個arp包;這就是因為二層有環路產生,導致arp廣播一直在環路里打圈停不下來;要想讓裡面的數據包停下來,要麼在開啟任意一台設備的STP,或者斷掉任意一條鏈路,破壞環路;

  在S2上開啟STP

  提示:可以看到當我們在S2上開啟STP以後,對應數據包就停了下來;這裡需要注意這裡開啟STP是阻斷了ARP廣播數據一直在環路打轉,是因為初始化STP時會將對應埠阻塞掉;但是並不意味著環路就此被破壞了;一旦當STP穩定以後,還有數據包進來,數據包還會在環路里打轉;

  驗證:現在用pc再次發送arp廣播,看看抓包是否還會抓到很多?

  提示:可以看到現在pc發送一個arp廣播,在鏈路上還是會抓到很多arp廣播包,這說明開啟S2單台設備的STP並不能破壞環路;

  開啟S1的STP,看看對應環路是否能被破壞呢?

  現在再次用pc發送arp廣播,看看對應是否還會抓到很多arp包呢?

  提示:可以看到現在用pc發送arp廣播,在鏈路上還是會有很多arp包,說明環路還是存在,並沒有被破壞;

  開啟S3的STP,看看環路是否被破壞?

  用pc發送arp廣播,看看是否還會抓到很多arp廣播包呢?

  提示:可以看到當s3開啟STP以後,再次使用pc發送arp廣播,對應抓包就沒有像之前那樣幾百個arp包,說明環路被破壞了;從上述的實驗可以看到,一旦二層網路里發生環路,數據包是停不了的;我們只有認為手動破除環路,或者通過開啟STP破除環路;通常情況下所有設備都開啟STP才能真正有效的破環環路,所以二層網路里如果有不支援STP的交換機,我們在接線時一點要注意不要產生環路;

  二層環路問題—>MAC地址表震蕩

  還是上述實驗拓撲,我們把三個交換機的STP都關掉,然後用pc發送arp廣播,然後查看S1或S2或S3的mac地址表,看看對應mac地址表會有什麼變化?

  用PC發送arp廣播

  查看S1的mac地址表

  提示:可以看到同一個MAC在S1上一會在1口學習到,一會在2口學習到;這是因為pc發送的arp廣播會從1口和2口泛洪出去,在S2和S3收到arp廣播以後,又會從對應的其他介面泛洪出去,這樣一來,從s1的1口泛洪出去的arp廣播,最終會從s1的2口收到;2口泛洪出去的arp廣播又會從1口收到,所以對於s1來說pc的mac就會一會從1口學習到,一會又從2口學習到;這樣一來s1的mac地址表就很不穩定;對於s2和s3也是同樣的現象;通過上述的實驗,我們可以看到二層環路一旦產生,就會有廣播風暴和mac地址震蕩;

  STP:Spanning Tree Protocol,生成樹協議;主要通過構造「一棵樹」來消除交換網路中的環路;同時當活動鏈路發生故障,激活備份鏈路,從而實現網路的可靠性;

  BPDU:Bridge Protocol Data Unit -橋協議數據單元,STP工作協議;

  提示:STP通過各交換機發送的BPDU來完成根橋,根埠,指定埠和阻塞埠的選舉,從而實現破除環路;

  BPDU數據包結構及各欄位解釋

  提示:STP有三個模式,默認華為交換機使用的是mstp;我們可以通過stp mode stp更改stp模式為原生stp模式;對於STP來說,其bpdu結構如上;相信很多欄位都能看懂;這裡說一下bpdu的類型這個欄位(BPDU Type)和BPDU flag欄位;

  在STP的BPDU中,BPDU的類型主要有兩種,一種是configuration,一種是TCN(Topology Change Notification);configuration類型的BPDU主要用來選舉根交換機以及確定每個交換機埠的角色和狀態,在初始化STP過程中,每個交換機都會主動發送這種類型的BPDU;當網路拓撲穩定以後,只有根橋會主動發送這種類型的的BPDU,其他交換機在收到上游傳來的配置BPDU後,才會發送自己的配置BPDU。發送周期為Hello Time,默認是2秒發送一次;老化時間為Max Age,默認是20秒;TCN類型的BPDU,主要作用是當網路拓撲發生變化時,下游交換機向上游交換機發送拓撲變化通知;默認情況,在configuration類型的BPDU包里,BPDU flag欄位中,TCA和TC都是0,只有TCN以後,對應標誌為才會置為1;

  提示:BID主要用來表示二層網路中的交換機,主要由兩部分組成,優先順序和mac地址;優先順序取值範圍為0-65535,步長4096,數字越低越優先;默認優先順序為32768;

  提示:PID主要用來標識埠的,也是由優先順序和對應埠的編號組成(這個編號和埠名稱沒有直接的關係,默認都是一個順序編號),優先順序取值範圍為0-255,步長為16,數字越小越優先,默認值為128;

  提示:路徑開銷用來描述鏈路優劣,數字越小表示鏈路開銷越低,即鏈路就越優;這個路徑開銷和鏈路頻寬有直接的關係;上述是98年標準和更早的標準;不同的鏈路對應開銷各不相同;

  提示:根路徑開銷是指到達根橋的最短路徑的開銷;數字越小,表示鏈路越優;rpc的計算方式是沿途各鏈路pc總和;上圖中假設sw1為根橋,那麼sw2到達根橋的開銷就需要看對應鏈路是多大頻寬了,如果是100M根據98年標準,則開銷為19;那麼sw3到達sw1的開銷就為sw2到達sw1的路徑開銷+sw3到達sw3的路徑開銷;sw3到達sw2的鏈路頻寬為10M,所以對應的開銷為19,所以sw3到達sw1的開銷就為19+100=119;

  附圖:各速率鏈路開銷標準

  提示:華為默認使用802.1t標準;