第38卷第2期
vol-38
No.2
文章■号t
计算机工程
2012年1月
JaIluary2012
文■耘讽码;A
中田分类号t11’393
Co唧u时Enginee咖g
・网络与通信・
1伽0_删(加12)o:}__0103——∞
措糟‘,王勇。,■奠玲‘
一种基于SNMP的链路层拓扑发现算法
(桂林电子科技大学&计算机科学与工程学院;bcsIP广西分中心;c信息与通信学院,广西桂林541004)
■蔓:为提高链路层网络拓扑发现效率,提出一种基于简单网络管理协议的拓扑发现算法。将交换机间的连接网络用树形结构表示,自
顶向下连层确定每个交换机的连接关系。通过修改连接关系的判定条件,并结合线程池和哈希查找技术,提高拓扑发现的效率。实验结果表明,该算法能快速准确地获得完整的哺}备:陌扑结构。
美t■:链路层;拓扑发现;简单网络管理协议;地址转发表;线程池;哈希查找
LinkLayer’ropolOgyDiscOVeryAlgOrithm
Based仰SiInpIeNetworkManagement
E^NN锄’w^NGY0Ⅱ矿,1AoⅪao-曲gc
(acollegeofcomputers石encc
ProtocoI
alldEngi【l∞血g:b
csmG啪g鲥c朋竹;c.couegcofIllf0呻a6∞andcbmm帅icati蚰,
adiscovery柚g耐thmforllllkl8yerof
connecdon
Guilinunive阽i【y
lAbs打actl
topology
InordertoimpfdvcⅡle
on
ofElec帅nic慨hnoIo阱Guilm望l004,c晡na)
desc—bingⅡ"c∞n∞donsbetw∞ns“忙h船孵aⅡ优.the
iropmvingthcc∞dinonsof
networkto刚09y
forev6Iy
based
simpleNetworl【M蛐age“∞nt
P㈣l(sNMP)By
lay盯accordjⅡg
djscov。叫emciencyofliIlkl8yer,吐115p8pe‘Pmpo∞s
划ab叩sllipof
eachswi【chis
esm蜥slled
t0畸埘ownm孤ncLBy
tllc咖n。ction妇w∞n
indicalcStb砒山e
t}Ⅱ训pool删hasllsearchtohpmve山eeffick“cy0ft叩olo盱discoVeryExp舐mental他sult
algo^岫c柚djscoverljIII【layertopolo鲥rapidlyandcomple世l弘andth6p吣sibknet’voIkel锄enbc扑bedlscoVercd
swikhes,combinedwitIItlle
IKeywordsl
search
link
layer;to阿ogydjscovery:sjmple№tworkM蛐gem朗t
Protocol(sNMP】:AddIcssFonvardingTable(AFD:tlIrc们pool:llash
DOI:10396叫issnl000—3428201202033
l捱述
链路层拓扑发现是确定子网内部网络设备之间的连接关系,其中最主要的是确定交换机之间的连接关系。目前,基于简单网络管理协议(simpIe
NetworkMan89ement
Protocol,
径。直接连接实际上是间接连接的特殊形式。例如在图l中,switchl和switch2属于直接连接关系,switchl与switch4则是间接连接关系。
sNMP)的网络拓扑发现算法在国内外得到了广泛的研究”41。文献【4—5J提出了基于地址转发表(AddressFonⅣarding1曲le,AFT)的物理拓扑发现算法,但该算法要求所有交换机的地址转发表是完整的。文献【6】在此基础上提出了改进算法,充分利用不完整的AFT信息判断网络设备的连接关系,并能发现可能存在的“哑设备”,但该算法运算量较大。文献【7】通过将交换机端口分为上行端口和下行端口,降低了对AFT的要求,并提出了一条判定上行端口和下行端口直连的引理。本文在上述研究工作的基础上。提出一种新的链路层网络拓扑发现算法,通过改进交换机连接关系的判定条件,并借助于线程池和哈希查找等技术,提高拓扑发现的效率。
2拓扑发现算法理论基稿
本文将子网中连接在一台路由器下的所有交换机的连接结构看作一棵“树”,设与路由器直接相连的交换机为树的第1层节点,与第1层交换机直接连接的交换机为第2层节点,以此类推,将交换机的连接结构划分为多个层,每个层有若干个节点。每个交换机节点又会连接一个或多个主机。这种结构方式清楚地反映了网络的拓扑结构。图1是一种常见的阿络拓扑结构。在交换机的结构树中,连接关系包括直接连接和问接连接。直接连接是指处于相邻位置的交换机相连接;而间接连接是指2个交换机之间存在着一条连接路
基盒疆目:国家自然科学基金资助项目(6嘴72022);广西研究生创新
基金资助项日(2010105950812M21)
圈l膏且曲阿掌精扦结糟
作者骱:潘楠(1985一),男,硕士研究生,主研方向:网络安全;
王勇.教授;陶晓玲,工程师
姻日囊:加11-05—19
E・mail:pn8527@yall00comcn
万方数据
104
计算机工程
2012年1月20日
2.1基本概念
定义l标志节点即出口路由器。
定义2品表示第f台交换机S的第J个端口。
定义3如表示品包含的MAc地址的集合;^表示交
换机墨的所有下行端口包含的MAC地址的集合。
定义4若交换机S的4中包含除S本身以外的所有其他交换机的MAc地址,则该交换机为根交换机。
定义5交换机端口所对应的地址转发表中出现标志节点MAC地址的端口为上行端口,否则,为下行端口。
定义6交换机墨的A中未出现其他交换机MAc地址的端口为叶端口,否则,为非叶端口。2.2相关定理
定理l若交换机墨的A中包含交换机&的MAC地址
墨一心c和A,则可确定品与品有连接关系。
证明:因为交换机置的A中包含S一胍c和A,说明
从毛出发必存在一条路径可以到达足,所以&与&有连接关系(直接相连或间接相连)。
定理2当&与&之间存在连接关系时。若A中MAc
地址的个数(IAI)等于A中MAc地址个数(IAI)加1,即
l如|.IA|+l,则毛与&直接连接。
证明:采用反证法证明。假设定理2不成立,即在品与
&之间存在连接关系且I气l=IAI+l时,%与&为间接连接。由此可知,A中除了包含瓯一枷c和A之外,还包含
其他交换机的MAc地址,因此,有l气l>IAI+l,与假设矛
盾,定理2得证。
定理3如果交换机墨的叶端口品的A中仅包含一台主机的MAC地址,那么该主机与交换机的品端口直接相连,若包含多台主机的MAc地址,则这些主机通过Hub与交换机的岛端口相连。
定理4如果交换机S的叶端口毛的如中仅包含路由器足的MAC地址,那么尺与交换机置的品端口直接相连。
3改进的链路层拓扑发现算法
根据链路层网络的拓扑结构,将拓扑发现分为以下3个步骤:
(1)获得活动设备集合
由子网对应的出口路由器的IP地址和子网掩码可确定子网的IP探测范围,向该范围内的每一个IP地址发送IcMP回显请求报文,根据是否返回IcMP回显响应报文判断设备的活动状态。
(2)确定设备类型
向每个活动设备的指定端口16l号发送sNMP报文,若有回应,则确定是交换机,否则,认为是主机。
(3)确定设备之间的连接关系
网络中主要存在的连接关系包括交换机与交换机的连接、交换机与主机的连接以及交换机与出口路由器的连接。根据定理l~定理4可分别判断以上连接关系,最终得到完整的网络拓扑结构。
在发现设备之间连接关系的操作中,确定交换机与交换机之间的连接关系最复杂也最耗时。传统的确定交换机与交换机之间连接关系的算法如下:
万方数据
f0“每个交换机Sj){
for(交换机si的第j个靖口){i“s;已经与别的交换机端口相连)
continue:
el∞{
i“Aii-AkUSLMAC)
s日与sk的上行端口直接相连;Jl}
对于上述算法中的判定条件A=AU&一心c,需要将A与网络中所有的AU瓯一胍c(七≠f)进行判断操作,而A
的计算量很大,导致发现效率不高,根据定理l和定理2,
可对上述判定条件作出修改,修改后的拓扑发现算法如下:
for(每个交换机si){
for(交换机S。的第j个靖口)li“S;已经与别的交换机端口相连)
continue:
elseI
i“Ab中能查找到sLMAC)li“Ai,中能查找到AkJ{
i“IAbI-IAk|+1)
sn与sk的上行端口直接相连;
}l}Jl
上述算法相对于传统算法的优势在于:通过修改交换机与交换机连接关系的判定条件,减少了A的计算量,缩短了确定连接关系的时间,提高了发现效率。
算法的关键技术包括:
(1)采用线程池技术提高发现效率
本文采用线程池的方式实现算法的前2步。与一般的多线程技术相比,线程池适用于单个任务处理时间较短、所需处理任务数量较多的情况,可减少频繁创建和销毁线程花费的时间,节省系统资源开销。采用线程池获得活动设备集合的核心代码如下:
ExecutorService
pool_Executors.newScheduledThreadPool(50);
AmyList<Futurc<String>>futurcList=
new
ArfayList<Fun盯e<String>>();
fof(in“=o;i<ipSp∞eList.sizc();i++){
futureList.add(p001.submit(new
PingActiVeDeViceCallable(ipspaceList.get(i)))):J
for(Future<String>fs:futurcList)f
try
f
i“fs名et()f-null)
actjVeDeViceList.add(fs.gct().t0SⅢng());
}catch(Inte唧ptedExceptione)f
e.printStackTrace():
}catch《ExecutionExceptio曲e)fe.printStackTrace();}}
p001.shutdown():
(2)采用哈希查找提高发现效率
在交换机连接关系的判断中,判断交换机端口的MAc地址集合中是否包含某一给定MAc这一操作的频率很高,但此操作一般需要通过遍历匹配实现,计算量非常大,尤其是在网络中交换机数目较多时,效率很低。因此,本文引入哈希表,将A存为哈希表,采用哈希查找的方式确定MAc
第38卷第2期潘楠,王勇,陶晓玲:一种基于sNMP的链路层拓扑发现算法
换机相连。
地址的包含关系,判断交换机之间是否连接。其中,哈希函致采用折叠法加除留余教法构造:首先把MAc地址分为6段,把每一段转换为十进制致后再顺叠相加,通过对相加的结果与Pp为一个素数,且小于或等于哈希表的大小)进行模运算得到哈希地址。此方法计算简单,得出的哈希地址可使MAc地址比较均匀地分布在哈希表中,从而减少查找的次数。当然。任何哈希函数的选择都有可能出现冲突,本文选择拉链法处理冲突。
4棱心算扶实现
通过采用线程池技术可快速得到网络中的交换机集合
州f圮^和主机集合^吲;确定swIr曲中的根交换机,并没置
第l层标识kvP仁1,下一层标识n“fkvef_拓坩“1。在此基础上判定交换机与交换机、主机、路由器的连接关系,从根交换机开始逐层向下判断,类似于广度优先搜索算法,直到所有交换机都已判断,算法结束。基本流程如下:
(1)对交换机S。从jwffc^中将其删除。
(2)对墨的一个恬动端口S,,将^f存为哈希表^ns柚kc;根据定义判断乳的类型,若为上行端口,执行步骤(3);若为下行端口,执行步骤(4)。
(3)判断^d曲^如c中MAc个数是否为1,若是,则根据定理4确定晶与路由器相连;若不是,说明&为只的上行
端口。
圈2阿皤拓}}置理鳍秉
实验网络是一个c类子网,而对于c类子网,最大存在的主机数为254台,采用本文算法创建一个大小为50的线程池对象,进行全网活动设备的探谢仅需要约7.2s,若采用单线程方式,则需要约123s;对于确定交换机之问的连接关系这一操作,若采用改进前的算法耗时约3.9s,而采用本文的发现算法仅需要约1.2s,可见,本文算法的效率更高。
(4)根据定义6判断S,若其为叶端口,判断^Ⅱ曲肼们中MAc个数是否为l,若是,则根据定理3确定S,与一台主机相连;若不是,则由定理3确定量.通过Hub与多台主机相连;否则,执行步骤(5)。
(5)从5wf,曲中取出交换机置。在妇j柚缸c中查找只一^Mc,若能查到,再在^djM忆c中查找A,若能查到,则根据定理1确定品与&之间存在连接关系;然后判断^d曲M们中MAc个数是否等于^的MAc个数再加l,若相等,则根据定理2确定S.与以的上行端口&直接相连,将邑一朋Hc存入第n“rjPv“层交换机的集合中;如果查不到,则判定swilc^中是否还有未判断的交换机,若有,重复此步骤,若无,执行步骤(6)。
(6】若置还有未确定的端口,返回步骤(2);否则,判断第kpPj层交换机的集合是否非空,若是,取未处理的交换机,并从集合中删除,返回步骤(1);否则,执行步骤(7)。
(7)拓坩f-^“fkv“。判断第kw,层交换机的集合是否非
6结束语
链路层的拓扑能真实地反映子网内部各个设备之问的连接情况。本文为快速实现链路层拓扑昀快速发现,提出了一种新的基于sNMP的拓扑发现算法,该算法通过修改交换机连接关系的判定条件,并采用线程池和哈希查找等技术,提高了拓扑发现的效率。同时能处理网络中存在的Hub。本文提出的算法能较好地解决单子网的拓扑发现问题,但无法发现存在vLAN的拓扑结构,这将是下一步的研究方向。
参考文簟
【l】邓泽林.傅明.刘翌南一种新的异构网络链路层拓扑发现
算法I耵计算机工程,20lo’3q2):119-120.
【2J孔令文,谭景倍数据链路层同络拓扑发现算珐研究唧.计算
机工程与设计,2∞8.29(19):494I—49“
空,若是,n删kvPf加l,取未处理的交换机,并从该层交
换机集台中删除,返回步骤(1);否则,算法结束。
f3】孙娟基于地址过滤的网络拓扑发现算法【刀计算机工程,
【4】B嘣tbarcYG帅脚akisM.Ma币nc,ct胡.伽Io科Diocovcfyin
H啪哪聊删sIPNetworl【s【C】胛眦.of山e19tllA肌u甜JointC0nf廿即ceofmc皿EC伽Du竹卸dcom删11i∞d0IlsSoci甜es
【S.1.】:IEEEPIess.2000:265—274.
2010,36(7):96.98.
5测试结果与分析
5.1实验环曩
在搭建的实验环境中,有I台路由器、3台交换机、1台Hub和5台主机。在测试本文的算法前,需要确保3台交换机开启sNMP协议。
5.2实验结果分析
采用本文的改进算法对实验嘲络进行发现,结果如图2所示。图2的左侧以树形结构显示了发现网络中的所有交换机和主机的IP地址;右下方显示了设备的详细信息;右上方显示了子网拓扑图。借助于不同的网络设备图标,可以直观地反映设备类型。当鼠标移至网络设备或链路时,会显示出相应信息,方便查看。图中虚线表示多台主机通过Hub与交
【5】
Bn州蛆n
Y.G帅falakis
M,J缸B,ct胡.T‘,pologyDiscovoryjn
He懈Dg曲eous口Netwo【I(8:neN眦Inv即砌了Sys把m【J】ⅢE日
ACM
Tr删d∞s叩№tworI(in盘2004,12(3):加1414.
D
of
【6】Low出帅pB,0’Hml啪nR,G瞄sTRT0叫ogyDisc0VeIyfor
sIGc0Ⅳ蹦’0lsn
Dicgo.
La噼E山mctN眈worI(s【q腑oc
uSA:Isn】.2001:237-248
【7】郑海,张国清物理罔络拓扑发现算法的研究【J】计算机研
究与发展,2002,39(3):264・268
编辑张帆
万方数据
一种基于SNMP的链路层拓扑发现算法
作者:作者单位:
潘楠, 王勇, 陶晓玲, PAN Nan, WANG Yong, TAO Xiao-ling
潘楠,PAN Nan(桂林电子科技大学计算机科学与工程学院,广西桂林,541004), 王勇,WANG Yong(桂林电子科技大学CSIP广西分中心,广西桂林,541004), 陶晓玲,TAO Xiao-ling(桂林电子科技大学信息与通信学院,广西桂林,541004)计算机工程
Computer Engineering2012,38(2)
刊名:英文刊名:年,卷(期):
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjgc201202033.aspx
第38卷第2期
vol-38
No.2
文章■号t
计算机工程
2012年1月
JaIluary2012
文■耘讽码;A
中田分类号t11’393
Co唧u时Enginee咖g
・网络与通信・
1伽0_删(加12)o:}__0103——∞
措糟‘,王勇。,■奠玲‘
一种基于SNMP的链路层拓扑发现算法
(桂林电子科技大学&计算机科学与工程学院;bcsIP广西分中心;c信息与通信学院,广西桂林541004)
■蔓:为提高链路层网络拓扑发现效率,提出一种基于简单网络管理协议的拓扑发现算法。将交换机间的连接网络用树形结构表示,自
顶向下连层确定每个交换机的连接关系。通过修改连接关系的判定条件,并结合线程池和哈希查找技术,提高拓扑发现的效率。实验结果表明,该算法能快速准确地获得完整的哺}备:陌扑结构。
美t■:链路层;拓扑发现;简单网络管理协议;地址转发表;线程池;哈希查找
LinkLayer’ropolOgyDiscOVeryAlgOrithm
Based仰SiInpIeNetworkManagement
E^NN锄’w^NGY0Ⅱ矿,1AoⅪao-曲gc
(acollegeofcomputers石encc
ProtocoI
alldEngi【l∞血g:b
csmG啪g鲥c朋竹;c.couegcofIllf0呻a6∞andcbmm帅icati蚰,
adiscovery柚g耐thmforllllkl8yerof
connecdon
Guilinunive阽i【y
lAbs打actl
topology
InordertoimpfdvcⅡle
on
ofElec帅nic慨hnoIo阱Guilm望l004,c晡na)
desc—bingⅡ"c∞n∞donsbetw∞ns“忙h船孵aⅡ优.the
iropmvingthcc∞dinonsof
networkto刚09y
forev6Iy
based
simpleNetworl【M蛐age“∞nt
P㈣l(sNMP)By
lay盯accordjⅡg
djscov。叫emciencyofliIlkl8yer,吐115p8pe‘Pmpo∞s
划ab叩sllipof
eachswi【chis
esm蜥slled
t0畸埘ownm孤ncLBy
tllc咖n。ction妇w∞n
indicalcStb砒山e
t}Ⅱ训pool删hasllsearchtohpmve山eeffick“cy0ft叩olo盱discoVeryExp舐mental他sult
algo^岫c柚djscoverljIII【layertopolo鲥rapidlyandcomple世l弘andth6p吣sibknet’voIkel锄enbc扑bedlscoVercd
swikhes,combinedwitIItlle
IKeywordsl
search
link
layer;to阿ogydjscovery:sjmple№tworkM蛐gem朗t
Protocol(sNMP】:AddIcssFonvardingTable(AFD:tlIrc们pool:llash
DOI:10396叫issnl000—3428201202033
l捱述
链路层拓扑发现是确定子网内部网络设备之间的连接关系,其中最主要的是确定交换机之间的连接关系。目前,基于简单网络管理协议(simpIe
NetworkMan89ement
Protocol,
径。直接连接实际上是间接连接的特殊形式。例如在图l中,switchl和switch2属于直接连接关系,switchl与switch4则是间接连接关系。
sNMP)的网络拓扑发现算法在国内外得到了广泛的研究”41。文献【4—5J提出了基于地址转发表(AddressFonⅣarding1曲le,AFT)的物理拓扑发现算法,但该算法要求所有交换机的地址转发表是完整的。文献【6】在此基础上提出了改进算法,充分利用不完整的AFT信息判断网络设备的连接关系,并能发现可能存在的“哑设备”,但该算法运算量较大。文献【7】通过将交换机端口分为上行端口和下行端口,降低了对AFT的要求,并提出了一条判定上行端口和下行端口直连的引理。本文在上述研究工作的基础上。提出一种新的链路层网络拓扑发现算法,通过改进交换机连接关系的判定条件,并借助于线程池和哈希查找等技术,提高拓扑发现的效率。
2拓扑发现算法理论基稿
本文将子网中连接在一台路由器下的所有交换机的连接结构看作一棵“树”,设与路由器直接相连的交换机为树的第1层节点,与第1层交换机直接连接的交换机为第2层节点,以此类推,将交换机的连接结构划分为多个层,每个层有若干个节点。每个交换机节点又会连接一个或多个主机。这种结构方式清楚地反映了网络的拓扑结构。图1是一种常见的阿络拓扑结构。在交换机的结构树中,连接关系包括直接连接和问接连接。直接连接是指处于相邻位置的交换机相连接;而间接连接是指2个交换机之间存在着一条连接路
基盒疆目:国家自然科学基金资助项目(6嘴72022);广西研究生创新
基金资助项日(2010105950812M21)
圈l膏且曲阿掌精扦结糟
作者骱:潘楠(1985一),男,硕士研究生,主研方向:网络安全;
王勇.教授;陶晓玲,工程师
姻日囊:加11-05—19
E・mail:pn8527@yall00comcn
万方数据
104
计算机工程
2012年1月20日
2.1基本概念
定义l标志节点即出口路由器。
定义2品表示第f台交换机S的第J个端口。
定义3如表示品包含的MAc地址的集合;^表示交
换机墨的所有下行端口包含的MAC地址的集合。
定义4若交换机S的4中包含除S本身以外的所有其他交换机的MAc地址,则该交换机为根交换机。
定义5交换机端口所对应的地址转发表中出现标志节点MAC地址的端口为上行端口,否则,为下行端口。
定义6交换机墨的A中未出现其他交换机MAc地址的端口为叶端口,否则,为非叶端口。2.2相关定理
定理l若交换机墨的A中包含交换机&的MAC地址
墨一心c和A,则可确定品与品有连接关系。
证明:因为交换机置的A中包含S一胍c和A,说明
从毛出发必存在一条路径可以到达足,所以&与&有连接关系(直接相连或间接相连)。
定理2当&与&之间存在连接关系时。若A中MAc
地址的个数(IAI)等于A中MAc地址个数(IAI)加1,即
l如|.IA|+l,则毛与&直接连接。
证明:采用反证法证明。假设定理2不成立,即在品与
&之间存在连接关系且I气l=IAI+l时,%与&为间接连接。由此可知,A中除了包含瓯一枷c和A之外,还包含
其他交换机的MAc地址,因此,有l气l>IAI+l,与假设矛
盾,定理2得证。
定理3如果交换机墨的叶端口品的A中仅包含一台主机的MAC地址,那么该主机与交换机的品端口直接相连,若包含多台主机的MAc地址,则这些主机通过Hub与交换机的岛端口相连。
定理4如果交换机S的叶端口毛的如中仅包含路由器足的MAC地址,那么尺与交换机置的品端口直接相连。
3改进的链路层拓扑发现算法
根据链路层网络的拓扑结构,将拓扑发现分为以下3个步骤:
(1)获得活动设备集合
由子网对应的出口路由器的IP地址和子网掩码可确定子网的IP探测范围,向该范围内的每一个IP地址发送IcMP回显请求报文,根据是否返回IcMP回显响应报文判断设备的活动状态。
(2)确定设备类型
向每个活动设备的指定端口16l号发送sNMP报文,若有回应,则确定是交换机,否则,认为是主机。
(3)确定设备之间的连接关系
网络中主要存在的连接关系包括交换机与交换机的连接、交换机与主机的连接以及交换机与出口路由器的连接。根据定理l~定理4可分别判断以上连接关系,最终得到完整的网络拓扑结构。
在发现设备之间连接关系的操作中,确定交换机与交换机之间的连接关系最复杂也最耗时。传统的确定交换机与交换机之间连接关系的算法如下:
万方数据
f0“每个交换机Sj){
for(交换机si的第j个靖口){i“s;已经与别的交换机端口相连)
continue:
el∞{
i“Aii-AkUSLMAC)
s日与sk的上行端口直接相连;Jl}
对于上述算法中的判定条件A=AU&一心c,需要将A与网络中所有的AU瓯一胍c(七≠f)进行判断操作,而A
的计算量很大,导致发现效率不高,根据定理l和定理2,
可对上述判定条件作出修改,修改后的拓扑发现算法如下:
for(每个交换机si){
for(交换机S。的第j个靖口)li“S;已经与别的交换机端口相连)
continue:
elseI
i“Ab中能查找到sLMAC)li“Ai,中能查找到AkJ{
i“IAbI-IAk|+1)
sn与sk的上行端口直接相连;
}l}Jl
上述算法相对于传统算法的优势在于:通过修改交换机与交换机连接关系的判定条件,减少了A的计算量,缩短了确定连接关系的时间,提高了发现效率。
算法的关键技术包括:
(1)采用线程池技术提高发现效率
本文采用线程池的方式实现算法的前2步。与一般的多线程技术相比,线程池适用于单个任务处理时间较短、所需处理任务数量较多的情况,可减少频繁创建和销毁线程花费的时间,节省系统资源开销。采用线程池获得活动设备集合的核心代码如下:
ExecutorService
pool_Executors.newScheduledThreadPool(50);
AmyList<Futurc<String>>futurcList=
new
ArfayList<Fun盯e<String>>();
fof(in“=o;i<ipSp∞eList.sizc();i++){
futureList.add(p001.submit(new
PingActiVeDeViceCallable(ipspaceList.get(i)))):J
for(Future<String>fs:futurcList)f
try
f
i“fs名et()f-null)
actjVeDeViceList.add(fs.gct().t0SⅢng());
}catch(Inte唧ptedExceptione)f
e.printStackTrace():
}catch《ExecutionExceptio曲e)fe.printStackTrace();}}
p001.shutdown():
(2)采用哈希查找提高发现效率
在交换机连接关系的判断中,判断交换机端口的MAc地址集合中是否包含某一给定MAc这一操作的频率很高,但此操作一般需要通过遍历匹配实现,计算量非常大,尤其是在网络中交换机数目较多时,效率很低。因此,本文引入哈希表,将A存为哈希表,采用哈希查找的方式确定MAc
第38卷第2期潘楠,王勇,陶晓玲:一种基于sNMP的链路层拓扑发现算法
换机相连。
地址的包含关系,判断交换机之间是否连接。其中,哈希函致采用折叠法加除留余教法构造:首先把MAc地址分为6段,把每一段转换为十进制致后再顺叠相加,通过对相加的结果与Pp为一个素数,且小于或等于哈希表的大小)进行模运算得到哈希地址。此方法计算简单,得出的哈希地址可使MAc地址比较均匀地分布在哈希表中,从而减少查找的次数。当然。任何哈希函数的选择都有可能出现冲突,本文选择拉链法处理冲突。
4棱心算扶实现
通过采用线程池技术可快速得到网络中的交换机集合
州f圮^和主机集合^吲;确定swIr曲中的根交换机,并没置
第l层标识kvP仁1,下一层标识n“fkvef_拓坩“1。在此基础上判定交换机与交换机、主机、路由器的连接关系,从根交换机开始逐层向下判断,类似于广度优先搜索算法,直到所有交换机都已判断,算法结束。基本流程如下:
(1)对交换机S。从jwffc^中将其删除。
(2)对墨的一个恬动端口S,,将^f存为哈希表^ns柚kc;根据定义判断乳的类型,若为上行端口,执行步骤(3);若为下行端口,执行步骤(4)。
(3)判断^d曲^如c中MAc个数是否为1,若是,则根据定理4确定晶与路由器相连;若不是,说明&为只的上行
端口。
圈2阿皤拓}}置理鳍秉
实验网络是一个c类子网,而对于c类子网,最大存在的主机数为254台,采用本文算法创建一个大小为50的线程池对象,进行全网活动设备的探谢仅需要约7.2s,若采用单线程方式,则需要约123s;对于确定交换机之问的连接关系这一操作,若采用改进前的算法耗时约3.9s,而采用本文的发现算法仅需要约1.2s,可见,本文算法的效率更高。
(4)根据定义6判断S,若其为叶端口,判断^Ⅱ曲肼们中MAc个数是否为l,若是,则根据定理3确定S,与一台主机相连;若不是,则由定理3确定量.通过Hub与多台主机相连;否则,执行步骤(5)。
(5)从5wf,曲中取出交换机置。在妇j柚缸c中查找只一^Mc,若能查到,再在^djM忆c中查找A,若能查到,则根据定理1确定品与&之间存在连接关系;然后判断^d曲M们中MAc个数是否等于^的MAc个数再加l,若相等,则根据定理2确定S.与以的上行端口&直接相连,将邑一朋Hc存入第n“rjPv“层交换机的集合中;如果查不到,则判定swilc^中是否还有未判断的交换机,若有,重复此步骤,若无,执行步骤(6)。
(6】若置还有未确定的端口,返回步骤(2);否则,判断第kpPj层交换机的集合是否非空,若是,取未处理的交换机,并从集合中删除,返回步骤(1);否则,执行步骤(7)。
(7)拓坩f-^“fkv“。判断第kw,层交换机的集合是否非
6结束语
链路层的拓扑能真实地反映子网内部各个设备之问的连接情况。本文为快速实现链路层拓扑昀快速发现,提出了一种新的基于sNMP的拓扑发现算法,该算法通过修改交换机连接关系的判定条件,并采用线程池和哈希查找等技术,提高了拓扑发现的效率。同时能处理网络中存在的Hub。本文提出的算法能较好地解决单子网的拓扑发现问题,但无法发现存在vLAN的拓扑结构,这将是下一步的研究方向。
参考文簟
【l】邓泽林.傅明.刘翌南一种新的异构网络链路层拓扑发现
算法I耵计算机工程,20lo’3q2):119-120.
【2J孔令文,谭景倍数据链路层同络拓扑发现算珐研究唧.计算
机工程与设计,2∞8.29(19):494I—49“
空,若是,n删kvPf加l,取未处理的交换机,并从该层交
换机集台中删除,返回步骤(1);否则,算法结束。
f3】孙娟基于地址过滤的网络拓扑发现算法【刀计算机工程,
【4】B嘣tbarcYG帅脚akisM.Ma币nc,ct胡.伽Io科Diocovcfyin
H啪哪聊删sIPNetworl【s【C】胛眦.of山e19tllA肌u甜JointC0nf廿即ceofmc皿EC伽Du竹卸dcom删11i∞d0IlsSoci甜es
【S.1.】:IEEEPIess.2000:265—274.
2010,36(7):96.98.
5测试结果与分析
5.1实验环曩
在搭建的实验环境中,有I台路由器、3台交换机、1台Hub和5台主机。在测试本文的算法前,需要确保3台交换机开启sNMP协议。
5.2实验结果分析
采用本文的改进算法对实验嘲络进行发现,结果如图2所示。图2的左侧以树形结构显示了发现网络中的所有交换机和主机的IP地址;右下方显示了设备的详细信息;右上方显示了子网拓扑图。借助于不同的网络设备图标,可以直观地反映设备类型。当鼠标移至网络设备或链路时,会显示出相应信息,方便查看。图中虚线表示多台主机通过Hub与交
【5】
Bn州蛆n
Y.G帅falakis
M,J缸B,ct胡.T‘,pologyDiscovoryjn
He懈Dg曲eous口Netwo【I(8:neN眦Inv即砌了Sys把m【J】ⅢE日
ACM
Tr删d∞s叩№tworI(in盘2004,12(3):加1414.
D
of
【6】Low出帅pB,0’Hml啪nR,G瞄sTRT0叫ogyDisc0VeIyfor
sIGc0Ⅳ蹦’0lsn
Dicgo.
La噼E山mctN眈worI(s【q腑oc
uSA:Isn】.2001:237-248
【7】郑海,张国清物理罔络拓扑发现算法的研究【J】计算机研
究与发展,2002,39(3):264・268
编辑张帆
万方数据
一种基于SNMP的链路层拓扑发现算法
作者:作者单位:
潘楠, 王勇, 陶晓玲, PAN Nan, WANG Yong, TAO Xiao-ling
潘楠,PAN Nan(桂林电子科技大学计算机科学与工程学院,广西桂林,541004), 王勇,WANG Yong(桂林电子科技大学CSIP广西分中心,广西桂林,541004), 陶晓玲,TAO Xiao-ling(桂林电子科技大学信息与通信学院,广西桂林,541004)计算机工程
Computer Engineering2012,38(2)
刊名:英文刊名:年,卷(期):
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjgc201202033.aspx