发明内容
本发明的目的在于克服上述不足,提供一种全网公告,快速收敛的拓扑发现方法,及时反应正确的设备连接顺序和当前的网络环境。
本发明的目的是这样实现的:一种交换设备的拓扑发现方法,所述方法包括以下步骤:
步骤一、root设备发送广播报文;
步骤二、root设备在内部建立一张全局拓扑结构表;
步骤三、交换设备接收到root设备发送的广播报文后,交换设备将向其它激活端口转发该广播报文,同时执行下述步骤:
(1)向接收广播报文的端口发送反馈报文,该反馈报文包含本设备的设备号和来源端口,同时将来源端口记录到本机设备信息表的本机端口中;
(2)root设备接收到反馈报文时,判断该反馈报文如果是从接收广播报文的端口接收,则丢弃该反馈报文;否则记录接收该反馈报文的接收端口及反馈报文内容到本机设备信息表中;
(3)向root设备发送本机记录的下联设备信息的拓扑报文;
步骤四、root设备收到反馈报文以及拓扑报文后,将交换设备的信息记录到全局拓扑结构表中;
步骤五、root设备根据收到的反馈报文以及拓扑报文维护更新全局拓扑结构表。
上述方法中所有报文的发送、接收和处理均基于二层协议实现,除广播报文外,其它报文均为定点报文。
上述方法中所有网络设备均使用唯一关键编号作为设备的单一识别。
上述方法中设备信息结构体包含以下内容:设备编号,下联设备个数,父端端口,本机端口,下联设备指针,同级设备指针。
步骤一中的root设备不限定为核心交换机或网关设备或集中管理服务器,步骤二中的全局拓扑结构表中所维护的是树型链表,步骤三中的交换设备不关心其上联设备的接口情况,而下联设备是指与当前设备直接相连的距离root设备更远的交换设备。
在步骤三(1)中所使用的二层数据包为避免错误识别,在数据包内添加关键字,且接收的交换设备在协议栈对该类型数据包做重定向到CPU处理,以保证不会被接收交换机错误转发至其它交换设备。
在步骤三(1)中的反馈报文,其中只包括本机设备编号和接收广播报文的端口,步骤三(2)中记录下联设备信息的步骤如下:
(B1)将本机设备编号记录到本机设备信息结构体设备编号中;
(B2)将接收到广播报文的端口记录到本机设备信息结构体本机端口中;
(B3)接收到第一个反馈报文时创建下联设备信息结构体;
(B4)将反馈报文中的设备编号写入下联设备信息结构体的设备编号中;
(B5)将接收到该反馈报文的端口记录到下联设备信息结构体的父端端口中;
(B6)将接收到的反馈报文中用于接收广播报文的端口记录到下联设备信息结构体的本机端口中;
(B7)将本机设备信息结构体的下联设备指针指向第一个设备信息结构体;
(B8)更新下联设备个数内容;
(B9)下联设备信息结构体的下联设备指针为空;
(B10)下联设备信息结构体的同级设备指针为空;
(B11)接收到下一个反馈报文时创建下联设备信息结构体;
(B12)将反馈报文中的设备编号写入下联设备信息结构体的设备编号中;
(B13)将接收到该反馈报文的端口记录到下联设备信息结构体的父端端口中;
(B14)将接收到的反馈报文中用于接收广播报文的端口记录到下联设备信息结构体的本机端口中;
(B15)将上一个下联设备信息结构体的同级设备指针指向本下联设备信息结构体;
(B16)本下联设备信息结构体的下联设备指针为空;
(B17)本下联设备信息结构体的同级设备指针为空;
(B18)更新本机下联设备个数内容;
(B19)循环(B11)—(B18)依次处理收到的所有下联设备的反馈报文。
(B20)本机结构体中的同级设备指针为空。
步骤三(3)中的设备如果下联设备指针为空,则不发送拓扑报文,此外,由于设备是在接收到广播报文才发送拓扑报文,因此可以根据网络环境设定是由root定时自动进行拓扑发现,还是人工手动进行自动拓扑发现,优化网络性能,减少收敛次数,提高效率。
步骤四中将设备信息记录到全局拓扑结构表中步骤为:
(C1)将本机root设备编号记录到结构体中;
(C2)父端端口、本机端口均为空,root同级设备指针为空;
(C3)将下联设备指针指向收到的第一个反馈报文所创建的设备信息结构体的设备编号;
(C4)将接收到该反馈报文的端口记录到创建的下联设备信息结构体的父端端口中;
(C5)将接收到的反馈报文中用于接收广播报文的端口记录到下联设备信息结构体的本机端口中;
(C6)更新下联设备个数内容;
(C7)将第一个下联设备信息结构体(非root设备)的同级设备指针指向收到的下一个反馈报文中设备信息结构体的设备编号;
(C8)循环(C4)—(C7)依次处理收到的所有下联设备的反馈报文;
(C9)将收到的拓扑报文中的设备编号取出,在下联设备中找到该编号记录,然后将该编号结构体的下联设备指针指向该结构体。
步骤五中对拓扑发现的更新基于上述步骤四中对全局拓扑结构表的更新,使用常规链表更新策略即可主动实时维护当前拓扑结构。
与现有技术相比,本发明的有益效果是:
本发明采用了非常简单,易于编程实现的基于二层协议的网络交换设备拓扑发现方法。root设备可以是一台核心交换机,也可以是一台网管设备,或者是一台集中管理服务器,便于网络灵活架设,而且整个拓扑发现方法所需数据包极少,且处理信息很少,通过高效链表操作,可以提高系统处理性能,比其它网络拓扑发现方法占用设备系统资源和网络资源都有极大的优势。
具体实施方式
下面结合附图和具体实施例对本发明作进一步介绍,但不作为本发明的限定,它只是起到解释和帮助理解的作用。
图1是本实施例拓扑发现方法总体流程图,包括以下步骤:
步骤10,root设备发送Topology_Find广播报文,该设备的直联交换设备将收获该报文。
步骤20,整体方法都是以步骤10作为启动,因此root在步骤10启动后,如果发现当前系统中还没有全局拓扑结构表,那么root将建立该表。
步骤30,交换设备接收到Topology_Find广播报文,交换设备将向其它激活端口转发该广播报文,同时执行下列步骤。
步骤40,交换设备向Topology_Find广播报文来源端口发送dev_info反馈报文,该报文包含本设备的设备号和来源端口,同时将来源端口记录到本机设备管理表的本机端口中。因为有可能本机没有下联设备,该设备将不会发送topology_info拓扑报文,所以需要将来源端口告知父端设备,root设备接收到反馈报文时,判断该反馈报文如果是从接收广播报文的端口接收,则丢弃该反馈报文;否则记录接收该反馈报文的接收端口及反馈报文内容到本机设备管理表中。
步骤50,如果收到Topology_Find广播报文的设备有下联端口,则该设备在接收到下联设备的dev_info反馈报文后,维护本机的下联设备信息。
此步骤以图4拓扑图中的SW1交换设备维护其下联设备信息为例,参照图3做说明:
步骤500,SW1的下联设备信息维护是从接收到Topology_Find广播报文开始,此时判断SW1设备中是否已存在本机设备管理表。该表中的每个值以结构体形式表示,如果不存在,则执行下一步。
步骤510,SW1将创建本机设备管理表:
设备编号 |
下联设备个数 |
父端端口 |
本机端口 |
下联设备指针 |
同级设备指针 |
SW1 |
0 |
0 |
3 |
NULL |
NULL |
创建内容为:
将设备编号填入本机“设备编号”中。
将接收Topology_Find广播报文端口填入“本机端口”中。
此时SW1接收到SW3的dev_info反馈报文后,如果没有找到下联设备信息结构体,则设备编号为SW3的将创建SW3设备的结构体。
步骤520,SW1将创建下联设备SW3的结构体,并将结构体中的内容按字段写入SW1的设备管理表中:
设备编号 |
下联设备个数 |
父端端口 |
本机端口 |
下联设备指针 |
同级设备指针 |
SW1 |
1 |
0 |
3 |
SW3 |
NULL |
SW3 |
0 |
5 |
8 |
NULL |
NULL |
更新内容为:
将SW1中的下联设备个数更新为1。
将SW1中的下联设备指针指向新建的SW3。
创建内容为:
创建SW3,将设备编号填入“设备编号”中。
将SW1接收SW3的dev_info反馈报文的端口填入SW3的父端端口。
将SW1接收SW3的dev_info反馈报文内容中的SW3接收Topology_Find广播报文的端口填入SW3的本机端口。
同样的当SW1接收到SW4的dev_info反馈报文后,如果没有找到下联设备信息结构体设备编号为SW4的将创建SW4设备的结构体。
步骤530,SW1将创建下联设备SW4的结构体,并将结构体中的内容按字段写入SW1的设备管理表中:
设备编号 |
下联设备个数 |
父端端口 |
本机端口 |
下联设备指针 |
同级设备指针 |
SW1 |
2 |
0 |
3 |
SW3 |
NULL |
SW3 |
0 |
5 |
8 |
NULL |
SW4 |
SW4 |
0 |
6 |
9 |
NULL |
NULL |
更新内容为:
将SW1中的下联设备个数更新为2。
将SW3中的同级设备指针指向新建的SW4。
创建内容为:
创建SW4,将设备编号填入“设备编号”中。
将SW1接收SW4的dev_info反馈报文的端口填入SW4的父端端口。
将SW1接收SW4的dev_info反馈报文内容中的SW4接收Topology_Find广播报文的端口填入SW4的本机端口。
步骤540,判断SW1的结构体链表有无变化,如果有变化,则执行步骤60,否则结束。
步骤60,交换设备向root设备发送topology_info拓扑报文,内容即为SW1结构体链表。
步骤70,root按照SW1相同的方法维护全局拓扑结构表。
步骤80,根据root发送Topology_Find广播报文的策略,如果是定时发送,则发送报文,如果是手工发送,即结束本次拓扑发现流程。
参考图4的拓扑事例,最终root将构建出图2所示的全局拓扑结构表。
可看出在整个拓扑发现方法中,一共只使用了三种报文:Topology_Find广播报文、dev_info反馈报文、topology_info拓扑报文,一种结构体,一个通用结构体维护步骤即可以在极短时间内收敛网络环境中的拓扑信息,实现链表式的易于维护的全局拓扑结构表,可充分应用在各种网络设备拓扑应用实现中。