前文我們了解了VLAN動態注冊協議GVRP相關話題,回顧請參考https://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到達sw2的路徑開銷;sw3到達sw2的鏈路帶寬為10M,所以對應的開銷為100,所以sw3到達sw1的開銷就為19+100=119;
附圖:各速率鏈路開銷標准
提示:華為默認使用802.1t標准;多條相同速率的鏈路聚合會增大鏈路速率降低鏈路開銷;