前文我們了解了STP選舉規則相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15131999.html;今天我們來聊一聊STP的埠狀態、計時器、埠狀態轉換以及拓撲變化相關話題;
STP埠狀態

提示:STP的埠有5個狀態,分別是disabled、blocking、listening、learning、forwarding;默認情況下,一個物理的交換機上的同VLAN下的所有埠都參與STP;其中Disabled是指未接線的埠;我們可以理解未激活的埠,它不接收和轉發BPDU,也不學習mac地址和轉發資料,是一種穩定的狀態;Blocking狀態是指埠激活了,通過STP選舉以后未被選舉成為根埠或指定埠的埠狀態;該狀態下的埠只接收BPDU,不轉發BPDU,同時也不學習mac和轉發資料,是一種穩定的狀態;listening狀態是disabled或blocking狀態的埠向forwarding狀態轉換的一個過渡狀態;該狀態的埠只接收和轉發BPDU,并不學習mac和轉發資料,是一種非穩定狀態;learning是從listening狀態的埠向forward狀態過渡的狀態;該狀態埠會接收和轉發BPDU,同時也會學習mac,但不轉發資料,是一種非穩定狀態;Forwarding是STP穩定以后,除開預備埠和未激活的埠的狀態;該狀態下的埠可以正常接收和轉發BPDU,同時也可以正常學習mac和轉發資料,是穩定狀態;
實驗:如下實驗拓撲,更改交換機stp模式為stp,然后看看交換機的各埠狀態變化

驗證:在s1上查看各埠狀態

提示:在華為的交換機上我們是看不到blocking和listening這兩種狀態,其原因是華為交換機顯示是以rstp和mstp為主,對于stp來說disabled、blocking、listening這三種狀態被打包為discarding狀態;

STP計時器
從上面的拓撲中,我們任意鏈路上抓一個STP包

提示:hello time欄位用來表示根橋多久發送一次BPDU,默認情況是2秒一次;forward delay用來表示從learning狀態到forwarding狀態的延遲時長,默認15秒;max age表示預備埠最長多久沒收到BPDU包的存活時長,默認20秒;

提示:預備埠從阻塞狀態到轉發狀態,首先預備埠要等待max age超時以后,才會進入到listening,從listening到learning中間會間隔15秒;從learning到forwarding中間會間隔15秒,所以一個預備埠從阻塞狀態轉變為轉發狀態,最長時間需要50秒;
message age:該欄位用于表示BPDU訊息年齡,默認從根橋發送出來的BPDU為0,當BPDU沒經過一個交換機,maessage age會加1,當交換機收到的BPDU中message age大于max age時,該交換機會丟棄該BPDU;
驗證:在根橋上轉包,看看message age是否為0?

提示:可以看到,從上述的實驗拓撲中,s1(根橋)上抓包抓到的BPDU中message age為0;
驗證:如下拓撲,在非根橋(s6)抓包,看看對應message age是多少呢?

分析:從s1發送的BPDU中message age 為0,當BPUD從S1的eth0/0/2口發送出來,經過S3從eth0/0/3轉發出去,對應的message age會加1,所以從s3轉發出去的BPUD,message age為1;同樣的道理當s3的eth0/0/3轉發出來的BPDU,在s4接收以后再從s4口的eth0/0/2轉發出去,對應的message age也會再加1,所以從s4轉發出去的BPDU中message age就為2,依次類推到達s6的BPDU中message age 的值就應該為3;
驗證:在s6上轉包,看看對應的BPDU中message age是否是3呢?

提示:其實這個message age我們可以理解為從根出發,中間經歷多少個交換機;從上面的實驗可以看到一般二層鏈路上的交換機不宜串聯太多,超過20個會導致stp無法正常作業;
STP埠狀態轉換

提示:當埠初始化或從開啟時,對應埠的狀態會從disabled狀態轉換為blocking狀態;如果埠被選舉成為根埠或指定埠時,對應狀態會從blocking開始轉換--->listening,經過15秒---->learning,經過15秒----->forwarding;如果埠不再是根埠或指定埠,對應埠會從當前狀態立刻轉變為blocking狀態;如果forward delay計時器超時,對應埠會從當前狀態轉換為下一個狀態,比如從listening轉換為learning;從learning轉換為forwarding狀態;如果埠被禁用或鏈路失效,則對應埠會從當前埠狀態立刻變為disabled狀態;
驗證交換機埠狀態

提示:默認情況下,只會顯示兩種穩定狀態,第一種是forwarding狀態,一種是預備埠的阻塞狀態;disabled這種穩定狀態需要手動去看對應埠才會顯示;
查看disabled狀態的埠

提示:只要顯示鎖disabled port,說明該埠為激活,或者我們可以理解為參與stp,但狀態為disabled狀態;
STP拓撲變化
1、根橋故障

提示:根橋故障會導致直連根橋的交換機對應的鏈路掛掉,此時對于非根橋就會收不到根橋的BPDU,理論上來講,非根交換機對應的埠收不到BPDU,最大等待20秒(默認max age為20秒),然后就會觸發對應埠發送自己的BPDU,進行根橋的選舉;根橋選舉各交換機上的埠都會轉變為discarding狀態,然后持續15秒從discarding狀態轉變為learning狀態,這個狀態也會持續15秒;然后從learning狀態轉變為forwarding狀態;這個狀態對于stp來說是一個穩定狀態,對應埠才可以正常轉發資料包;通過上述的描述,如果根橋故障最長需要50秒對應二層網路才能恢復;
2、直連鏈路故障

提示:直連故障是相對于有預備埠的交換機來說的;對應的交換機是能夠感知到故障的發生,此時對應的埠會從forwarding狀態轉換為discarding狀態;然后持續15秒,再從discarding狀態轉變為learning狀態;此狀態也會持續15秒,最后從lerarning狀態轉變為forwarding狀態,開始轉發資料;這也就告訴我們直連故障最短也需要等待30秒對應網路才能正常使用;
3、非直連鏈路故障

提示:非直連鏈路故障也是相對于有預備埠的交換機來說的,這種故障對于有預備埠的交換機是感知不到的,所以理論上來講,預備埠需要等待20秒的時間,然后才從blocking轉變為discarding狀態,然后持續15秒,再轉換為learnging,然后再持續15秒,再從learning狀態轉變為forwarding狀態;也就是說非直連鏈路故障最長也需要等待50秒;
從上述的描述不難想象,不管是根橋故障還是直連鏈路或非直連鏈路故障,對于stp來說只要有故障,最短需要等待30秒,對應網路才能正常使用;
拓撲變化導致mac地址表錯誤

如上圖所示,主機A和主機B通訊,在鏈路都正常的情況下主機A和主機B通訊,對于交換機B來說,它學習到的mac地址表示aa在3口,bb在一口;如果此時交換機c的g0/0/1口壞了;那么對于主機A和主機B的通訊最長也需要等待50秒,最短需要等待30秒對應stp鏈路才會正常被切換成功;此時我們想一個問題,但stp鏈路切換成功以后,對于交換機B來說,它的mac地址表并沒有老化(默認老化時間是300秒),當它收到aa向bb通信的資料包,此時他還是會將資料包從1口轉發出去;這也就造成了,stp鏈路切換成共,但對應交換機mac地址表并沒有更新,導致mac地址表錯誤的指向;這會直接影響主機A和主機B通訊;為了解決這個問題,stp里加入了另一種型別BPDU,TCN;

提示:TCN是(topology change notification)拓撲變化通知;下游交換機一旦檢測到拓撲變化,向上游發送的拓撲變化通知,上游交換機收到TCN后回應TCA(topology change acknowledgment)進行確認,然后下游交換機停止發送TCN;上游交換機通過根埠發送TCN直到根橋收到,根橋通過指定埠發送TC通知所有下游交換機把MAC地址表記錄老化時間從300秒變為15秒;以便讓交換機的mac地址表更快的老化,實作對應stp鏈路切換,對應mac地址表也隨之更新;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293694.html
標籤:其他
