前文我們瞭解了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標準;多條相同速率的鏈路聚合會增大鏈路速率降低鏈路開銷;