理解BPDU Filtering的意義(BPDU Filtering在全局配置與接口配置上的區別)
本文截自於博主CCNP交換技術稿件內容
BPDU Filtering也叫BPDU過濾,它的意義是在某個端口上過濾BPDU的發送和接收,在這裏需先要來理解一個前提:任何一個加入到生成樹的交換機端口,都會發送並接收到相應的BPDU報文,其中包括被規劃爲portfast的端口,它也會連續的(2秒間隔)向交換網絡中發送BPDU報文。但是在Portfast端口上發送BPDU有必要嗎?沒有,爲什麼呢?因爲portfast連接都是主機,主機是不可能與交換機形成環路的,所以portfast是沒必要向主機去發送BPDU報文。反過來講portfast端口也沒必要接收BPDU報文,爲什麼呢?桌面主機發送BPDU報文是沒有意義的,但是BPDU Filtering對portfast端口收到BPDU報文時的處理方式就沒有BPDU Guard那麼極端,BPDUGurad是直接關閉端口。而BPDU filtering將由於不同位置的配置,產生不同的處理行爲,BPDU Filtering的配置也分爲全局配置和在接口上的配置,不同位置的配置將產生不同的效果。
BPDU Filtering在全局配置
在全局模式下使用spanning-tree portfast bpdufilter default指令來啓動BPDU Filtering,通過指令可以看出,BPDU Filtering在全局模式下是需要依賴於portfast端口爲基礎來實現的,這一點和BPDU Gruad在全局模式下的配置前提是相同的。但如果用戶在全局模式下啓動的是BPDU Filtering,在這個時候portfast端口就不會發送BPDU報文了。如果此時當portfast端口收到BPDU報文時該端口會立即回退到常規的生成樹端口,並參與生成樹的選舉及計算過程。關於這一點請參看演示:BPDU Filtering在全局與接口上的配置。
BPDU Filtering在接口上的配置:
用戶可以在接口模式下使用spanning-tree bpdufilter enable指令來啓動BPDUFiltering,注意在接口模式下啓動BPDU Filtering功能時可以不依賴於portfast端口,然後在該接口上將不再發送和接收BPDU。這裏的這個“該接口上將不再發送和接收BPDU”說明,就一般而言,不發送BPDU,一般都比較好理解,而這裏所謂的不接收BPDU(not receive BPDUs),不如說成是忽略(ignore),又或者表達爲不處理接收到的BPDU,將更爲精確的表達接口級BPDU Filtering的功能,爲什麼這樣講?
如圖所示,交換機S1的E1/0接口,可能正收到交換機S3的E1/0接口所發送的BPDU報文,該報文也能成功的到達S1的E1/0接口,爲什麼能到達?因爲交換機S3發送BPDU報文時目標的MAC地址是一個衆所周知的組播MAC(0180.c200.0000),就是衆所周知的組播MAC表示所有開啓STP功能的設備都能接收到相關的BPDU報文,因爲該目標MAC也叫生成樹的多播MAC。只是說當S3發來的BPDU報文到達S1的E1/0接口時,S1由於在接口上啓動了BPDU的filtering功能,它(S1)將忽略S3發來的BPDU。或者叫接收而不處理。關於這一點請參看演示:BPDU Filtering在全局與接口上的配置。
注意:在接口上配置BPDU Filtering與在全局配置BPDU Filtering的意義是有很大區別的,在全局配置的BPDU Filtering首先要依賴於portfast端口,當收到BPDU時,全局的BPDU Filtering是採取回退爲正常生成樹端口的處理方式;而接口上的BPDU不需要依賴於portfast端口,並忽略(ignore)收到的BPDU報文,此時相當於在具體的某個接口上禁用了生成樹功能,如果管理員沒有對二層網絡進行合理的設計,可能就會存在潛在的環路,所以思科強烈建議並推薦用戶在全局模式上啓動BPDU Filtering功能。
演示:BPDU Filtering在全局與接口上的配置
演示目標:
ü 測試BPDU Filtering在全局模式下的配置效果
ü 測試BPDU Filtering在接口模式下的配置效果
ü 一個有趣的現象:全局啓動BPUD過濾,有某個時候會有少量的BPDU報文被髮送。
演示環境:如圖所示
演示背景:首先還是在S2和S3的交換機接口上將相應接口的交換機功能關閉( no switchport),這樣就可以暫時禁止S2和S3向交換機S1發送BPDU,爲測試BPDU Filtering功能做好準備工作,然後將交換機S1的E0/0-3的接口範圍配置爲接入模式,並在這些端口上全局的啓動Portfast功能,然後通過協議分析器來取證portfast是否會發送BPDU報文,然後再在portfast端口之上啓動BPDU Filtering,再來取證portfast端口是否會繼續發送BPDU報文,然後在交換機S2的E0/0端口上開啓交換功能(switchport),使其發送BPDU報文給S1,再觀察S1的E0/0在啓動BPDUFiltering的情況下,是否會將portfast端口回退到常規的生成樹端口狀態。最後來測試接口BPDU Filtering的配置效果,確定它是否需要依賴於portfast端口而存在,並確定接口上的BPDU過濾與全局的BPDU過濾的差異。
演示步驟:
第一步:首先將交換機S1的e0/0-3和e1/0-3的接口全部配置爲交換機的接入模式端口,然後將交換機S1的所有接入模式的端口規劃爲portfast端口,具體配置如下,爲了測試方便,建議現在就將S2和S3連接交換機S1的端口交換功能關閉(no switchport),相當於暫時禁止S2和S3向S1發送BPDU報文。
配置交換機S1的所有端口到接入模式端:
S1(config)#interfacerange e0/0-3
S1(config-if-range)#switchportmode access
S1(config-if-range)#noshutdown
S1(config-if-range)#exit
S1(config)#interfacerange e1/0-3
S1(config-if-range)#switchportmode access
S1(config-if-range)#noshutdown
S1(config-if-range)#exit
配置交換機S1的所有接入端口爲portfast端口:
S1(config)#spanning-treeportfast default * 規劃所有接入模式端口爲portfast端口
%Warning: this command enables portfast by default onall interfaces. You *交換機系統提示一些配置portfast後的注意事項
should nowdisable portfast explicitly on switched ports leading to hubs,
switches andbridges as they may create temporary bridging loops.
完成上述配置後,可以通過在交換機S1上執行show spanning-tree來查看當前所有的接入模式端口是否成爲portfast端口(也叫邊緣端口),如圖所示,所有接入模式的端口已經成爲邊緣端口。
此時,用戶可以通過協議分析器,去捕獲分析S1任意一個被啓動了portfast端口上的數據幀,如圖所示,可以清晰的看出在Portfast端口上,仍然不斷的以2秒爲一個間隔發送BPDU報文,這將爲測試BPDU Filitering功能做好準備。
接下來在全局模式下,啓動BPDUFiltering功能,具體配置如下,當完成BPDU過濾功能後,可以通過showspanning-tree summary來查看BPDU的過濾功能是否被啓動,如圖所示,明顯可看出BPDU過濾功能已經被啓動。
在全局模式下啓動BPDU Filtering功能:
S1(config)#spanning-treeportfast bpdufilter default
在完成上面的配置後,再次使有協議分析器軟件捕獲交換機S1的E0/0所產生的數據幀,可發現S1的E0/0接口不再發送任何BPDU報文,證明BPDU Filtering生效,至少證明了BPDU過濾功能將禁止portfast端口再發送BPDU報文。
接下來,需要來取證BPDU過濾功能在收到BPDU報文時的處理行爲,現在到交換機S2上的 E0/0接口啓動交換機功能(switchport),相當於是讓S2的E0/0向S1的E0/0發送BPDU報文。然後使用協議分析器去捕獲S1的E0/0接口的數據幀。會如圖所示,可以看到S1收到 S2(aa:bb:cc:00:02:00)發來的BDPU報文,並開始發送自己(S1)的BPDU報文。
然後可以在S1上通過執行show spanning-tree指令來查看當前生成樹幾個端口的狀態,如圖所示,交換機S1的E0/0由於收到了BPDU報文,BPDU過濾功能將其邊緣端口(portfast)的角色回退到常規的生成樹端口角色。但是它並不會像BPDU Gruad那樣極端的半閉端口,如圖所示,S1的E0/0端口仍然處於Up狀態。
第二步:現在來檢測BPDUFiltering在接口模式下的效果,首先請將S1的E1/0從portfast端口的配置中脫離出來,然後再到該端口下啓動接口級別的BPDU過濾功能,這兩項具體的配置任務如下所示:
將交換機S1的E1/0接口從portfast中脫離:
S1(config)#interfacee1/0
S1(config-if)#spanning-treeportfast disable * 禁用該端口的portfast功能
S1(config-if)#noshutdown
S1(config-if)#exit
在交換機S1的E1/0接口上啓動BPDU的過濾功能:
S1(config)#interfacee1/0
S1(config-if)#spanning-treebpdufilter enable * 啓動BPDU的過濾功能
S1(config-if)#exit
如果此時使用協議分析器捕獲交換機S1的E1/0的數據幀,不難發現,在S1的E1/0上不會有任何BPDU數據幀被髮送。其實這一點在接口級別的配置和在全局模式的配置的最終效果是一樣的,只是說接口級別可以不再依賴於portfast端口而存在。要反在接口級別的BPDU過濾與全局模式的BPDU過濾在收到BPDU報文時的處理方式則完全不一樣了,全局模式採取的是回退端口到常規生成樹端口,而接口級別則是完全忽略收到的BPDU,將不做任何處理。具體取證過程如下:
在交換機S3的E1/0 端口上啓動交換功能(switchport),相當於使其向S1的E1/0接口發送BPDU報文,此時會發現如圖所示的情況,S1的E1/0接口上會不斷的收到S3發來的BPDU報文,但是S1不會對這些報文做任何理採,也就是忽略(ignore)收到的BPDU報文,而且是無聲無息的將其ignore掉。由於這種悄無聲息的ignore,這個時候在網絡可能會出現“一國兩公”的局面,也就是一個整體的生成樹網絡可能存在多個根橋。
第三步:一個有趣的現象:就是用戶在全局模式下已經啓動了BPDU過濾功能後,就即便是此時某個具體的接口沒有收到任何BPDU的報文,然後當這個端口在正式連接進入網絡並且BPDU出站過濾開始之前,會有少量的BPDU被髮送(Theinterfaces still send a few BPDUs at link-up before the switch begins to filteroutbound BPDUs)。但幾秒中後就將進入BPDU過濾狀態。