STP生成樹協議筆記之(三):協議報文的抓包解析


STP生成樹協議筆記之(三) : 協議報文的抓包解析

  為了計算生成樹,交換機之間需要交換相關的信息和參數,這些信息和參數被封裝在BPDU(Bridge Protocol Data Unit)中。

 

BPDU的類型

  BPDU有兩種類型:配置BPDU和TCN BPDU

  配置BPDU描述本設備的配置信息,包含了橋ID、路徑開銷和端口ID等參數STP協議通過在交換機之間傳遞配置BPDU來選舉根交換機,以及確定每個交換機端口的角色和狀態。在初始化過程中,每個橋都主動發送配置BPDU。在網絡拓撲穩定以后,只有根橋主動發送配置BPDU,其他交換機在收到上游傳來的配置BPDU后,才會發送自己的配置BPDU。

  TCN BPDU是指下游交換機感知到拓撲發生變化時向上游發送的拓撲變化通知。

 

 

STP幀格式

字段內容

說明

Protocol Identifier

協議ID=“0”

Protocol Version Identifier

協議版本標識符,STP為0,RSTP為2,MSTP為3。

BPDU Type

BPDU類型,MSTP為0x02。

0x00:STP的Configuration BPDU

0x80:STP的TCN BPDU(Topology Change Notification BPDU)

0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)

Flags

對於“標記域”(Flags),第一個bit(左邊、高位bit)表示“TCA(拓撲改變響應)”,最后一個bit(右邊、低位bit)表示“TC(拓撲改變)”。

Root Identifier

根橋的橋ID。網橋ID都是8個字節——前兩個字節是網橋優先級,后6個字節是網橋MAC地址。

Root Path Cost

根路徑開銷,本端口累計到根橋的開銷。

Bridge Identifier

發送者的橋ID,本交換機的橋ID。

Port Identifier

發送端口的PID,發送該BPDU的端口ID。

Message Age

配置BPDU在網絡中傳播的生存期。

Max Age

配置BPDU在設備中能夠保存的最大生存期。

Hello Time

配置BPDU發送的周期(發送兩個相鄰BPDU間的時間間隔)。

Forward Delay

端口狀態遷移的延時(控制Listening和Learning狀態的持續時間)。

 

 

抓包分析BPDU數據包內容

 

  實驗的拓撲圖如上。一開始,所有的交換機都會認為自己是根橋,自己的所有端口都是指定端口,參與轉發配置BPDU報文。

  圖中紅框內的是一些STP協議比較重要的時間參數:

  Hello Time是指運行STP協議的設備發送配置BPDU的時間間隔,用於檢測鏈路是否存在故障。交換機每隔Hello Time時間會向周圍的交換機發送配置BPDU報文,以確認鏈路是否存在故障。當網絡拓撲穩定后,該值只有在根橋上修改才有效。默認的Hello Time的值是2秒。

  Message Age 如果配置BPDU是根橋發出的,則Message Age為0。否則,Message Age是從根橋發送到當前橋接收到BPDU的總時間,包括傳輸延時等。實際實現中,配置BPDU報文每經過一個交換機,Message Age增加1

  Max Age:是BPDU報文的老化時間,可在根橋上通過命令人為改動這個值。Max Age通過配置BPDU報文的傳遞,可以保證Max Age在整網中一致。非根橋設備收到配置BPDU報文后,會將報文中的Message Age和Max Age進行比較:如果Message Age小於等於Max Age,則該非根橋設備會繼續轉發配置BPDU報文。如果Message Age大於Max Age,則該配置BPDU報文將被老化掉。該非根橋設備將直接丟棄該配置BPDU,並認為是網絡直徑過大,導致了根橋連接失敗。默認的Max Age值是20秒。

    Forward Delay:當拓撲發生變化,新的配置消息要經過一定的時延才能傳播到整個網絡,這個時延稱為Forward Delay,一般指listening狀態到learning狀態,或是從leaning狀態到Forwarding狀態所需要的時間,協議默認Forward Delay值是15秒。

 

1)通過抓包點A(LSW4的G0/0/2端口)可知,此時LSW4默認認為自己是根橋,所以發送的BPDU中Root Identifier填寫的是自己的橋ID,Root Path Cost(根路徑開銷)填的是0,Message Age中填的也是0。接着將這個BPDU發送給LSW2。其余的交換機也會重復這個操作。

 

 

 

 

(2)LSW2接收到LSW4的BPDU報文,查看報文中的Root Identifier字段,發現該報文優先級被他本身要高,所以將自己的BPDU報文中的Root Identifier字段從自身改為LSW4的橋ID,Message Time加一,同時計算根路徑開銷(端口開銷默認為20000),再發給其他交換機。如圖為抓包點B(LSW2的G0/0/12)的報文截圖。

  

(3)等到所有的交換機都完成了選舉,進入穩定的狀態,則只會身為根橋的LSW4會每隔Hello Time時間發送配置一次配置BPDU,告知整個STP網絡根橋正常運行。

如果拓撲發生了變化(如根橋故障,鏈路故障等),STP又是如何感知到且作出改變的呢?

 

 

 

STP拓撲發生變化時的處理方式

  情況一:根橋故障

   

  在穩定的STP拓撲里,非根橋會定期收到來自根橋的BPDU報文。如果根橋發生了故障,停止發送BPDU報文,下游交換機就無法收到來自根橋的BPDU報文。如果下游交換機一直收不到BPDU報文,Max Age定時器就會超時(Max Age的默認值為20秒,約為10次Hello Time默認值的時間),從而導致已經收到的BPDU報文失效,此時,非根交換機會互相發送配置BPDU報文,重新選舉新的根橋。根橋故障會導致50秒左右的恢復時間,恢復時間約等於Max Age加上兩倍的Forward Delay收斂時間

  需要:Max Age + 2*Forward Delay = 50 秒

  驗證:根橋已經重新選舉為LSW1

   

 

 

 

  情況二:直連鏈路故障

   

  此例中,LSW1和LSW3使用了兩條鏈路互連,其中一條是主用鏈路,另外一條是備份鏈路。生成樹正常收斂之后,如果檢測到LSW1的根端口G0/0/15)鏈路發生物理故障,則其按照STP協議規則重新選舉根端口,則其Alternate端口G0/0/8)會遷移到Listening、 Learning、Forwarding狀態,經過2倍的Forward Delay后恢復到轉發狀態。

  需要: 2*Forward Delay = 30 秒

  驗證:LSW1的根端口已重新選舉為G0/0/8

   

 

 

 

  情況三:非直連鏈路故障

     

  如上圖,根橋交換機LSW4與LSW3之間的鏈路發生了某種故障(非物理層故障),LSW3因此Max Age時間內收不到來自LSW4的BPDU,則自己作為新的根橋開始發送BPDU。LSW2也會繼續從原根橋LSW4接收BPDU報文,因此會忽LSW3發送的BPDU報文。

  由於LSW2的預備端口(Alternate)端口再也不能收到包含原根橋ID的BPDU報文。其Max Age定時器超時后,LSW2會切換Alternate端口為指定端口並且轉發來自其根端口的BPDU報文給LSW3。LSW3在收到優先級比自己高的BPDU報文后,放棄宣稱自己是根橋並開始收斂端口為根端口。非直連鏈路故障后,由於需要等待Max Age加上兩倍的Forward Delay時間,端口需要大約50秒才能恢復到轉發狀態。

  需要:Max Age + 2*Forward Delay = 50 秒

 

  驗證:我們對LSW3的G0/0/10端口進行抓包分析

  時間節點一:根橋宣告為LSW4,BPDU是從LSW4發送過來的。根路徑為LSW4-LSW3,則根路徑開銷為20000。

   

  時間節點二:LSW3超時沒有收到根橋的配置BPDU,所以宣告自己為根橋。

  

 

  時間節點三:LSW3收到來自LSW2發來的配置BPDU,發現自己的橋ID優先級較低,重新選舉自己的根端口和指定端口。

   

 

 

 

  情況四:拓撲改變導致MAC地址表錯誤

   

  在交換網絡中,交換機依賴MAC地址表轉發數據幀。缺省情況下,MAC地址表項的老化時間是300秒。如果生成樹拓撲發生變化,交換機轉發數據的路徑也會隨着發生改變,此時MAC地址表中未及時老化掉的表項會導致數據轉發錯誤,因此在拓撲發生變化后需要及時更新MAC地址表項

  本例中,LSW6中的MAC地址表項定義了通過端口G0/0/3可以到達主機A,通過端口G0/0/2可以到達主機B。由於LSW7的根端口G0/0/2產生故障,導致生成樹拓撲重新收斂,在生成樹拓撲完成收斂之后,從主機A到主機B的幀仍然不能到達目的地。這是因為MAC地址表項老化時間是300秒,主機A發往主機B的幀到達LSW6后,LSW6會繼續通過根端口G 0/0/1轉發該數據幀。

 

  拓撲變化過程中,根橋通過下游交換機的TCN BPDU報文獲知生成樹拓撲里發生了故障。根橋生成TC用來通知其他交換機加速老化現有的MAC地址表項。

拓撲變更以及MAC地址表項更新的具體過程如下:

  1、LSW7感知到網絡拓撲發生變化后,會不間斷地向LSW6發送TCN BPDU報文。

  2、LSW6收到LSW7發來的TCN BPDU報文后,會把配置BPDU報文中的Flags的TCA位設置1,然后發送給LSW7,告知LSW7停止發送TCN BPDU報文。

  3、LSW6向根橋LSW5轉發TCN BPDU報文。

  4、LSW5把配置BPDU報文中的Flags的TC位設置為1后發送,通知下游設備把MAC地址表項的老化時間由默認的300秒修改為Forwarding Delay的時間(默認為15秒)。

  5、最多等待15秒之后,LSW6中的錯誤映射關系會被自動清除。此后,LSW6就能通過G0/0/2端口把從主機A到主機B的幀正確地進行轉發。

 

補充Tips

  關於BPDU的flags字段

  Flags字段占8bits(位)的空間,其中有效位只有高位(最左邊)和低位(最右邊)的1bit。

  TCN報文:Topology Change Notification報文,即拓撲改變通知報文,當設備A感知到STP拓撲發生了變化時,會向其他設備B發送TCN BPDU報文,代表:“我發現拓撲變化了,通知你一下”。

  低位的叫TC(Topology Change),即“拓撲改變”位,常用於根橋通知下游交換機拓撲發生了改變。代表:“我們STP的拓撲改變了,請下游交換機刷新一下MAC地址表”

  高位的叫TCA(Topology Change Acknowledge),即“拓撲改變響應”位,當設備B收到設備A發送過來的TCN BPDU報文,B知道拓撲發生了變化。然后B會:將此報文轉發給根橋,然后生成一個TCA置為1的BPDU報文,回復給設備A,代表“我已確認收到你發的通知報文,你可以停止發了”。

 

  利用實驗來驗證:如圖所示抓包點為LSW7的指定端口G0/0/1口

   

  Step 1:拓撲趨於穩定,此時LSW7會通過指定端口G0/0/1轉發根橋的配置BPDU

            BPDU flags: 0x00 =》 配置 BPDU

    

 

  Step 2:此時,人工將LSW5和LSW7之間的鏈路刪除,形成拓撲改變的現象。

            LSW7感知到拓撲的變化,則發送TCN BPDU報文通知對端交換機LSW6。

            BPDU flags:0x80 =》 TCN BPDU報文

    

  Step 3 :  LSW6收到TCN BPDU報文后,會回復一個響應報文(TCA=1)給LSW7,提示其已經收到了。

   

 

 

  Step 4LSW6繼續向根橋轉發TCN BPDU報文,根橋收到后,向下游交換機發送將TC=1的報文,提示他們將MAC地址表的老化時間改為15秒,起到加速收斂的作用。

   

 

 

  Step 5:拓撲收斂后,網絡重新穩定。

 

  最后的STP簡單配置會在下一節給出。

 

 

 

STP協議筆記匯總:

 

STP生成樹協議筆記之(一) : 背景和原理

 

https://www.cnblogs.com/zylSec/p/14615481.html

 

STP生成樹協議筆記之(二) : 端口角色選舉STP

 

https://www.cnblogs.com/zylSec/p/14618328.html

 

STP生成樹協議筆記之(三) : 協議報文的抓包解析

 

https://www.cnblogs.com/zylSec/p/14627690.html

 

STP生成樹協議筆記之(四) : 協議基礎配置

 

https://www.cnblogs.com/zylSec/p/14628274.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM