一种面向分布式网络仿真平台的子网识别方法与流程

文档序号:12809895阅读:347来源:国知局
一种面向分布式网络仿真平台的子网识别方法与流程

本发明涉及计算机网络子网识别领域,尤其涉及面向分布式网络仿真平台中虚拟化网络子网识别和节点地址分配相关领域,具体为一种基于网络拓扑结构的可扩展的子网识别方法。



背景技术:

在传统的计算机网络环境中,为网络中节点分配ip地址的方法最初是根据网络节点的数量分配有类ip地址。但随着ip地址短缺的情况越来越严重,开始将一个有类的网络地址划分成若干个小的网段,将这些小的网段称为子网。此时的ip地址分配方法也变成了首先找到网络中的所有子网并根据子网中节点的数量确定子网掩码的位数,然后为每个子网分配一个专门的网段。子网的存在能够缩减网络流量、优化网络性能、简化管理、灵活地形成大规模网络。

在分布式网络仿真平台中,虚拟网络的规模少则上千节点,多则千万甚至上亿节点,如何为虚拟网络合理分配ip地址成为问题。而解决该问题的关键就在于子网识别,通过找到所有子网,并根据每个子网中需要分配ip地址的网卡数量,即可完成分布式网络仿真平台中的虚拟网络ip地址分配。



技术实现要素:

本发明的目的在于提供一种面向分布式网络仿真平台的子网识别方法,以提高ip地址利用率和ip地址分配效率,确保ip地址分配在支持节点网络类型和节点连接关系方面灵活可扩展,解决分布式网络仿真平台中ip地址合理且高效分配的问题。

为解决上述技术问题,本发明采用如下技术方案:

一种面向分布式网络仿真平台的子网识别方法,步骤包括:

1.预处理阶段:

根据输入文件中所含的每块网卡的对端节点的nodeid(节点编号)找到对端网卡的interfaceid(网卡编号),并将该interfaceid写入该文件中;

2.子网识别阶段:

2-1.读取经上述步骤处理的输入文件,获取所有节点的网络类型及网卡信息;

2-2.从节点的网络类型及网卡信息中获取每条链路的两端节点的网络类型,识别两端网卡所属的子网。

进一步地,步骤1)具体方法为:

1.遍历输入文件中每块网卡,获取当前节点nodeid及其网卡interfaceid和对端节点nodeid,并根据当前节点nodeid和对端节点nodeid组成的字符串(当前节点nodeid在前,对端节点nodeid在后,中间以逗号分隔)作为索引关键字,以当前网卡interfaceid作为对应值,存储于名为nismap的map中(此处及后面出现的map为计算机编程语言c++中的stl容器);

2.再次遍历每块网卡,根据每一网卡中当前节点nodeid和对端节点nodeid组成的字符串(对端节点nodeid在前,当前节点nodeid在后,中间以逗号分隔)创建索引关键字,从nismap中找到对端节点的interfaceid;将从当前网卡中获取的linknode指针地址作为关键字,对端节点的interfaceid作为对应值的键值对存储于名为linknodes的map中;

3.遍历linknodes中的每个键值对,获取其关键字linknode及对应值,为每个linknode创建属性dst_if(目的网卡编号)。

进一步地,输入文件为以xml格式描述的拓扑文件。

进一步地,步骤2-1中获取网络类型信息的方法是:注册节点类型识别器,根据每个节点的xml格式nodename找到该节点的网络类型。

进一步地,网络类型包括:主机、服务器、交换机、路由器、防火墙、入侵防御系统(ips,intrusionpreventionsystem)、入侵检测系统(ids,intrusiondetectionsystems)以及其他后期根据需要添加的新节点网络类型。

进一步地,步骤2-2中识别子网的方法是:注册子网识别器,根据每条链路两端节点的网络类型找到对应的子网识别器。

进一步地,将获取的节点信息保存到名为nodemap的map中,将获得的网卡信息保存到名为interfacemap的map中。

与现有方法相比,本方法的创新之处在于:针对分布式网络仿真平台中虚拟网络拓扑的结构信息,实现在节点网络类型和节点连接关系方面灵活扩展的子网识别方法,具体体现在:

1.本方法只需要在输入文件中增加针对新增节点网络类型的识别接口,即可实现新节点网络类型的支持,对于节点连接关系同理,增加节点连接关系的子网查找接口(子网识别器)并实现简单的处理即可完成新增节点连接关系的支持。

2.针对分布式网络仿真平台中支持的虚拟网络规模从个位数到上亿这个范围,本方法将子网识别过程的时间复杂度从o(n2)降为o(nlogn)级别,有效降低了处理过程对虚拟网络规模的敏感性,处理时间也明显缩短。

本方法解决了分布式网络仿真平台环境中虚拟网络的子网识别问题,并为虚拟网络ip地址自动分配提供了直接结果。当然子网划分的结果也可以用于其他方面,而不是局限于网络节点ip地址分配。在网络拓扑规模较大或者非常大的情况下,本方法仍然能够高效地完成子网识别处理过程,经测试,在分布式网络仿真平台中,十万节点的拓扑其子网识别处理过程耗时仅为数秒。在扩展性方面,本方法能够通过简单的扩展,即可支持新的节点网络类型或者节点连接关系,在分布式网络仿真平台的完善过程中,这点尤为重要。

附图说明

图1为实施例中的子网识别方法流程图。

图2为判断链路两端网络类型并进行子网识别的流程图。

具体实施方式

为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。

本实施例提供一种面向分布式网络仿真平台的子网识别方法,其实际处理过程分为两个阶段:第一个阶段为预处理阶段,此阶段解决输入文件中节点之间连接关系的查找问题;第二个阶段为子网识别阶段,此阶段根据预处理的结果,找到给定拓扑中所有节点的所有网卡以及网卡之间的连接关系信息,并根据这两部分信息,针对每条链路两端网卡所属节点网络类型的不同,为这些网卡找到所属的子网,如图1所示。

本方法的输入文件为拓扑文件,以xml格式描述,交换机的描述格式如下:

主机的描述格式如下所示:

路由器节点的拓扑格式如下所示:

一、预处理阶段

由于输入文件中只给出了每个节点的网卡连接的某个对端节点nodeid,但并未给出对端网卡interfaceid。预处理阶段根据每块网卡的对端节点nodeid,找到其对端网卡的interfaceid,并将此信息写入输入文件中对应的网卡中。也就是在<linktype="emu_switch">405703</link>这个xml标签中添加一个属性dst_if,修改之后为<linktype="emu_switch"dst_if="0">405703</link>。如此,能够减少后续处理过程中对端网卡interfaceid的查找时间。

预处理阶段分为三个步骤:

第一步,扫描输入文件中的所有interface的xml标签,获取每块网卡的nodeid、interfaceid和对端节点的nodeid,并将两节点nodeid作为索引,网卡interfaceid作为数据存储到内存中,处理过程如下伪代码描述:

第二步,遍历所有interface节点,同样获取当前网卡的nodeid、interfaceid和对端节点的nodeid,以和第一步相反的顺序,即对端节点nodeid和当前节点nodeid组成的字符串从nismap中找到对端节点的interfaceid,以当前节点的linknode指针地址为关键字,对端节点的interface为值,存储到linknodes(map)中。

第三步,遍历linknodes这个map,为每个linknode创建属性“dst_if,值为linknode关键字在linknodes中对应的值。

二、子网识别阶段

从上述预处理之后的拓扑文件中找到所有的节点和网卡,根据节点和网卡信息恢复节点连接关系。从网络拓扑图的角度而言,每两块网卡之间的连线作为图中的一条边(链路),每条边及其两端网卡都只能属于某一个子网。每条边的两端节点网络类型都是不同的,当一条边的某一个端点为终端节点,那么这条边中的另外一个端点应该是网络的中间节点(交换机或者路由器,或者类似功能的节点)。换言之,本方法要求拓扑中所有终端节点之间必须通过中间节点来连接,否则,两个终端节点直连,只能两点之间通信,无法组成网络。

定义两个实体对象,interface表示网络中节点的网卡,包含网卡的所有有效信息;subnet表示子网,是以interface为组成元素,二者是一对多的关系,即每个interface只能属于一个subnet,每个subnet会包含多个interface。二者的结构定义如下:

第一步,注册节点类型识别器,根据每个节点的xml格式nodename找到这个节点的实际网络类型;注册子网识别器,根据每条链路两端节点的网络类型,找到对应的子网识别器;

第二步,读取预处理之后的输入文件,获取其中的所有节点网络类型信息保存到nodemap中;获取输入文件中所有网卡信息,并保存到interfacemap中;

第三步,遍历interfacemap,根据每个interface当前及对端两端节点的网络类型(即根据不同的链路或节点连接关系),从第一步中注册的子网识别器中找到对应的子网识别器,识别当前interface及其对端interface所属的子网;具体识别过程如下,如图2所示:

1)交换机与主机(或者交换机与服务器)相连

根据交换机的switchid查找缓存是否存在subnet,如果找到,那么直接将host网卡添加到这个subnet;否则创建新的subnet,并添加host网卡,同时记录switchid与subnet的对应关系。

2)路由器与交换机相连

对于一端是路由器网卡,一端是交换机网卡的情况,根据交换机的nodeid查找是否已经创建了subnet,如果是,那么将路由器网卡添加到subnet;否则,创建新的subnet,将路由器网卡添加到此subnet,并且记录switchid与subnet之间的对应关系。

3)交换机与交换机相连

交换机和交换机直连的情况,首先根据两个交换机的nodeid,查找是否存在已经分配的subnet,如果没有创建新的subnet,并且记录两个switchid与此subnet之间的对应关系,返回此subnet指针;如果其中一个switchid找到对应的subnet,那么将另一个switchid与此subnet的对应关系记录下来,返回null;如果两个switchid都存在对应的subnet,那么判断这两个subnet是否为同一个,如果不是,抛出异常,报错;否则不作处理,返回null。

4)路由器与防火墙相连

路由器连接防火墙管理口的情况,直接抛出异常,提示不允许此类连接。路由器连接防火墙内网口和外网口的情况,都是单独的一个子网。

5)路由器与ips相连

ips的内外网口不需要分配ip地址,因此对于路由器ips的连接,首先将路由器的网卡添加到subnet中,其次将对应的ips添加到临时缓存中,等到下次再遇到端点为此ips的连接,将对端需要分配ip地址的网卡添加到当前的subnet中;当然需要每次创建新的subnet之前,查找是否在缓存中记录了此ips对应的subnet。

6)路由器与路由器相连

本端和对端都是路由器的网卡,那么直接组成一个subnet。

7)交换机与ips相连

由于switch和ips的内外网口都不需要分配ip地址,因此需要记录此两者对应的subnet;对于switch与ips管理口的连接,其中ips管理口需要分配ip地址,而且是gateway。

8)交换机与ids相连

交换机和ids相连的情况,根据当前的网卡找到交换机id和ids的网卡,根据交换机id查找缓存中是否已经存在此交换机相关的subnet,如果存在,则将ids网卡添加到这个subnet中;否则,创建新的subnet,并添加ids网卡。

9)交换机与防火墙相连

交换机与防火墙的三个网口(内外管)都可能连接,而且三个口分别属于一个子网但交换机只能属于一个子网,换言之,三个网口至少对应三个交换机,而不可能是其中两个或者多个网口对应一个交换机。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1