馬曉波,蘇依拉,仁慶道爾吉
(內(nèi)蒙古工業(yè)大學(xué) 信息工程學(xué)院,內(nèi)蒙古 呼和浩特 010080)
異構(gòu)網(wǎng)絡(luò)主要是指由不同品牌、不同類型的設(shè)備和系統(tǒng)所組建的計算機網(wǎng)絡(luò)。對種類繁多的網(wǎng)絡(luò)設(shè)備所搭建的異構(gòu)網(wǎng)絡(luò)進(jìn)行有效管理已經(jīng)成為一個網(wǎng)絡(luò)系統(tǒng)高效運轉(zhuǎn)的關(guān)鍵因素。由于VLAN間的子網(wǎng)不允許直接進(jìn)行通信,需要通過三層通信才能實現(xiàn)VLAN間的互相訪問,而且網(wǎng)絡(luò)中存在不同廠商的網(wǎng)絡(luò)設(shè)備,這些設(shè)備具有多樣性且支持不同通信協(xié)議,沒有為物理拓?fù)浒l(fā)現(xiàn)直接提供所需的信息。因此,設(shè)計一種基于異構(gòu)跨VLAN的多子網(wǎng)物理拓?fù)浒l(fā)現(xiàn)方法,具有實際的工作價值和進(jìn)一步推廣的意義。
對現(xiàn)有的幾種物理網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)算法做了深入的研究分析:基于AFT的物理拓?fù)浒l(fā)現(xiàn)算法要求網(wǎng)絡(luò)中周期性地產(chǎn)生額外流量用以維護(hù)AFT的完整,并且對于啞設(shè)備的判斷需要單獨進(jìn)行考慮,而且隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,要求在短時間內(nèi)準(zhǔn)確獲得設(shè)備的MAC地址會有一定的困難;基于端口流量的物理拓?fù)浒l(fā)現(xiàn)算法雖然簡單,但仍需要進(jìn)行大量運算,一般只能用于對其他拓?fù)浒l(fā)現(xiàn)算法進(jìn)行補充;基于ARP的物理拓?fù)浒l(fā)現(xiàn)算法需要三層網(wǎng)絡(luò)支持;基于STP的物理拓?fù)浒l(fā)現(xiàn)算法不能夠直接發(fā)現(xiàn)網(wǎng)橋與路由器、主機等設(shè)備的連接關(guān)系。綜合對比上述算法,本文提出一種綜合利用STP和AFT信息的組合式拓?fù)浒l(fā)現(xiàn)算法,算法借助SNMP取得交換機所維護(hù)的MIB庫中生成樹和地址轉(zhuǎn)發(fā)表的相關(guān)信息,經(jīng)過查找對比,從而判定出交換機及其他網(wǎng)絡(luò)設(shè)備的連接關(guān)系,在此基礎(chǔ)上根據(jù)獲取到的VLAN的OID信息進(jìn)行判斷,完成VLAN的處理工作,最終獲得跨VLAN的異構(gòu)多子網(wǎng)的物理拓?fù)浣Y(jié)構(gòu)。
算法過程描述如下:
1)定義交換域中所有交換機的集合;
2)對于每個集合,分別取出一臺交換機Si,遍歷其每個端口Si j;
3)若交換機Si的端口Sij已經(jīng)與其他設(shè)備的端口互聯(lián),則轉(zhuǎn)到步驟2)執(zhí)行;
4)若Aij∪Akl=U且Aij∩Ak l=?,則交換機Si的端口Si j與交換機Sk的端口Skl直連。若Aij中含有主機或者路由器的MAC地址,則交換機Si的端口Si j與路由器或者交換機直連。
該算法主要利用Bridge MIB?Ⅱ的地址轉(zhuǎn)發(fā)表中二層設(shè)備間的物理連接關(guān)系以及特殊場景下的共享網(wǎng)絡(luò)。由于所有交換機都基于AFT轉(zhuǎn)發(fā)數(shù)據(jù),因此能夠訪問其所需的AFT。但要求交換機都能夠支持SNMP協(xié)議,而對于網(wǎng)絡(luò)底層的設(shè)備并不能統(tǒng)一地支持SNMP協(xié)議,這在一定程度上產(chǎn)生了局限性。由于該算法對網(wǎng)絡(luò)環(huán)境具有較高的要求,所以在現(xiàn)實網(wǎng)絡(luò)中難以保證交換機的地址轉(zhuǎn)發(fā)表AFT始終完整。
算法過程描述如下:
1)分配內(nèi)存并初始化;
2)對網(wǎng)絡(luò)中臨時交換機集合所包含的各個交換機進(jìn)行信息探測,獲取其IP及MAC地址;
3)根據(jù)交換機的IP地址,通過SNMP訪問臨時集合所包含交換機的MIB庫;
4)采用廣度優(yōu)先遍歷的方法,將根交換機的信息加入到交換機集合中,并創(chuàng)建搜索指針指向根交換機;
5)以根交換機MAC地址為索引,將根端口為索引的MAC地址處于臨時集合中的交換機依次查找出來,然后加入到交換機集合;
6)重復(fù)搜索直到所有的交換機均加入到交換機集合中;
7)若臨時集合中還有未按索引查找到的交換機,則查詢交換機的指定網(wǎng)橋,如網(wǎng)橋不存在則將該交換機加入至交換機集合,然后將指針指向該交換機,重復(fù)步驟4)~步驟6),如存在指定網(wǎng)橋則說明有集線器等共享網(wǎng)絡(luò)設(shè)備相連;
8)遍歷數(shù)據(jù),查詢交換機的端口信息;
9)排除指定網(wǎng)橋;
10)查詢交換機的阻塞端口所對應(yīng)的指定網(wǎng)橋,將其連接信息填入到相應(yīng)的端口信息中;
11)Ping網(wǎng)絡(luò)內(nèi)的所有設(shè)備,并訪問交換機的地址轉(zhuǎn)發(fā)表,填入信息。
該算法可以得到網(wǎng)絡(luò)設(shè)備的物理連接關(guān)系,也可以發(fā)現(xiàn)大部分的啞交換機及其MAC地址與所連端口的關(guān)系,還可以發(fā)現(xiàn)局域網(wǎng)中的備用鏈路,發(fā)現(xiàn)的準(zhǔn)確率較高。由于端口的STP信息少于端口的AFT信息,所以該算法擁有較低的時間復(fù)雜度,該算法不能夠直接發(fā)現(xiàn)網(wǎng)橋與路由器、主機等設(shè)備的連接關(guān)系,同時也有可能使部分設(shè)備不支持STP協(xié)議,因此,可考慮在STP發(fā)現(xiàn)算法的基礎(chǔ)上應(yīng)用基于AFT的發(fā)現(xiàn)算法,進(jìn)一步完成對整個網(wǎng)絡(luò)的拓?fù)浒l(fā)現(xiàn)。
網(wǎng)絡(luò)中的交換機通過定期交互BPDU(網(wǎng)橋協(xié)議數(shù)據(jù)單元)完成生成樹的計算,選出數(shù)據(jù)轉(zhuǎn)發(fā)端口和阻塞端口,然后將阻塞端口禁用,構(gòu)造一個無環(huán)的、邏輯上的樹,當(dāng)網(wǎng)絡(luò)中出現(xiàn)故障導(dǎo)致網(wǎng)絡(luò)的物理結(jié)構(gòu)發(fā)生變化時,交換機會再次根據(jù)BPDU信息重新計算并生成無環(huán)網(wǎng)絡(luò)。
本文所用到的定義:擁有最小橋ID的交換機被稱為根橋;除根橋外,其他交換機稱為非根橋;在非根橋設(shè)備上負(fù)責(zé)向根橋轉(zhuǎn)發(fā)數(shù)據(jù)的端口稱為根端口;指定交換機也稱為指定網(wǎng)橋,由處于同一子網(wǎng)下(即相同網(wǎng)段)的交換機選舉得出;指定交換機向本網(wǎng)段轉(zhuǎn)發(fā)配置消息的端口即為指定端口;轉(zhuǎn)發(fā)端口包括根端口和指定端口,用來轉(zhuǎn)發(fā)數(shù)據(jù)流量;除轉(zhuǎn)發(fā)端口外的其他端口都處于阻塞狀態(tài),稱為阻塞端口。
推論1:在STP網(wǎng)絡(luò)中,如果兩個有直接關(guān)系的端口都為根端口,說明兩個端口必定處于同一條物理鏈路,由此可推出必處于同一網(wǎng)段,這樣就會在同一網(wǎng)段內(nèi)存在兩條路徑到達(dá)根橋設(shè)備,從而形成環(huán)路,該推論與STP的定義矛盾。
推論2:在STP網(wǎng)絡(luò)中,如果兩個有直連關(guān)系的端口都為非根端口,首先說明兩端口必定處于同一條物理鏈路,由此可推出它們必定處于同一網(wǎng)段,并對該網(wǎng)段的數(shù)據(jù)幀進(jìn)行轉(zhuǎn)發(fā),無根端口,同一網(wǎng)段下無根端口與根橋設(shè)備相連和前置條件相矛盾。
由上述兩個推論過程可知,當(dāng)兩交換機的端口間存在物理連接時,有可能是一個端口發(fā)送的BPDU消息被另一個端口接收,則可推斷出這兩個端口中必定有一個為根端口。由此可以得出,存在直連關(guān)系的兩個端口不可能同時為非根端口,如果兩個非根端口處于同一網(wǎng)段,則必有一個端口無法轉(zhuǎn)發(fā)數(shù)據(jù),即為阻塞端口。就單臺設(shè)備而言,非根橋設(shè)備的轉(zhuǎn)發(fā)端口的指定交換機都是該設(shè)備本身。
根據(jù)上述推論結(jié)合MIB庫中dot1dStp Port Table表的對象值可推導(dǎo)出如下判斷規(guī)則:
設(shè)備連接關(guān)系判斷規(guī)則1:設(shè)交換機Si的某個根端口為Sij,Si j的指定交換機為Sk,當(dāng)交換機的非根端口Sk l與Si j的指定端口信息相等時,可知端口Skl發(fā)送的BPDU被端口Sij接收,所以可以推斷出交換機Si與Sk之間必定存在物理鏈接,即端口Sij與端口Sk l直連。
設(shè)備連接關(guān)系判斷規(guī)則2:設(shè)交換機Si的某個非根端口為Si j,交換機Sk的某個非根端口為Skl,當(dāng)Sij的指定交換機為Sk且Si j與Sk l的指定交換機相同時,即端口Sk l的指定交換機為設(shè)備本身,如果端口Sij為阻塞端口,則其阻塞端口的指定交換機不是設(shè)備本身,可以判斷出端口Si j與端口Sk l直連,且該端口用于連接備份鏈路。
設(shè)備連接關(guān)系判斷規(guī)則3:設(shè)交換機的某個非根端口為Sij,若Sij與子網(wǎng)內(nèi)邊緣設(shè)備(例如主機、路由器等)直接連接,可獲取MIB?Ⅱ中的sysService變量判斷該設(shè)備是否提供二層服務(wù),根據(jù)OID信息區(qū)分出主機設(shè)備為路由器或主機之后,可知端口Ai j內(nèi)必定含有直連主機MAC地址信息。
將上述設(shè)備連接關(guān)系的判斷規(guī)則在實際中進(jìn)行應(yīng)用時,只需將規(guī)則與dot1dStpPortTable表中的對應(yīng)信息結(jié)合,根據(jù)生成樹協(xié)議的特點,便可判定出相應(yīng)設(shè)備間的連接關(guān)系。利用規(guī)則1可以準(zhǔn)確獲取交換機間的連接關(guān)系;利用規(guī)則2可以發(fā)現(xiàn)交換機的冗余鏈路。
先將交換域構(gòu)建成一棵無向樹,若某交換域中只含有一個子網(wǎng),則Ai j就在交換域所構(gòu)建的無向樹的路徑中,交換機端口Sij所能到達(dá)的節(jié)點的集合,如果AFT表是完整的,那么Aij就包含生成樹的路徑中全部節(jié)點的集合。值得注意的是,當(dāng)交換域中不止含有一個子網(wǎng)時,上述情況不適用。當(dāng)交換域中有多個子網(wǎng)時,盡管該交換域中的所有交換機端口的地址轉(zhuǎn)發(fā)表都完整也無法得到唯一的拓?fù)溥B接關(guān)系。本文構(gòu)建的基于AFT的拓?fù)浒l(fā)現(xiàn)算法主要是對樹型剪裁算法進(jìn)行改進(jìn)。
定理1:葉交換機只有一個端口的AFT含有其他交換機的地址。
定理2:中間交換機要么至少有兩個端口的AFT含有其他交換機的地址,要么一個端口的AFT含有其他交換機的地址并且至少存在一個端口含有的葉子節(jié)點地址分布在其他交換機的不同端口上。
樹型剪裁算法的主要思想:如果一棵樹的葉子節(jié)點被摘除,被摘光葉子的樹的分叉就會變成新的葉子節(jié)點,以此類推直到這棵樹被逐步裁剪完。改進(jìn)的樹型剪裁算法適用于多子網(wǎng)交換域的網(wǎng)絡(luò),不需要定期發(fā)送數(shù)據(jù)流量來盡量保持AFT表的完整。下面介紹改進(jìn)算法的核心思想:
1)定義交換機的集合為H(集合H中包含交換機的地址以及交換機端口的地址轉(zhuǎn)發(fā)表);
2)利用文獻(xiàn)[1]中已經(jīng)證明的基本推理規(guī)則進(jìn)行AFT的擴(kuò)展;
3)確定葉交換機Sk,找出交換機Si中只有一個Aij包含其他交換機地址的交換機作為備選的葉交換機(根據(jù)其是否在H中確定)(定理1),然后再根據(jù)定理2去掉其中的中間交換機,最后將所有葉交換機從H中剪掉。若葉交換機的某個下行端口中出現(xiàn)了多個葉子地址,則表示該葉子與HUB等啞設(shè)備相連;
4)更新交換機集合H中的地址轉(zhuǎn)發(fā)表。在剩余端口的Ai j中,交換機的地址為剪掉的葉交換機端口含有的地址全部更新成葉交換機Sk的地址(該過程等同于將剪掉的Sk用新的葉節(jié)點進(jìn)行了替換),然后將重復(fù)項進(jìn)行合并,再轉(zhuǎn)到步驟3),直至H中只含有根節(jié)點。
改進(jìn)后的算法復(fù)雜度為O(n2),n表示網(wǎng)絡(luò)中節(jié)點的個數(shù)。算法只需利用交換機的地址轉(zhuǎn)發(fā)表,對主機的地址轉(zhuǎn)發(fā)表沒有要求,而在現(xiàn)今的網(wǎng)絡(luò)中很多主機是不支持SNMP協(xié)議的。所以,改進(jìn)后的算法能夠適用于現(xiàn)實中的網(wǎng)絡(luò)環(huán)境。
2.3.1 算法理論依據(jù)
組合式算法的合并思想是從STP算法的根節(jié)點開始,先找到AFT算法中所輸出的對應(yīng)節(jié)點,然后把這個節(jié)點作為AFT算法的新根節(jié)點,以此類推。這樣,就可以每次都從相同的根節(jié)點去進(jìn)行廣度優(yōu)先遍歷,然后再對節(jié)點的連接關(guān)系進(jìn)行合并。對任意節(jié)點Si的合并規(guī)則:
1)如果STP算法和AFT算法對某個節(jié)點端口Sij的連接關(guān)系發(fā)現(xiàn)結(jié)果相同,則保留STP算法的發(fā)現(xiàn)結(jié)果,忽略AFT算法的發(fā)現(xiàn)結(jié)果;
2)如果AFT算法發(fā)現(xiàn)了某個節(jié)點端口Si j和某個設(shè)備存在直接連接關(guān)系,而在STP算法中沒有相關(guān)的發(fā)現(xiàn),則對這個連接關(guān)系進(jìn)行補充;
3)如果STP算法和AFT算法對某個節(jié)點端口Sij的連接關(guān)系發(fā)現(xiàn)結(jié)果不同,則認(rèn)為存在啞設(shè)備(比如HUB)連接了該節(jié)點端口Sij與所發(fā)現(xiàn)的不同設(shè)備,即通過加一個啞設(shè)備將不同設(shè)備進(jìn)行合并。
廣度優(yōu)先遍歷完成后,就完成了所有節(jié)點的連接關(guān)系合并。這樣,組合式算法中算法合并階段的算法復(fù)雜度就從O(n2)降到了O(nlogn),節(jié)省了拓?fù)浒l(fā)現(xiàn)的時間。而且對于STP算法沒有發(fā)現(xiàn)的相應(yīng)主機、路由器等設(shè)備的連接關(guān)系,可與AFT算法的相應(yīng)發(fā)現(xiàn)結(jié)果進(jìn)行合并,這樣就整合了兩種拓?fù)浒l(fā)現(xiàn)算法的優(yōu)勢,不僅對交換機之間的拓?fù)溥B接關(guān)系進(jìn)行了補充,又對非交換設(shè)備的連接關(guān)系進(jìn)行了補充。
合并算法運行結(jié)束后,再對可能出現(xiàn)的共享介質(zhì)做進(jìn)一步判斷,下面對共享介質(zhì)在網(wǎng)絡(luò)中的場景予以分析:
場景1:當(dāng)共享介質(zhì)位于交換域的邊緣,處在交換機和主機設(shè)備間,用來連接主機設(shè)備時,對設(shè)備連接關(guān)系判斷規(guī)則并沒有影響,可以正常獲得主機與交換機的連接關(guān)系。
場景2:當(dāng)共享介質(zhì)位于兩臺交換機之間用以代替兩臺交換機之間的直連物理鏈路時,此時利用規(guī)則1無法判斷并獲取共享介質(zhì)信息。
場景3:當(dāng)共享介質(zhì)位于多臺交換機之間時(兩臺以上),會有兩個以上的根端口存在直連關(guān)系,此時規(guī)則1不成立。
針對上述場景,推導(dǎo)出如下連接關(guān)系的判斷規(guī)則:
設(shè)交換機Si的根端口為Si j,Sij的指定交換機為Sk,當(dāng)交換機的非根端口Sk l與端口Sij的指定端口信息相等時,端口Sij與Sk l直連,若此時還有其他端口Smn與端口Sk l的指定端口信息相等,則在交換機Si,Sk,Sm之間存在共享介質(zhì)。
根據(jù)設(shè)備連接關(guān)系判斷規(guī)則1還可以得出,當(dāng)端口Sij和Skl直接連接時,若Aij∩Akl≠{?},則這兩個端口間存在共享介質(zhì)。
共享介質(zhì)連接關(guān)系判斷規(guī)則1:當(dāng)共享介質(zhì)位于網(wǎng)絡(luò)邊緣用以接入主機設(shè)備的時候,對網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)不產(chǎn)生影響,那么交換機Aij中所包含的MAC地址均為主機MAC地址,利用設(shè)備連接關(guān)系判斷規(guī)則3可得出交換機、共享介質(zhì)及下聯(lián)所有主機的連接關(guān)系,從而得出場景1的拓?fù)潢P(guān)系。
共享介質(zhì)連接關(guān)系判斷規(guī)則2:根據(jù)設(shè)備連接關(guān)系判斷規(guī)則1,如果當(dāng)有Aij∩Akl≠{?}時,則可得出在交換機Si與Sk之間存在有共享介質(zhì),并且通過Sij端口與Skl端口進(jìn)行連接,從而推出場景2的拓?fù)潢P(guān)系。
共享介質(zhì)連接關(guān)系判斷規(guī)則3:當(dāng)交換機Si在滿足設(shè)備連接關(guān)系判斷規(guī)則1的情況下,根端口Sij與多個端口的指定端口信息相等時,則說明交換機端口Sij連接有共享介質(zhì),相等的端口同時接入共享介質(zhì),從而推導(dǎo)出場景3的拓?fù)潢P(guān)系。
2.3.2 算法描述
具體算法的實現(xiàn)步驟簡述如下:
1)利用SNMP協(xié)議取得交換機列表與生成樹端口表,并讀取相應(yīng)的地址轉(zhuǎn)發(fā)表信息。
2)根據(jù)設(shè)備連接關(guān)系判斷規(guī)則得到交換機的端口之間的連接關(guān)系,從而得出交換機與交換機的直連關(guān)系。
3)運行改進(jìn)的樹型剪裁算法,得到AFT算法的拓?fù)浒l(fā)現(xiàn)結(jié)果。
4)運行廣度優(yōu)先的組合式算法,合并STP算法和AFT算法的拓?fù)浒l(fā)現(xiàn)結(jié)果。
5)將連接關(guān)系中各端口出現(xiàn)的頻率進(jìn)行統(tǒng)計,如果某一個端口出現(xiàn)的頻率多于一次,則該端口與共享介質(zhì)間存在連接,再取得剩余端口的地址轉(zhuǎn)發(fā)表,如果交集為非空,則兩端口間存在共享介質(zhì)。
6)根據(jù)設(shè)備連接關(guān)系判斷規(guī)則3收集步驟2)推導(dǎo)出的與交換機相連的主機的MAC地址信息。如果該端口中主機數(shù)量大于1,則該端口連有共享介質(zhì),再根據(jù)共享介質(zhì)連接關(guān)系判斷規(guī)則對共享介質(zhì)連接關(guān)系進(jìn)行推導(dǎo)。
7)獲取交換機的VLAN標(biāo)識dot1qPvid,將取值相同者置于同一集合,dot1qPvid取值即為VLAN號。
8) 獲 取 索 引 值 dot1qVLANIndex、列 表dot1qVLANCurrentEgressPorts的內(nèi)容,得出每個VLAN的所有端口信息。值得注意的是,對VLAN信息進(jìn)行處理時,dot1qVLANIndex參數(shù)不能直接被讀取,可通過SNMP提 供 的GetAll List()方 法(SNMPv1版 本 采 用getnext()方法)得到對應(yīng)的OID與Value。然后將條目中的索引值分離出來即可得到每個VLAN所包含的交換機以及端口的信息。
9)根據(jù)獲取到的設(shè)備信息進(jìn)行判別,收集設(shè)備的OID信息。
具體的拓?fù)浒l(fā)現(xiàn)流程如圖1所示。
圖1 拓?fù)浒l(fā)現(xiàn)流程圖
2.3.3 算法測試驗證
基于實際情況,選用某公司的網(wǎng)絡(luò)作為測試網(wǎng)絡(luò)。該網(wǎng)絡(luò)環(huán)境相對較復(fù)雜,可以滿足本課題研究的異構(gòu)性(滿足廠商的多樣性)。整個網(wǎng)絡(luò)劃分了上百個VLAN,且符合現(xiàn)代較為主流的網(wǎng)絡(luò)規(guī)劃標(biāo)準(zhǔn),完全可以滿足本課題對于多子網(wǎng)的網(wǎng)絡(luò)環(huán)境要求。由于網(wǎng)絡(luò)規(guī)模相對比較大,系統(tǒng)的拓?fù)浒l(fā)現(xiàn)時間在3 min左右,進(jìn)一步驗證了本組合式物理拓?fù)浒l(fā)現(xiàn)算法在真實網(wǎng)絡(luò)環(huán)境中的有效性和可行性。
圖2 是對該公司的部分網(wǎng)絡(luò)進(jìn)行測試所得的結(jié)果。
圖2 實際網(wǎng)絡(luò)測試結(jié)果
準(zhǔn)確的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)對于網(wǎng)絡(luò)管理、安全管理、性能分析等起著非常重要的作用。本文以基于STP的算法為基礎(chǔ),利用改進(jìn)后基于AFT的算法進(jìn)行擴(kuò)充,最后根據(jù)合并規(guī)則將兩種算法的拓?fù)浒l(fā)現(xiàn)結(jié)果進(jìn)行有效的融合,實現(xiàn)了跨VLAN的異構(gòu)多子網(wǎng)的物理拓?fù)浒l(fā)現(xiàn),避開了網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)協(xié)議不一致,網(wǎng)絡(luò)設(shè)備多樣性等帶來的困難,在地址轉(zhuǎn)發(fā)表不完整的情況下能夠準(zhǔn)確、全面、高效地發(fā)現(xiàn)網(wǎng)絡(luò)設(shè)備。實驗表明,算法從完整率、準(zhǔn)確率、網(wǎng)絡(luò)負(fù)載等指標(biāo)的綜合情況來看,有一定的優(yōu)勢,并且可以作為一種有效的算法應(yīng)用到實際的跨VLAN的異構(gòu)多子網(wǎng)環(huán)境中,具備一定的實用價值和推廣意義。