顯示和分析多播分布的拓撲圖算法
【專利摘要】顯示和分析多播分布的拓撲圖算法,采用客戶端/服務端架構,服務端分為通訊線程和服務線程。通訊線程負責接收客戶端的鄰居信息和多播地址信息并建立公共數(shù)據(jù)結構,該結構存放設備信息、端口相連的鄰居信息、多播地址信息,并建立三者之間關聯(lián)。服務線程負責繪制拓撲圖和接收用戶查詢,用戶可查看設備的多播地址并查詢特定多播地址在網(wǎng)絡中的分布??蛻舳诉M程和LLDP協(xié)議、GMRP協(xié)議、IGMP協(xié)議同步協(xié)作,將鄰居信息和多播地址信息發(fā)給客戶進程,客戶進程處理后發(fā)給服務端。
【專利說明】顯示和分析多播分布的拓撲圖算法
【技術領域】
[0001] 本發(fā)明為顯示和分析多播分布的拓撲圖算法,屬于網(wǎng)絡通信領域。該算法采用客 戶端/服務端架構,網(wǎng)絡中一臺PC機作為服務端,網(wǎng)絡中的交換機或路由器作為客戶端,客 戶端收集數(shù)據(jù)上報給服務端,服務端按照客戶端上報的數(shù)據(jù)生成整個網(wǎng)絡的拓撲圖,同時 反映網(wǎng)絡中的多播分布情況。
【背景技術】
[0002] 現(xiàn)在網(wǎng)絡中多播應用非常廣泛,多播和廣播相比有明顯的優(yōu)勢:一點發(fā)送,多點接 收,接收方可以選擇離開或加入該多播組。和廣播不同的是,不加入多播組的設備,可以不 受多播影響,減輕了這些設置處理負擔。多播的廣泛的應用帶來的一個問題就是管理員需 要了解當前網(wǎng)絡的多播分布情況,比如一個特定多播地址在網(wǎng)絡中流動的路徑,該多播的 源發(fā)起端在何處,它的最終的目的端在何處,中間通過何種設備。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明提出的算法可以解決上述問題,它計算整個網(wǎng)絡的拓撲圖,同時在拓撲圖 上顯示多播分布情況,幫助用戶診斷網(wǎng)絡。它直觀、實時地顯示網(wǎng)絡中的多播路徑,查看特 定多播流所經(jīng)過的設備,以及該多播流的發(fā)送端和接收端。本算法支持復雜的拓撲圖生成, 和多播路徑結合起來,可以在生成的網(wǎng)絡拓撲圖上顯示特定拓撲節(jié)點的多播流,同時實時 展示特定的多播流流經(jīng)的拓撲節(jié)點,方便管理員的監(jiān)視和管理。
[0004] 本算法采用客戶端/服務端結構,選擇網(wǎng)絡中一臺PC作為服務端,網(wǎng)絡中交換機 和路由器作為客戶端,客戶端和服務端之間采用m)P協(xié)議通訊。服務端的程序分成兩個獨 立的線程,分別是通訊線程和服務線程。通訊線程負責和客戶端通訊并接收客戶端的上傳 信息,根據(jù)上傳信息生成網(wǎng)絡拓撲圖,保存各種上傳數(shù)據(jù),建立各網(wǎng)絡節(jié)點和多播地址的對 應關系。服務線程主要用來展現(xiàn)拓撲圖,展現(xiàn)各個節(jié)點上的多播表,同時提供查詢?nèi)肟诠┕?理人員使用。兩個線程使用公共的數(shù)據(jù)結構來存放拓撲圖和多播表的數(shù)據(jù)。兩個線程采用 同步機制,通訊線程收到客戶端的數(shù)據(jù),建立維護公共數(shù)據(jù)結構,在操作完公共數(shù)據(jù)結構后 則通知服務線程,服務線程接收到通知,讀取公共的數(shù)據(jù)結構,按照公共數(shù)據(jù)結構存放的信 息重新繪制拓撲圖。通訊線程和服務線程的同步關系如圖1所示。
[0005] 公共數(shù)據(jù)結構包括三個部分:設備鏈表、多播地址表。設備鏈表包含設備節(jié)點。設 備節(jié)點包括設備標示、設備IP地址、設備MAC地址,指向端口節(jié)點的指針、指向下一個設備 節(jié)點的指針。端口節(jié)點包括:本端的端口編號、對端的端口編號,鄰居設備指針、指向同一個 設備的下一個端口節(jié)點的指針;多播地址表包括:多播地址節(jié)點,該節(jié)點包含多播地址的 類型、多播MAC地址、多播IP地址、指向的多播設備節(jié)點的指針,指向下一個多播地址節(jié)點 的指針。多播設備節(jié)點包括指向設備節(jié)點的指針、該多播地址使用的設備端口向量,指向下 一個多播設備節(jié)點的指針。公共數(shù)據(jù)結構之間的關系如圖2所示。
[0006] 服務端和客戶端采用UDP協(xié)議,客戶端發(fā)現(xiàn)連接變化或IP/MAC多播流變化時,主 動上傳信息給服務端。網(wǎng)絡穩(wěn)定的情況下需要上傳的數(shù)據(jù)很少,當網(wǎng)絡產(chǎn)生變化時需要及 時將變化信息發(fā)給服務端,服務端和客戶端經(jīng)常是短連接,傳輸?shù)臄?shù)據(jù)量不大,對時間要求 較高,故采用UDP協(xié)議,同時相比TCP服務器采用UDP服務端可以支持更多的UDP客戶端。 服務端對客戶端上傳的報文進行確認,為此通訊雙方定義兩種數(shù)據(jù)格式:客戶端上傳的數(shù) 據(jù)格式和服務端確認的數(shù)據(jù)格式。上傳的數(shù)據(jù)格式包含:序列號、發(fā)送者IP地址、發(fā)送者 MAC地址、命令類型、命令的正文部分。其中一個上傳的UDP報文包含一個或者多個命令的 類型和命令的正文部分,命令的類型決定了正文部分的內(nèi)容,命令的類型及其正文有下面 幾種: 1.命令類型0x01,含義是加入新的鄰居;該命令的正文包括:發(fā)送者的IP地址,發(fā)送 者的MAC地址,本端的端口編號,對端的端口編號,鄰居的IP地址,鄰居的MAC地址。
[0007] 2.命令類型0x11,含義是失去鄰居連接;該命令的正文包括:發(fā)送者的IP地址, 發(fā)送者的MAC地址,本端的端口編號,對端的端口編號,鄰居的IP地址,鄰居的MAC地址。
[0008] 3.命令類型0x02,含義是新加入多播地址;該命令正文包括:發(fā)送者的IP地址, 發(fā)送者的MAC地址,多播地址的類型,多播IP地址,多播MAC地址,對應的端口向量。
[0009] 4.命令類型0x22,含義是多播地址離開;該命令正文包括:發(fā)送者的IP地址,發(fā) 送者的MAC地址,多播地址的類型,多播IP地址,多播MAC地址,對應的端口向量。
[0010] 首先服務端綁定雙方約定的公共的UDP端口,等待客戶端數(shù)據(jù)到達。服務端收到 客戶端的上傳報文后,首先發(fā)出回應報文,回應報文內(nèi)容包括上傳報文的序列號,然后解析 報文的內(nèi)容,操作公共數(shù)據(jù)結構。服務端取出報文中發(fā)送方的IP和發(fā)送方的MAC地址,據(jù) 此查詢對應的設備鏈表。如果沒有查詢到對應的設備節(jié)點,則新建一個設備節(jié)點,然后查看 命令的類型。
[0011] 如果命令類型是0x01,用命令正文中發(fā)送者設備的IP和MAC在設備鏈表中找到 對應的發(fā)送設備節(jié)點,如果可以找到對應的設備,按照命令正文中的本端的端口編號,查找 設備節(jié)點指向的端口鏈表有無對應的本端的端口編號的端口節(jié)點,如果有對應的端口節(jié)點 存在,則將端口節(jié)點的鄰居設備針指向的設備節(jié)點與命令正文中鄰居設備的IP和MAC進行 比較。如果相等,則證明該鄰居關系已經(jīng)存在,結束處理;如果鄰居設備不能匹配,則用命令 正文中鄰居設備的IP和MAC在設備鏈表中找到對應的設備節(jié)點,若找到對應的鄰居設備節(jié) 點,則修改端口節(jié)點的鄰居設備指針指向新找到的設備節(jié)點,若沒有找到鄰居設備,則創(chuàng)建 一個新的設備節(jié)點,插入到設備鏈表的末尾,然后端口節(jié)點的鄰居設備指針指向該設備;如 果沒找到對應的發(fā)送設備的本端的端口編號,則創(chuàng)建一個端口節(jié)點,插入到設備節(jié)點端口 鏈表的尾部,用命令正文中的鄰居設備的IP和MAC在設備鏈表中找對應的設備節(jié)點,如果 找到對應的鄰居設備將新創(chuàng)建的端口節(jié)點的鄰居設備指針指向找到的設備節(jié)點,如果沒有 找到鄰居設備,創(chuàng)建一個新的設備節(jié)點,插入到設備鏈表的末尾,該端口節(jié)點的鄰居設備指 針指向該設備。
[0012] 如果命令類型是ΟχΙ 1,用命令正文中發(fā)送者設備的IP和MAC在設備鏈表中找到對 應的發(fā)送設備節(jié)點,如果沒有對應的發(fā)送設備結束處理。如果有對應的發(fā)送設備,按照命令 正文中的本端的端口編號,查找設備節(jié)點指向的端口表有無對應的端口,如果沒有對應端 口結束處理;如果有對應的端口節(jié)點,將端口節(jié)點的鄰居設備指針指向的設備節(jié)點的IP和 MAC與命令正文中的鄰居設備的IP和MAC進行比較。如果比較相同,則把端口的設備指針 設為空指針;如果比較不相同,則不作處理。
[0013] 如果命令的類型是0x02,則代表有新的多播地址加入,首先查找多播地址表,如果 找到多播地址節(jié)點,則查找多播地址指向的多播設備節(jié)點,如果多播設備節(jié)點的設備指針 所指向的設備節(jié)點的IP和MAC和報文中的IP和MAC -樣,則用用命令正文中端口向量填 充該節(jié)點的端口向量,結束處理流程;如果沒有找到對應的設備節(jié)點,創(chuàng)建一個新的設備節(jié) 點,插入到設備鏈表的末尾,用命令正文中端口向量填充該節(jié)點的端口向量,多播設備節(jié)點 的設備指針所指向新建立的設備。如果沒有找到多播地址節(jié)點,則添加一個多播地址節(jié)點; 然后查找該多播地址關聯(lián)的設備節(jié)點是否存在,如果不存在則新建一個設備節(jié)點,該設備 節(jié)點放到設備鏈表的末尾,然后按照報文中的端口向量創(chuàng)建一個或多個端口節(jié)點,新創(chuàng)建 的設備鏈表節(jié)點的端口節(jié)點指針指向新創(chuàng)建的端口節(jié)點;新的多播地址節(jié)點的設備鏈表設 備指針指向新建的設備節(jié)點,用命令正文中端口向量填充該節(jié)點的端口向量,設備指針指 向創(chuàng)建的設備節(jié)點。如果找到多播地址節(jié)點,然后查找該多播地址關聯(lián)的設備節(jié)點是否存 在,如果不存在則新建一個設備鏈表節(jié)點,該設備鏈表節(jié)點放到設備鏈表的末尾,然后按照 報文中的端口向量創(chuàng)建一個或多個端口節(jié)點,新創(chuàng)建的設備鏈表節(jié)點的端口節(jié)點指針指向 新創(chuàng)建的端口節(jié)點;新的多播地址節(jié)點的設備鏈表設備指針指向新建的設備節(jié)點,用命令 正文中端口向量填充該節(jié)點的端口向量,設備指針指向創(chuàng)建的設備節(jié)點。如果存在該設備 節(jié)點,查看多播設備節(jié)點的端口向量是否相同,若果不相同則替換,相同則結束處理。如果 多播地址節(jié)點存在的同時對應的設備也存在,則查看多播設備節(jié)點的端口向量是否相同, 若果不相同則替換,相同則結束處理。
[0014] 如果命令的類型是0x22,則代表有多播地址離開,首先查找多播地址表,如果找到 多播地址節(jié)點,查找它指向的設備節(jié)點指針,然后比較設備指針指向的多播設備節(jié)點的設 備的IP地址和MAC地址與報文發(fā)送方的IP地址和MAC地址是否相等。如果相等判斷報文 中的端口向量和多播設備節(jié)點中端口向量按位進行比較,如果對應的位兩者都是1,則該多 播設備對應的端口向量的該位置〇 ;若多播設備指針指向的多播設備的ip地址和mac于報 文中不相等,比較下一個多播設備節(jié)點指針指向的下一個多播設備節(jié)點。上述服務端接收 命令的處理流程如圖3所示。
[0015] 如上所述,服務端的通訊線程負責建立并維護公共數(shù)據(jù)結構,如果通訊線程發(fā)現(xiàn) 公共數(shù)據(jù)結構有任何更改,通知服務線程開始重新繪制拓撲圖。服務端長時間運行,隨著時 間的推移,公共數(shù)據(jù)結構會有越來越多的垃圾數(shù)據(jù),為此通訊線程打開定時器,定時收集清 理公共數(shù)據(jù)結構中不需要的數(shù)據(jù)。具體的清理方法如下: 首先清理孤立的設備節(jié)點,孤立的設備節(jié)點是沒有任何鄰居設備的節(jié)點。依次掃描設 備鏈表,查看設備鏈表指向的端口鏈表指針是否是空指針,如果是空指針,表明該設備沒有 鄰居,是一個孤立的設備,則刪除該設備節(jié)點;如果端口鏈表指針非空,檢查該設備的所有 的端口節(jié)點的鄰居設備指針是否都是空指針,如果都是空指針,則可以刪除該設備的所有 端口節(jié)點,然后刪除該設備節(jié)點。其次清空無效的多播地址,無效的多播地址是指該多播地 址不在任何設備上。清除的步驟是:掃描多播地址表,查看多播地址節(jié)點的多播設備節(jié)點指 針是否為空指針,如果是空指針,刪除該多播地址節(jié)點。
[0016] 服務線程的功能之一是生成網(wǎng)絡拓撲圖,生成拓撲圖的可以采用深度優(yōu)先搜索算 法和廣度優(yōu)先搜索的算法。本算法采用深度優(yōu)先搜索,其具體步驟是: A.設置環(huán)網(wǎng)標志量為ο表明沒有出現(xiàn)環(huán)路,設備鏈表的每個節(jié)點設置為沒有搜索完成 標志; Β.尋找一個沒有搜索完成的設備,如果沒有找到該設備退出整個步驟。如果找到該設 備,把該設備的當前深度和最大深度置〇,建立當前設備當前深度路徑向量,當前深度路徑 向量,最深深度路徑向量,同時把所有設備的所有端口設置為未被訪問標志; C. 建立一個棧,棧的元素包含節(jié)點的類型,設備節(jié)點,端口節(jié)點;如果類型等于〇代表 存放的是設備,端口節(jié)點清零代表沒有意義;如果類型等于1存放的是端口,此時設備存放 的是端口所在的設備節(jié)點,端口存放端口節(jié)點數(shù)據(jù),代表當前設備節(jié)點入棧;把步驟Β找到 的未搜索完成設備節(jié)點入棧,設備節(jié)點存入當前深度路徑向量,當前深度值1 ; D. 判斷棧是否為空,如果桟為空,最近出棧的設備節(jié)點設置為搜索已完成,轉步驟Β; 如果不為空,取棧頂元素,如果棧頂元素是端口節(jié)點則轉向步驟Ε ;如果棧頂元素是設備節(jié) 點,查找該設備未被訪問過的端口節(jié)點并入棧,設置該端口為已訪問標志,同時把端口節(jié)點 指向的鄰居設備的對應的端口設置為已訪問標志;如果設備沒有找到未被訪問過的端口節(jié) 點,則出棧,當前深度減1,當前路徑深度向量移除該設備,轉向步驟D;如果找到該端口,該 端口入棧,設置該端口為已訪問標志,同時把端口節(jié)點指向的鄰居設備的對應的端口設置 為已訪問標志;如果該端口節(jié)點的鄰居設備指針存在,查看指針所指的設備節(jié)點和路徑向 量中的節(jié)點是否相同,相同轉步驟G,如果都不相同,則當前深度加1,鄰居設備存入當前深 度路徑向量,然后跳轉到鄰居設備指針指向的設備節(jié)點,鄰居設備入棧,同時移入當前深度 路徑向量;轉步驟F; Ε·如果棧頂元素是端口節(jié)點,從該棧頂元素中得到端口所在的設備,查找該設備的未 訪問的端口節(jié)點,找到該端口入棧,設置該端口為已訪問標志,同時把端口節(jié)點指向的鄰居 設備的對應的端口設置為已訪問標志,端口節(jié)點所指鄰居設備節(jié)點入棧,轉向步驟D;未訪 問的端口節(jié)點不存在,出棧,轉向步驟D ; F·當前深度加1,當前深度大于最大深度時,用當前深度更新最大深度,同時當前深度 路徑向量復制到最大深度向量,轉向步驟D ; G.如果相同,則證明出現(xiàn)環(huán)路,記錄環(huán)路上的所有節(jié)點并保存,設置環(huán)網(wǎng)標志量為1表 明出現(xiàn)環(huán)路,同時保存該環(huán)存在的節(jié)點數(shù),放棄本次深度搜索,把環(huán)路中出現(xiàn)的所有節(jié)點, 設置為已搜索完成標記,然后開始尋找下個深度優(yōu)先搜索的根節(jié)點,該節(jié)點沒有在記錄的 環(huán)路中出現(xiàn)過。轉向步驟Β; 重復上述所有步驟直到所有設備都設置了搜索完成標志,通過上述操作可以求出所有 以該設備為根節(jié)點的最大深度。如果在求最大深度過程中沒有發(fā)現(xiàn)在重復的節(jié)點,則網(wǎng)絡 結構是樹形拓撲結構。求最大深度的算法流程如圖4所示。
[0017]求出最大深度后,開始計算設備之間的距離,每個設備所占的面積,用正方形代表 設備,設備之間的距離等于畫布的總高度除以最大深度:假設該距離為D,代表設備的正方 形的邊長等于設備距離的八分之一,即邊長a=D/8。每個設備有 2個隱藏畫布,一個畫布記 錄設備的基本信息包括設備標示、IP地址、MAC地址,另一個畫布記錄設備的每個端口關聯(lián) 的多播地址。同時每 2個設備的連線的兩端有一個隱藏畫圖,記錄所連設備的端口號。 [0018]網(wǎng)絡拓撲圖有兩大類:樹形拓撲結構、環(huán)形拓撲結構。按照深度優(yōu)先搜索和廣度優(yōu) 先搜索,在搜索路徑中出現(xiàn)兩個和多個同樣的設備節(jié)點,則可以判斷是環(huán)形拓撲結構,否則 ^樹形拓撲結構,本算法求設備節(jié)點的最大深度過程中判斷網(wǎng)絡是環(huán)形還是樹形拓撲,并 采用不同的方法繪制拓撲圖。
[0019]樹形拓撲結構的繪制步驟為:檢測環(huán)網(wǎng)標志量,如果為〇,則代表是樹形結構,檢 查每個設備節(jié)點的最大深度,如果深度相同則比較設備的mac地址,mac地址小的優(yōu)先,把 它們進行降序排列,找到排列第一個設備,把它置于畫布的最上方的中央位置,然后遍歷該 設備的路徑向量,當前掃描下標的設備指向排列的開始,從下標指向的排列的第1個設備 開始,在設備的正下方的D距離,畫出下一個設備,然后畫線連接這兩個設備。按此方法畫 出此設備的最大深度路徑上的所有設備。當深度最深設備的最深路徑的所有設備連線繪制 完成以后,當前掃描下標加1,開始繪制掃描下標所指的設備最大深度的設備節(jié)點路徑:首 先判斷該設備是否在以前繪制的圖形中出現(xiàn)過,如果出現(xiàn)過則不用單獨繪制,找出該節(jié)點, 然后按照繪制第一條最深路徑的方法進行繪制。每次繪制該節(jié)點之前,首先判斷該節(jié)點是 否已經(jīng)存如果已經(jīng)存在則不用繪制,直接用直線連接即可。如果該節(jié)點未出現(xiàn)過,水平 偏移D距離,垂直偏移Η (H=(最大深度-當前節(jié)點深度)XD),繪制該節(jié)點。另外為了圖的 總體保持平衡,輪流在最深的路徑左右兩邊繪制路徑和設備,每次繪制向下方偏離D距離, 同時向左邊或右邊偏離D距離。按照此種方法直到隊列中的所有設備都繪制完成。然后再 次掃描設備鏈表,這次按照廣度優(yōu)先搜索,檢查哪些設備連線沒有繪制,如果沒有繪制則用 指向連上這兩個設備。樹形結構的繪制方法如圖5所示。
[0020] 環(huán)形拓撲圖的繪制,檢測環(huán)網(wǎng)標志量,如果為1,檢查保存的所有的環(huán)網(wǎng)節(jié)點和環(huán) 網(wǎng)中節(jié)點數(shù)數(shù)據(jù),從中找出保存的節(jié)點數(shù)最多的那個環(huán)。如果幾個環(huán)的節(jié)點數(shù)一樣,則先檢 測的優(yōu)先,把該環(huán)的節(jié)點數(shù)設置為深度H,繪制該環(huán)上的設備并連線,在畫布的中央確定一 點,以該點為圓心、畫布的1/4寬度為半徑,開始繪制圓周長上的設備。每次增加 360/H度 圓心角,繪制出環(huán)上的所有設備并直線連接。然后再依次以該環(huán)上的設備為源點,做廣度搜 索,首先查看它鄰居設備在已繪制的圖中是否出現(xiàn),如果出現(xiàn)過并且他們之間沒有連線,則 直接畫直線連接這兩個設備;如果沒有出現(xiàn)過,以環(huán)上的設備為圓心,畫布的1/8寬度為半 徑,把它的未出現(xiàn)的鄰居設備都繪制在畫布上。每次繪制增加一個固定角度的圓心角,假設 它為T=360/未出現(xiàn)過的鄰居數(shù),當把環(huán)上所有設備的鄰居都繪制完以后,再按照同樣的方 式,以這些新加入的設備為圓心開始繪制,直到所有的邊和設備都在畫布上出現(xiàn)過。
[0021]按照上述的樹形結構和環(huán)形結構的繪制方法,在繪制每個設備的同時,在隱藏圖 層的同樣位置添加該設備的IP地址、MAC地址、描述信息、設備連線兩邊的端口信息。在所 有設備及設備之間的連線繪制完成后,掃描多播地址表,將多播地址添加到多播地址關聯(lián) 設備的隱藏畫布上,同時也添加該多播地址對應設備的端口向量。
[0022]服務端的服務線程負責用戶接口部分,它具有顯示并隱藏圖層、查詢設備信息、查 詢多播地址信息、查詢多播路徑等各種功能。用戶查詢特定設備的多播地址,只需要把設備 隱藏的多播地址畫布重新顯示出來。用戶要想查詢特定的多播地址是否在當前網(wǎng)絡中存 在,首先需查詢該地址是否存在于多播地址表中,如果在多播地址表中不存在,返回查詢失 敗信息;如果存在,則查詢多播地址指向的多播設備指針鏈表,然后在畫布上把指針所指向 的這些相關設備加亮顯示,連線也加粗顯示。藉此可以查看當前網(wǎng)絡中的任何一個多播地 址在網(wǎng)絡中的分布情況。
[0023] 客戶端負責上傳信息給服務端,客戶端需要知道服務端的IP地址和端口號,一般 端口號保持不變,但是有時網(wǎng)絡管理員會更改服務端的ip設置,或者管理員把服務端從一 臺電腦遷移到另一臺電腦,此時在常規(guī)情況下所有的客戶端都需要重新配置。本發(fā)明提出 以下的方案解決該問題:服務端運行過程中,周期性的對外廣播自己的IP地址,客戶端在 剛開始運行中首先采用以前保存的IP來探測服務端是否正常,如果超時沒有收到服務端 的響應信息,開始接收服務端的廣播信息,從接收的廣播信息的內(nèi)容中得到新的服務端的 IP地址,然后用新的IP地址和服務端通訊,并保存該IP地址,到下次運行時使用該地址。
[0024] 客戶端需要上傳鄰居信息和多播地址信息,客戶端進程和LLDP協(xié)議進程,GMRP協(xié) 議進程,IGMP協(xié)議進程進行同步協(xié)作。同步協(xié)作的方式有管道、消息隊列、共享內(nèi)存、網(wǎng)絡 套接字等幾種類型。在本算法中采用消息隊列,這里消息類型和服務端處理的命令的類型 是完全一樣的,消息類型的編號和含義如下: 1.消息類型0x01,發(fā)現(xiàn)新的鄰居。
[0025] 2.消息類型0x02,以前的鄰居失去聯(lián)系。
[0026] 3.消息類型0x11,發(fā)現(xiàn)新的多播地址。
[0027] 4.消息類型0x12,多播地址離開一個端口。
[0028]客戶端進程需要和LLDP協(xié)議進程協(xié)作得到鄰居信息,兩個進程之間采用消息隊 列進行數(shù)據(jù)傳送和同步。LLDP協(xié)議發(fā)現(xiàn)一個新的鄰居后,設置消息類型0x01,將發(fā)送者的 IP地址、發(fā)送者的MAC地址、鄰居的IP地址、MAC地址及對應的端口號等這些信息,通過消 息隊列發(fā)給客戶端進程??蛻舳诉M程在消息隊列中收到該信息后,組裝成UDP報文發(fā)給服 務端。LLDP協(xié)議發(fā)現(xiàn)鄰居失去聯(lián)系后,設置消息類型〇χ〇2,將發(fā)送者的ip地址、發(fā)送者的 MAC地址、鄰居的IP地址、MAC地址及對應的端口號這些信息,通過消息隊列發(fā)給客戶端進 程,客戶端進程在隊列中收到該信息后,組裝成UDP報文發(fā)給服務端。
[0029]客戶纟而進程需要和GMRP協(xié)議或者IGMP協(xié)議進程協(xié)作得到多播地址信息,當GMRP 協(xié)議或者IGMP協(xié)議進程收到加入報文注冊多播地址時,設置消息類型0xll,將發(fā)送者的ιρ 地址、發(fā)送者的MAC地址、多播地址類型、多播地址、對應的端口向量,寫到消息隊列中,當 GMRP協(xié)議或者IGMP協(xié)議進程收到離開報文注銷多播地址時或者多播地址超時被清楚時, 設置消息類型Ox 12,把發(fā)送者的IP地址、發(fā)送者的MC地址、多播地址類型、多播地址、對應 的端口向量、寫到消息隊列中。客戶端進程在隊列中收到該信息后,組裝成脈報文發(fā)給月艮 務端。服務端和客戶端的進程間的協(xié)作關系如圖5所示。
[0030]
【專利附圖】
【附圖說明】 圖1通訊線程和服務線程的同步關系 圖2公共數(shù)據(jù)結構之間關系圖 圖3服務端處理命令的流程 圖4以設備節(jié)點為根求最大深度的算法流程 圖5樹形結構的繪制方法 圖6環(huán)形結構的繪制方法 圖7服務端和客戶端的進程間的協(xié)作關系
【具體實施方式】
[0031]首先選擇一臺高性能的服務器作為服務端,它具有并行處理大量網(wǎng)絡數(shù)據(jù)的能力 同時具有良好的人機界面,運行服務端進程。服務端的通訊線程周期性對外發(fā)布自己的ip 地址,接收客戶端的上傳信息,建立公共數(shù)據(jù)結構。如果公共數(shù)據(jù)結構有變動,發(fā)信號通知 服務線程刷新拓撲圖。服務端周期性清理無效的設備、無效的設備鄰居關系、當前無用的多 播地址,在此過程中若發(fā)現(xiàn)數(shù)據(jù)結構被清除,則發(fā)信號通知服務線程刷新拓撲圖。服務端 的服務線程等待接收信號,收到信號后,掃描公共數(shù)據(jù)結構,生成新的拓撲圖。服務線程在 生成拓撲圖后,根據(jù)公共數(shù)據(jù)結構中多播地址表信息,在隱藏圖層上填充每個設備的多播 地址信息,同時它接收用戶的查詢請求,收到查詢請求后,查詢公共數(shù)據(jù)機構和生成的拓撲 圖,然后打開隱藏圖層的內(nèi)容展現(xiàn)給用戶。當用戶查詢特定設備的多播地址時,只需把該設 備隱藏填充的多播地址信息畫布顯示出來。當用戶查詢特定多播地址的分布時,首先查詢 特定多播地址表中是否存在,如果在多播地址表中不存在,返回查詢失敗信息;如果該多播 地址存在,查詢多播地址指向的設備指針鏈表,然后在畫布上把指針所指向的這些相關設 備加點、加亮顯示,連線也加粗顯示。藉此可以查看當前網(wǎng)絡中的任何一個多播地址在網(wǎng)絡 中的分布情況。
[0032] 客戶端包含支持LLDP協(xié)議,GMRP協(xié)議,IGMP協(xié)議的設備,一般情況包括智能交換 機,路由器,智能電子設備??蛻舳诵枰薷腖LDP協(xié)議,GMRP協(xié)議,IGMP協(xié)議,打開各自的 消息隊列,這些隊列連接到客戶端進程,需要將這些協(xié)議的源代碼進行修改,在GMRP協(xié)議, IGMP協(xié)議發(fā)現(xiàn)需要注冊和注銷特定多播地址時,將這些信息都過消息隊列發(fā)給客戶進程進 行處理。在LLDP協(xié)議發(fā)現(xiàn)新的鄰居設備或者有鄰居設備失去聯(lián)系時,將這些信息都過消息 隊列發(fā)給客戶進程進行處理??蛻舳诉M程在收到這些消息后,通過UDP報文發(fā)給服務端進 行處理。
[0033]以上所述內(nèi)容,只是本發(fā)明的一個具體的實例,并不僅用于限定本發(fā)明的保護范 圍。凡在本發(fā)明的原創(chuàng)范圍以內(nèi)的任何修改,等價替換,改進和任何參數(shù)調整,都應包含在 本發(fā)明的保護范圍之中。
【權利要求】
1. 顯示和分析多播分布的拓撲圖算法,采用客戶端/服務端架構實時顯示網(wǎng)絡中的 鄰居拓撲圖,同時反映網(wǎng)絡中的多播分布情況,其特征是:服務器和客戶端上分別執(zhí)行下述 步驟: 服務端是一臺并行處理大量網(wǎng)絡數(shù)據(jù)并具有良好人機界面的服務器,包括并行執(zhí)行的 兩個線程:通訊線程和服務線程,通訊線程;它們的運行步驟如下: A通訊線程接收客戶端發(fā)來的鄰居信息報文和多播地址信息報文; B通訊線程根據(jù)接收的鄰居信息和多播地址信息建立公共數(shù)據(jù)結構,該數(shù)據(jù)結構包含 設備信息,端口鄰居信息,多播地址信息; C通訊線程在建立公共數(shù)據(jù)結構后通知服務線程; D服務線程收到通知,掃描公共數(shù)據(jù)結構的信息,繪制拓撲圖,同時在隱藏圖層添加關 于設備的多播地址信息; E服務實時顯示網(wǎng)絡拓撲圖并等待用戶的查詢和顯示請求,按照請求顯示多播地址信 息; 客戶端由支持LLDP協(xié)議,GMRP協(xié)議,IGMP協(xié)議的設備組成,運行步驟如下: A客戶端通過LLDP協(xié)議進程、GMRP協(xié)議進程、IGMP協(xié)議進程同步收集鄰居信息和多播 地址伯息; B收集到的消息傳給客戶進程; C客戶進程把消息上傳給服務端。
2. 根據(jù)權利要求1所示的顯示和分析多播分布的拓撲圖算法,公共數(shù)據(jù)結構包括設備 鏈表,多播地址鏈表;設備鏈表由設備節(jié)點組成,設備節(jié)點包含指向端口節(jié)點的指針,指向 下一個設備節(jié)點的指針,設備的IP地址,設備的mac地址;端口節(jié)點包含本端的端口編號, 對端的口編號,指向它的鄰居設備的設備節(jié)點指針,指向屬于同一個設備的下-t端口 節(jié)點的指針;多播設備節(jié)點包括指向設備節(jié)點的指針、該多播地址使用的設備端口向量,指 向下一個多播設備節(jié)點的指針;在設備,端口,多播地址之間通過設備鏈表,多播地址表和 端口之間建立關聯(lián);其特征是:公共數(shù)據(jù)結構的建立步驟如下: A服務端收到客戶端上傳的鄰居信息,鄰居信息包括發(fā)送者信息,端口消息,端口的鄰 居信息;判斷客戶端發(fā)送者在設備鏈表是否存在,如果不存在,執(zhí)行步驟B ;如果存在執(zhí)行 步驟C ; B創(chuàng)建一個設備節(jié)點,同時創(chuàng)建一個端口節(jié)點,設備節(jié)點中的端口指針指向該端口節(jié) 點; C判斷端口節(jié)點是否存在,如果不存在創(chuàng)建一個端口節(jié)點,設備節(jié)點中端口指針指向該 端口節(jié)點;判斷它的鄰居設備在設備鏈表中是否存在,如果存在,端口節(jié)點的鄰居設備指向 該設備節(jié)點;如果不存在執(zhí)行步驟D ; D創(chuàng)建一個設備節(jié)點,端口節(jié)點的鄰居設備指針指向該設備; E服務端收到客戶端上傳的多播地址信息,多播地址信息包含發(fā)送者信息和多播地址 信息,首先判斷該多播地址是否存在,如果不存在則創(chuàng)建一個多播地址節(jié)點; F判斷多播地址信息中的關于發(fā)送者設備是否存在;如果不存在則創(chuàng)建該設備節(jié)點; G判斷多播地址節(jié)點指向的多播設備節(jié)點中是否存在,如果不存在,創(chuàng)建該多播設備節(jié) 點,計算端口向量,并把多播設備節(jié)點的設備指針指向設備節(jié)點。
3. 根據(jù)權利要求1和2所示的顯示和分析多播分布的拓撲圖算法,服務端的服務線 程負責繪制拓撲圖,設備進行深度優(yōu)先搜索得到最長路徑,在深度搜索過程中,如果出現(xiàn)環(huán) 路,設置環(huán)網(wǎng)標志量,記錄環(huán)路中各個節(jié)點和環(huán)路節(jié)點的總數(shù):其特征是:求設備最大深度 路徑的步驟是: Α設置環(huán)網(wǎng)標志量為〇表明沒有出現(xiàn)環(huán)路,設備鏈表的每個節(jié)點設置為沒有搜索完成 標志; B尋找一個沒有搜索完成的設備,如果沒有找到該設備退出整個步驟,如果找到該設 備,把該設備的當前深度和最大深度置〇,建立當前設備當前深度路徑向量,當前深度路徑 向量,最深深度路徑向量,同時把所有設備的所有端口設置為未被訪問標志; C建立一個棧,棧的元素包含節(jié)點的類型,設備節(jié)點,端口節(jié)點;如果類型等于〇代表存 放的是設備,端口節(jié)點清零代表沒有意義;如果類型等于1存放的是端口,此時設備存放的 是端口所在的設備節(jié)點,端口存放端口節(jié)點數(shù)據(jù),代表當前設備節(jié)點入棧;把步驟Β找到的 未搜索完成設備節(jié)點入棧,設備節(jié)點存入當前深度路徑向量,當前深度值加1 ; D判斷棧是否為空,如果棧為空,最近出棧的設備節(jié)點設置為搜索已完成,轉步驟Β; 如果不為空,取棧頂元素,如果棧頂元素是端口節(jié)點則轉向步驟Ε ;如果棧頂元素是設備節(jié) 點,查找該設備未被訪問過的端口節(jié)點并入棧,設置該端口為已訪問標志,同時把端口節(jié)點 指向的鄰居設備的對應的端口設置為已訪問標志;如果設備沒有找到未被訪問過的端口節(jié) 點,則出棧,當前深度減1,當前路徑深度向量移除該設備,轉向步驟D;如果找到該端口,該 端口入棧,設置該端口為已訪問標志,同時把端口節(jié)點指向的鄰居設備的對應的端口設置 為已訪問標志;如果該端口節(jié)點的鄰居設備指針存在,查看指針所指的設備節(jié)點和路徑向 量中的節(jié)點是否相同,相同轉步驟G,如果都不相同,則當前深度加1,鄰居設備存入當前深 度路徑向量,然后跳轉到鄰居設備指針指向的設備節(jié)點,鄰居設備入棧,同時移入當前深度 路徑向量;轉步驟F ; Ε如果棧頂元素是端口節(jié)點,從該棧頂元素中得到端口所在的設備,查找該設備的未訪 問的端口節(jié)點,找到該端口入棧,設置該端口為已訪問標志,同時把端口節(jié)點指向的鄰居設 備的對應的端口設置為已訪問標志,端口節(jié)點所指鄰居設備節(jié)點入棧,轉向步驟 D ;未訪問 的端口節(jié)點不存在,出棧,轉向步驟D ; F當前深度加1,當前深度大于最大深度時,用當前深度更新最大深度,同時當前深度 路徑向量復制到最大深度向量,轉向步驟D ; G如果相同,則證明出現(xiàn)環(huán)路,記錄環(huán)路上的所有節(jié)點并保存,設置環(huán)網(wǎng)標志量為!表 明出現(xiàn)環(huán)路,同時保存該環(huán)存在的節(jié)點數(shù),放棄本次深度搜索,把環(huán)路中出現(xiàn)的所有節(jié)點, 設置為已搜索完成標記,然后開始尋找下個深度優(yōu)先搜索的根節(jié)點,該節(jié)點沒有在記錄的 環(huán)路中出現(xiàn)過,轉向步驟B。
4. 根據(jù)權利要求1和3所示的顯示和分析多播分布的拓撲圖算法,其特征是:如果深 度優(yōu)先搜索中沒有出現(xiàn)環(huán)路,將所有設備的深度優(yōu)先搜索得到的最長路徑降序排列,排列 根據(jù)路徑的深度和設備的mac地址進行比較,深度達優(yōu)先,深度一樣,mac地址小的優(yōu)先;然 后先繪制最長深度的設備及連線,再繪制次長深度的設備及連線,如果以前的設備繪制過, 則不用繪制直接連接;重復這些操作直到所有的設備和連線都繪制完成。
5. 根據(jù)權利要求1和3所示的顯示和分析多播分布的拓撲圖算法,其特征是:如果深 度優(yōu)先搜索中出現(xiàn)環(huán)路,則首先求出環(huán)路中節(jié)點數(shù)最多的環(huán),然后以畫布的中間為邏輯圓 心,以一定的長度為半徑,每次遞增一個固定的圓心角,在圓周上依次把最長環(huán)路徑上的設 備繪制出來,并直線連接該設備;然后以這些設備為圓心,同時對這些設備進行廣度搜索, 把搜索到的設備依次繪制在圓周上,并直線連接;重復這些操作直到所有的設備和鄰居關 系都被繪制出來。
6.根據(jù)權利要求1所示的顯示和分析多播分布的拓撲圖算法,其特征是:在繪制完拓 撲圖后,掃描多播地址表,得到指向多播地址關聯(lián)的設備,在設備的隱藏圖層中添加該多播 地址。
7·根據(jù)權利要求1所示的顯示和分析多播分布的拓撲圖算法,其特征是:用戶要想查 詢特定的多播地址是否在當前網(wǎng)絡中存在,首先需查詢該地址是否存在于多播地址表中, 如果在多播地址表中不存在,返回查詢失敗信息;如果存在,則查詢多播地址指向的設備指 針鏈表,然后在畫布上把指針所指向的這些相關設備加亮顯示,連線也加粗顯示,藉此可以 查看當前網(wǎng)絡中的任何一個多播地址在網(wǎng)絡中的分布情況。
8.根據(jù)權利要求1所示的顯示和分析多播分布的拓撲圖算法,其特征是:客戶端進程 需要和LLDP協(xié)議進程、GMRP協(xié)議進程、IGMP協(xié)議進程進行同步來收集鄰居信息和多播地址 信息,上述各進程可以通過管道、消息隊列、共享內(nèi)存、套接字等方式進行數(shù)據(jù)傳送和同步; 當LLDP協(xié)議進程發(fā)現(xiàn)鄰居有變動時,把變動的消息發(fā)給客戶進程進行處理;當 GMRP協(xié)議進 程和IGMP協(xié)議進程發(fā)現(xiàn)多播地址發(fā)生注冊或注銷時,把變動的消息發(fā)給客戶進程進行處 理,客戶端收到消息后進行處理并通過UDP協(xié)議發(fā)給服務端處理。
【文檔編號】H04L12/28GK104219113SQ201410250288
【公開日】2014年12月17日 申請日期:2014年6月9日 優(yōu)先權日:2014年6月9日
【發(fā)明者】周厚明, 崔磊 申請人:武漢邁威實達軟件有限公司