HCNA Routing&Switching之STP埠狀態、計時器以及拓撲變化

1874發表於2021-08-14

  前文我們瞭解了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地址表也隨之更新;

相關文章