孫光懿 楊 媛 劉云月
(1.天津音樂學(xué)院圖書信息中心,天津 300171; 2.天津市寧河區(qū)人才交流服務(wù)中心,天津 301500)
當(dāng)今,網(wǎng)絡(luò)已成為人們?nèi)粘Ia(chǎn)生活不可替代的要素,其可靠性的高低對用戶來說顯得尤為重要.現(xiàn)實(shí)中為了提高網(wǎng)絡(luò)的可靠性多使用冗余架構(gòu),即交換機(jī)與交換機(jī)之間通過創(chuàng)建多個(gè)鏈接來實(shí)現(xiàn)三層鏈路冗余與二層鏈路冗余,這樣以來就可以有效避免網(wǎng)絡(luò)中的單點(diǎn)故障,即使其中某條鏈路出現(xiàn)故障,數(shù)據(jù)還可以通過另一條冗余鏈路進(jìn)行轉(zhuǎn)發(fā).但是二層鏈路的冗余往往會帶來橋接環(huán)路,橋接環(huán)路的存在對于以太網(wǎng)來說是災(zāi)難性的,數(shù)據(jù)幀會在組成環(huán)路的設(shè)備間不停的循環(huán)轉(zhuǎn)發(fā),這必然會引起交換機(jī)CAM表不穩(wěn)定、相同數(shù)據(jù)幀傳輸、產(chǎn)生廣播風(fēng)暴等一系列問題,最終導(dǎo)致交換機(jī)內(nèi)存與CPU資源耗盡,網(wǎng)絡(luò)徹底癱瘓.這一問題隨著1985年 STP協(xié)議[1-2]的誕生(早期STP協(xié)議的版本為IEEE 802.1D,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展目前已有多個(gè)版本的生成樹協(xié)議)得到了有效解決,它不僅可以為網(wǎng)絡(luò)提供二層冗余鏈路,而且還負(fù)責(zé)解決二層環(huán)路問題.
STP協(xié)議通過應(yīng)用SPA算法,在存在環(huán)路的二層網(wǎng)絡(luò)創(chuàng)建一個(gè)邏輯無環(huán)樹,從而確保去往任意目標(biāo)地址只存在一條活動(dòng)路徑.一方面它通過阻塞環(huán)路設(shè)備上某個(gè)特定端口,在邏輯上切斷二層橋接環(huán)路,防止廣播風(fēng)暴的產(chǎn)生;另一方面承擔(dān)數(shù)據(jù)轉(zhuǎn)發(fā)的這條鏈路如果發(fā)生故障,STP會再次進(jìn)行計(jì)算,在邏輯上被切斷的鏈路也會重新建立連通性,從而保證數(shù)據(jù)的正常轉(zhuǎn)發(fā).需要清楚認(rèn)識到的一點(diǎn)是:二層環(huán)路中的各設(shè)備應(yīng)用STP協(xié)議后,雖然邏輯上的環(huán)路不存在了,但是物理上的環(huán)路依然存在.
橋協(xié)議數(shù)據(jù)單元(BPDU)[5-6]是STP協(xié)議定義的一種二層消息幀,擁有配置BPDU和TCN BPDU兩種類型.BPDU字段中的TYPE值決定了BPDU的類型,配置BPDU的TYPE值為0x00,TCN BPDU的TYPE值為0x80.配置BPDU主要用來計(jì)算STP,一般情況下非根交換機(jī)只有根端口才可以獲取配置BPDU.而TCN BPDU主要用來向應(yīng)用STP協(xié)議的各交換機(jī)通告網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的變化,當(dāng)其中一臺非根交換機(jī)發(fā)現(xiàn)拓?fù)浣Y(jié)構(gòu)發(fā)生改變后,就會從自己的根端口向根交換機(jī)發(fā)送TCN BPDU,其它非根交換機(jī)收到TCN BPDU后再從自己的根端口轉(zhuǎn)發(fā)出去,這樣層層的轉(zhuǎn)發(fā)直到根交換機(jī)收到為止,這時(shí)TCN BPDU的使命才算真正完成.收到TCN BPDU的根交換機(jī)則會發(fā)出一個(gè)正常的配置BPDU作為回應(yīng).由此可見,應(yīng)用STP協(xié)議的交換機(jī)不僅通過BPDU來交換STP信息,而且還使用它來確定網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),以及對網(wǎng)絡(luò)拓?fù)渥兓皶r(shí)做出回應(yīng).通常交換機(jī)為了交換最新拓?fù)湫畔?,每?秒鐘就會向其所有端口發(fā)送BPDU,(端口自身的MAC地址即為源地址,STP協(xié)議組播MAC地址01-80-c2-00-00-00即為目的地址)從而快速鑒別二層網(wǎng)絡(luò)中是否有環(huán)路的存在.BPDU消息格式如圖1所示.
圖1 BPDU消息格式
(1)選舉根交換機(jī)[7]
我們可以把根交換機(jī)理解為生成樹拓?fù)浣Y(jié)構(gòu)的邏輯中心,網(wǎng)絡(luò)中數(shù)據(jù)流的選路過程都要圍繞根交換機(jī)來開展.在啟用STP協(xié)議的二層環(huán)路交換機(jī)中選舉根交換機(jī)是一個(gè)長久持續(xù)的過程,最初每臺交換機(jī)不僅會向相鄰交換機(jī)發(fā)送BPDU,而且也會接收來自相鄰交換機(jī)的BPDU,并與自身的BID相比較(BID由交換機(jī)的優(yōu)先級和MAC地址構(gòu)成,由于MAC地址具有唯一性,因此對每臺交換機(jī)來說BID也是唯一的),如果接收到的BID值小于自身的BID值,則會認(rèn)為自身不是根交換機(jī),從而不再向相鄰交換機(jī)發(fā)送BPDU;如果接收到的BID值大于自身的BID值,則會認(rèn)為自身就是根交換機(jī)并繼續(xù)向相鄰交換機(jī)發(fā)送BPDU.最終,擁有最低優(yōu)先級的交換機(jī)(交換機(jī)默認(rèn)優(yōu)先級為32768)將會被選舉為根交換機(jī).如果出現(xiàn)交換機(jī)優(yōu)先級相同的情況,則會通過比較交換機(jī)MAC地址大小的方式來選舉根交換機(jī),擁有最低MAC地址的交換機(jī)成為根交換機(jī).另外,后期如果有BID更低的交換機(jī)加入網(wǎng)絡(luò),那么這臺交換機(jī)會被選舉為新的根交換機(jī).
(2)選舉根端口[8]
在生成樹協(xié)議工作過程中根端口發(fā)揮著極其重要的作用,不僅承擔(dān)著將數(shù)據(jù)流轉(zhuǎn)發(fā)到根交換機(jī)的重任,而且還負(fù)責(zé)將收到的數(shù)據(jù)幀源MAC地址加入到交換機(jī)的CAM表中.根端口的選舉由非根交換機(jī)端口去往根交換機(jī)鏈路開銷的大小(默認(rèn)情況下,鏈路開銷大小基于鏈路帶寬得出)所決定,開銷值最小的端口即為根端口.如果非根交換機(jī)上出現(xiàn)端口開銷值一樣的情況,那么擁有最小端口ID(端口ID由端口優(yōu)先級和端口號構(gòu)成)的端口就會被選舉為這臺非根交換機(jī)的根端口.需要說明的一點(diǎn)是,根端口只存在于非根交換機(jī)上,并且每臺非根交換機(jī)只有一個(gè)根端口.
(3)選舉指定端口
二層環(huán)路中的每條鏈路都存在一個(gè)向根交換機(jī)接收和發(fā)送流量的端口,此端口即為指定端口.指定端口通常選擇存在于根交換機(jī)上(根交換機(jī)上所以端口均為指定端口),兩臺非根交換機(jī)的鏈路之間必定有一個(gè)端口為指定端口,指定端口的選舉由非根交換機(jī)到根交換機(jī)的鏈路開銷大小所決定,鏈路開銷最小的非根交換機(jī)所在的鏈路的端口為指定端口.如果兩條鏈路開銷相同,則繼續(xù)比較兩臺非根交換機(jī)的BID,擁有最小BID的非根交換機(jī)所在的鏈路的端口為指定端口.
(4)非指定端口
非指定端口通常處于邏輯阻塞狀態(tài),可以接收BPDU,但是不負(fù)責(zé)轉(zhuǎn)發(fā)任何數(shù)據(jù)幀.在啟用STP協(xié)議的二層環(huán)路中,除根端口及指定端口外的其它端口都屬于非指定端口.
GNS3[9]是一款可以運(yùn)行在WINDOWS、LINUX及蘋果系統(tǒng)中的圖形化網(wǎng)絡(luò)仿真軟件,目前最新版本為GNS3-2.0.3.相比思科公司推出的仿真軟件Cisco Packet Tracer而言,GNS3由多款軟件整合而成并且是開源的,可以實(shí)現(xiàn)的功能更多.不僅支持多種型號的思科交換機(jī)、路由器以及防火墻等設(shè)備的模擬仿真,而且還可以與現(xiàn)實(shí)中網(wǎng)絡(luò)環(huán)境進(jìn)行深度對接,具有免費(fèi)、真實(shí)可信、用戶操作性強(qiáng)等特點(diǎn),適用于模擬各類型復(fù)雜網(wǎng)絡(luò)環(huán)境.
GNS3主要包含以下這幾款組件Dynamips、Qemu、Dynagen、Wireshark.其中,Dynamips也是一款開源軟件,它通過模擬思科設(shè)備的實(shí)際運(yùn)行環(huán)境,能夠直接加載并運(yùn)行思科IOS鏡像,不足的一點(diǎn)是操作界面為命令行模式,當(dāng)需要模擬大型復(fù)雜網(wǎng)絡(luò)環(huán)境時(shí),用戶的配置難度會成倍增加.Qemu主要用來在GNS3上模擬PIX防火墻、ASA防火墻等設(shè)備.Dynagen是Dynamips的前端程序,它使用類ini配置文件來生成網(wǎng)絡(luò)拓?fù)?Wireshark則是一款著名的開源數(shù)據(jù)包分析軟件,支持Linux與Windows操作系統(tǒng),用戶可以通過它實(shí)時(shí)捕獲并分析網(wǎng)絡(luò)和上層協(xié)議的各種信息.
我們在GNS3網(wǎng)絡(luò)仿真平臺的基礎(chǔ)上,使用三臺交換機(jī)和四臺終端計(jì)算機(jī)模擬構(gòu)建一個(gè)小型局域網(wǎng).其中SW1為三層交換機(jī),負(fù)責(zé)數(shù)據(jù)包的快速交換與路由,局域網(wǎng)內(nèi)VLAN60與VLAN70兩個(gè)網(wǎng)段的網(wǎng)關(guān)均在其上建立.VLAN60的網(wǎng)關(guān)地址為192.168.60.1,VLAN70的網(wǎng)關(guān)地址為192.168.70.1.SW2與SW3為兩臺二層交換機(jī),用以連接局域網(wǎng)內(nèi)的四臺終端計(jì)算機(jī)即C1、C2、C3和C4,它們之間可以互相訪問.三臺交換機(jī)之間通過trunk鏈路相連(每條鏈路帶寬均為100 Mbit/s),通過拓?fù)鋱D不難發(fā)現(xiàn),局域網(wǎng)中有二層環(huán)路的存在.為了消除二層環(huán)路,保障局域網(wǎng)能夠正常工作,我們在三臺交換機(jī)SW1、SW2、SW3上實(shí)施生成樹協(xié)議,同時(shí)將三層交換機(jī)SW1設(shè)置為VLAN1、VLAN60與VLAN70的根交換機(jī).局域網(wǎng)網(wǎng)絡(luò)拓?fù)淙鐖D2所示.
圖2 局域網(wǎng)網(wǎng)絡(luò)拓?fù)?/p>
局域網(wǎng)內(nèi)VLAN默認(rèn)網(wǎng)關(guān)及終端計(jì)算機(jī)IP地址分配如圖3所示.
圖3 局域網(wǎng)內(nèi)VLAN默認(rèn)網(wǎng)關(guān)及終端計(jì)算機(jī)IP地址
我們在三層交換機(jī)上建立VLAN 60與VLAN 70兩個(gè)網(wǎng)段,并啟用路由功能,以保證兩個(gè)網(wǎng)段的用戶可以互連互通.
(1)配置三層交換機(jī)SW1
SW1#vlan database
SW1(vlan)#vlan 60//建立VLAN 60
SW1(vlan)#vlan 70//建立VLAN 70
SW1(config)#ip routing //啟用三層交換機(jī)路由功能
SW1(config)#int vlan60
SW1(config-if)#ip add 192.168.60.1 255.255.255.0
SW1(config)#int vlan70
SW1(config-if)#ip add 192.168.70.1 255.255.255.0
SW1(config)#int range f0/0-1
SW1(config-if-range)#sw mode tr //將三層交換機(jī)SW1的f0/0與f0/1兩個(gè)端口設(shè)置成TRUNK工作模式
(2)配置二層交換機(jī)SW2
SW2#vlan database
SW2(vlan)#vlan 60
SW2(vlan)#vlan 70
SW2(config)#int range f0/0-2
SW2(config-if-range)#sw mode tr //將二層交換機(jī)SW2的f0/0、f0/1與f0/2三個(gè)端口設(shè)置成TRUNK工作模式
SW2(config)#int f0/3//此接口連接計(jì)算機(jī)C1
SW2(config-if)#sw access vlan 60
SW2(config)#int f0/4//此接口連接計(jì)算機(jī)C2
SW2(config-if)#sw access vlan 70
(3)配置二層交換機(jī)SW3
SW3#vlan database
SW3(vlan)#vlan 60
SW3(vlan)#vlan 70
SW3(config)#int range f0/1-2
SW3(config-if-range)#sw mode tr //將二層交換機(jī)SW3的f0/1與f0/2兩個(gè)端口設(shè)置成TRUNK工作模式
SW3(config)#int f0/3//此接口連接計(jì)算機(jī)C3
SW3(config-if)#sw access vlan 60
SW3(config)#int f0/4//此接口連接計(jì)算機(jī)C4
SW3(config-if)#sw access vlan 70
為了保證三層交換機(jī)SW1為VLAN1、VLAN60與VLAN70網(wǎng)段的根交換機(jī),在這里我們有必要為其設(shè)置交換機(jī)的優(yōu)先級.如果不為其設(shè)置優(yōu)先級,將不能保證三層交換機(jī)SW1為VLAN1、VLAN60與VLAN70網(wǎng)段的根交換機(jī).屆時(shí)三臺交換機(jī)的優(yōu)先級將同為默認(rèn)值32 768,在交換機(jī)優(yōu)先級相同的情況下,根交換機(jī)的選舉將由交換機(jī)的MAC地址大小來決定,一般來說生產(chǎn)年代越早的交換機(jī)其MAC地址越小,也就是說生產(chǎn)年代最早的交換機(jī)最有可能成為根交換機(jī),這顯然是不合理的.
(1)配置三層交換機(jī)SW1
SW1(config)#spanning-tree vlan 1 priority 12288
SW1(config)#spanning-tree vlan 60 priority 12288
SW1(config)#spanning-tree vlan 70 priority 12288
(2)配置二層交換機(jī)SW2
SW2(config)#spanning-tree vlan 1
SW2(config)#spanning-tree vlan 60
SW2(config)#spanning-tree vlan 70
(3)配置二層交換機(jī)SW3
SW3(config)#spanning-tree vlan 1
SW3(config)#spanning-tree vlan 60
SW3(config)#spanning-tree vlan 70
3.3.1配置PortFast特性
在二層接入交換機(jī)Access端口上啟用PortFast特性,一方面可以使其端口立即進(jìn)入轉(zhuǎn)發(fā)狀態(tài),最大限度的減少等待STP的收斂時(shí)間.另一方面可以使端口在發(fā)生UP或DOWN狀態(tài)變化時(shí),不會產(chǎn)生TCN BPDU消息.這一點(diǎn)對于大型網(wǎng)絡(luò)來說,可以有效避免因大規(guī)模PC機(jī)開關(guān)機(jī),造成大量TCN BPDU消息交換現(xiàn)象的發(fā)生.
(1)配置二層交換機(jī)SW2
SW2(config)#spanning-tree portfast defau //二層交換機(jī)SW2上所有 access端口啟用portfast特性
(2)配置二層交換機(jī)SW3
SW3(config)#spanning-tree portfast defau //二層交換機(jī)SW3上所有 access端口啟用portfast特性
3.3.2配置BPDU保護(hù)
配置BPDU保護(hù)不僅可以有效加強(qiáng)STP域邊界,而且還可以保護(hù)PortFast端口的完整性.通常交換機(jī)端口在啟用PortFast特性后,只能對BPDU進(jìn)行偵聽,而不應(yīng)該收到它.配置BPDU保護(hù)以后,即使啟用PortFast特性的交換機(jī)端口收到了BPDU,該端口也會立即進(jìn)入“err-disable”狀態(tài),從而避免網(wǎng)絡(luò)中環(huán)路的產(chǎn)生.
(1)配置二層交換機(jī)SW2
SW2(config)#spanning-tree portfast bpduguard defau //二層交換機(jī)SW2所有 portfast端口上啟用BPDU保護(hù)
(2)配置二層交換機(jī)SW3
SW3(config)#spanning-tree portfast bpduguard defau
3.3.3配置根保護(hù)
配置根保護(hù)主要為了防止新加入到網(wǎng)絡(luò)中的交換機(jī)被選舉為根交換機(jī),從而影響網(wǎng)絡(luò)的穩(wěn)定.當(dāng)交換機(jī)端口啟用根保護(hù)后,該端口將會成為指定端口,并且在任何情況下也不會被選舉為根端口.在這里我們以交換機(jī)SW2為例,給出根保護(hù)的詳細(xì)配置命令.
(1)配置二層交換機(jī)SW2
SW2(config)#int range f0/3-24
SW2(config)#spanning-tree guard root
為了節(jié)省文章的篇幅,在這里我們以局域網(wǎng)VLAN 60網(wǎng)段為例,通過命令分別查看SW1、SW2、SW3三臺交換機(jī)上STP協(xié)議的運(yùn)行狀態(tài),并分析根交換機(jī)、根端口、指定端口、非指定端口的選舉過程.
(1)SW1上STP協(xié)議的相關(guān)信息
SW1#sh spanning-tree vlan 60 bri
Spanning tree enabled protocol ieee
Root ID Priority 12288
Address cc00.1ca0.0001 //交換機(jī)MAC地址為cc00.1ca0.0001
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec //各計(jì)時(shí)器的值
Bridge ID Priority 12288
Address cc00.1ca0.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
//由于三層交換機(jī)SW1為根交換機(jī),因此Bridge ID 與Root ID信息相同.
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
FastEthernet0/0 128.1 128 19FWD 0 4096 cc00.1ca0.0001 128.1
FastEthernet0/1 128.2 128 19FWD 0 4096 cc00.1ca0.0001 128.2
通過以上信息我們可以得出以下結(jié)論:三層交換機(jī)SW1為根交換機(jī),(由于三層交換機(jī)SW1的優(yōu)先級為12288,比其它交換機(jī)優(yōu)先級均低,因此SW1為根交換機(jī).)其運(yùn)行的STP協(xié)議為IEEE 802.1D,MAC地址為cc00.1ca0.0001,f0/0與f0/1端口均為指定端口,處于轉(zhuǎn)發(fā)狀態(tài)且端口ID分別為128.1和128.2.
(2)SW2上STP協(xié)議的相關(guān)信息
SW2#sh spanning-tree vlan 60 bri
Spanning tree enabled protocol ieee
Root ID Priority 12288
Address cc00.1ca0.0001
Cost 19
Port 1 (FastEthernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address cc02.1ca0.0001
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
FastEthernet0/0 128.1 128 19 FWD 0 4096 cc00.1ca0.0001 128.1
FastEthernet0/2 128.3 128 19 BLK 19 32768 cc01.1ca0.0001 128.3
FastEthernet0/3 128.4 128 19 FWD 19 32768 cc02.1ca0.0001 128.4
FastEthernet0/4 128.5 128 19 FWD 19 32768 cc02.1ca0.0001 128.5
通過以上信息我們可以得出以下結(jié)論:二層交換機(jī)SW2 的優(yōu)先級為32768,其運(yùn)行的STP協(xié)議為IEEE 802.1D,MAC地址為cc02.1ca0.0001.f0/0、f0/3、f0/4端口處于轉(zhuǎn)發(fā)狀態(tài),其中為f0/0端口為根端口,端口ID為128.1.(SW2去往根交換機(jī)SW1共有兩條路徑,從f0/0端口到達(dá)SW1的開銷值為19,從f0/2端口到達(dá)SW1的開銷值為38.)f0/3與f0/4端口分別連接終端計(jì)算機(jī)C1、C2,均為指定端口.f0/2端口為非指定端口,處于阻塞狀態(tài),從而保證了局域網(wǎng)中沒有二層環(huán)路的存在.(二層交換機(jī)SW2的f0/2端口與SW3的f0/2端口之間存在一條直連鏈路,兩臺交換機(jī)不僅到達(dá)根交換機(jī)SW1的開銷值相同(開銷值均為19)而且優(yōu)先級也相同,由于SW2的MAC地址大于SW3的MAC地址cc01.1ca0.0001,因此SW2上的f0/2端口為非指定端口,SW3上的f0/2端口為指定端口.)
(3)SW3上STP協(xié)議的相關(guān)信息
SW3#sh spanning-tree vlan 60 bri
Spanning tree enabled protocol ieee
Root ID Priority 12288
Address cc00.1ca0.0001
Cost 19
Port 2 (FastEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32768
Address cc01.1ca0.0001
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Interface Designated
Name Port ID Prio Cost Sts Cost Bridge ID Port ID
FastEthernet0/1 128.2 128 19 FWD 0 4096 cc00.1ca0.0001 128.2
FastEthernet0/2 128.3 128 19 FWD 19 32768 cc01.1ca0.0001 128.3
FastEthernet0/3 128.4 128 19 FWD 19 32768 cc01.1ca0.0001 128.4
通過以上信息我們可以得出以下結(jié)論:二層交換機(jī)SW3的MAC地址為cc01.1ca0.0001,不僅優(yōu)先級和運(yùn)行的STP協(xié)議版本與SW2相同,而且所有端口均處于轉(zhuǎn)發(fā)狀態(tài).其中f0/1端口為根端口,端口ID為128.2.(SW3去往根交換機(jī)SW1共有兩條路徑,從f0/1端口到達(dá)SW1的開銷值為19,從f0/2端口到達(dá)SW1的開銷值為38.)f0/2、f0/3以及f0/4 端口均為指定端口.
通過PING命令對4臺終端計(jì)算機(jī)進(jìn)行連通性測試,以局域網(wǎng)VLAN60 所屬網(wǎng)段終端計(jì)算機(jī)C1為例,分別測試訪問終端計(jì)算機(jī)C3的連通性(二者同屬于VLAN 60網(wǎng)段)和終端計(jì)算機(jī)C2的連通性(終端計(jì)算機(jī)C2屬于VLAN 70網(wǎng)段).測試后發(fā)現(xiàn),C1與C2、C3之間均可以正常通信.連通性測試結(jié)果如圖4所示.
圖4 連通性測試結(jié)果
現(xiàn)如今STP協(xié)議雖已走向成熟,但是其使用系統(tǒng)資源工作的特性,不可避免的會帶來發(fā)生故障的風(fēng)險(xiǎn).在實(shí)際應(yīng)用過程中,工程技術(shù)人員通常會在啟用STP協(xié)議的交換機(jī)端口上應(yīng)用一些特性來限制BPDU的發(fā)送和接收,(例如PortFast、BPDU保護(hù)、根保護(hù)等)從而使STP擁有更快的收斂速度和穩(wěn)定性.