一种发送测试路由的方法和系统 |
|||||||
申请号 | CN200610082993.7 | 申请日 | 2006-06-23 | 公开(公告)号 | CN100466562C | 公开(公告)日 | 2009-03-04 |
申请人 | 华为技术有限公司; | 发明人 | 郑远明; | ||||
摘要 | 本 发明 公开了一种发送测试路由的方法和系统,其基本思路是首先生成符合网上路由前缀长度分布规律的随机路由,然后从生成的路由中,读取测试路由,将所述测试路由发送到被测试设备。本发明可以实现发送给被测试设备的路由符合网上路由分别规律,且具有随机特性,测试路由与被测试设备在实际互联网中接收到的路由一致;从而可以准确的测试该设备处理实际路由的能 力 。 | ||||||
权利要求 | 1.一种发送测试路由的方法,其特征在于,包括: |
||||||
说明书全文 | 技术领域本发明涉及网络测试技术,尤其涉及一种发送测试路由的方法和系统。 背景技术BGP(Border Gateway Protocol,边界网关协议)是Internet上最重要的路由协 议之一,它是目前自治系统之间采用的唯一路由协议,因此,有人称BGP为 互联网的心脏(BGP Is The Heart OfInternet)。BGP经历了不同的发展阶段, 从1989年的最初版本BGP1,发展到了1993年的版本BGP4,其功能也在随着 Internet的增长不断地加强和扩大。从最初的基本的自治系统间的路由功能,到 聚合,团体,反射,联盟,衰减,能力通告,多协议扩展,路由刷新等,可以 说BGP的发展紧密跟随着Internet的发展,Internet上的BGP路由的数目也从1989 年的很少条数增加到2001年的约10万条,自治系统的个数在2001年也增加到 9000个左右。因此BGP功能的强大和健壮与否是检验核心路由器的重要指标。 为了测试路由器对于大量的BGP路由的处理,需要使用一定的测试方法向 路由器添加大量的路由,然后观察路由器对于这些大量路由的处理,从而判断 路由器对于接收到的路由的处理是否正确。 现有的测试方案为,生成符合网上路由前缀长度规律分布的路由,创建多 个包含不同路由前缀的路由池,然后从路由池中读取并发送路由到被测试路由 器。 从以上现有技术方案可以看出,由于生成的测试路由没有随机特性,故发 送到被测试路由器的测试路由不能模拟路由器在互联网接收到路由,从而无法 准确的测试出路由器处理互联网路由的性能。 发明内容本发明的目的是提供一种发送测试路由的方法和系统,以实现生成符合网 上路由前缀长度分布规律,且具有随机特性的测试路由,并将所述测试路由发 送给被测试设备。 为达到上述的目的,本发明通过以下技术方案实现: 一种发送测试路由的方法,包括:1)依据网上路由分布规律,计算出各 种路由前缀长度的路由的生成数目,采用随机算法生成所述生成数目的各种路 由前缀长度的随机路由;所述步骤1)生成随机路由的过程包括:21)获取所 述各种路由前缀长度中的一种路由前缀长度;22)采用随机算法生成一条所述 获取的路由前缀长度的路由前缀,判断所述生成的路由前缀是否与已存在的具 有相同路由前缀长度的路由前缀相同,如果是,删除所述生成的路由前缀,继 续步骤22);否则,继续步骤23);23)判断获取的路由前缀长度的路由前缀 的生成数目是否与所述步骤1)计算出的所述获取的路由前缀长度的路由的生 成数目相等,如果是,继续步骤24);否则,继续步骤22);24)判断所述各 种路由前缀长度是否都已经被获取,如果是,结束;否则,从未被获取的路由 前缀长度中,获取一种路由前缀长度,继续步骤22);2)依据网上路由分布 规律,计算出各种路由前缀长度的路由的测试数目,从所述步骤1)生成的随 机路由中,读取所述测试数目的各种路由前缀长度的路由;3)发送所述读取 的测试路由到被测试设备。 优选的,在所述步骤1)之前,预置路由总生成数目;在所述步骤2)之 前,预置预定路由总测试数目;所述总测试数目不大于总生成数目。 优选的,所述步骤2)读取路由的过程包括:31)获取所述各种路由前缀长 度中的一种路由前缀长度;32)从所述获取的路由前缀长度的生成路由中,读 取所述步骤2)该种路由前缀长度测试数目的路由;33)判断所述各种路由前 缀长度是否都已经被获取,如果是,结束;否则,从未被获取的路由前缀长度 中,获取一种路由前缀长度,继续步骤32)。 优选的,所述被测试设备为启用边界网关协议BGP的路由器,所述步骤 3)发送测试路由之前,与被测试路由器建立边界网关协议会话BGP Session。 优选的,所述步骤3)发送过程包括把测试路由加入到添加路由的更新 Update报文中,发送给路由器;或把测试路由加入到撤销路由的更新Update 报文中,发送给路由器。 优选的,所述步骤32)的读取为随机读取。 优选的,所述的随机算法为使用伪随机函数产生伪随机数的算法。 一种发送测试路由的系统,包括参数预置输入模块、随机路由生成模块、 测试路由读取模块、测试路由发送模块:所述参数预置输入模块用于输入网上 路由分布规律参数,计算出各种路由前缀长度的路由的生成数目和各种路由前 缀长度的路由的测试数目;所述随机路由生成模块用于读取所述各种路由前缀 长度的路由的生成数目,获取所述各种路由前缀长度中的一种路由前缀长度; 采用随机算法生成一条所述获取的路由前缀长度的路由前缀,判断所述生成的 路由前缀是否与已存在的具有相同路由前缀长度的路由前缀相同,如果是,删 除所述生成的路由前缀,继续执行采用随机算法生成一条所述获取的路由前缀 长度的路由前缀;否则,判断获取的路由前缀长度的路由前缀的生成数目是否 与所述计算出的所述获取的路由前缀长度的路由的生成数目相等,如果否,继 续执行采用随机算法生成一条所述获取的路由前缀长度的路由前缀;如果是, 判断所述各种路由前缀长度是否都已经被获取,如果是,结束;否则,从未被 获取的路由前缀长度中,获取一种路由前缀长度,继续执行采用随机算法生成 一条所述获取的路由前缀长度的路由前缀;所述测试路由读取模块用于读取所 述各种路由前缀长度的路由的测试数目,从所述生成的各种路由前缀长度的随 机路由中,读取测试数目的所述各种路由前缀长度的路由;所述测试路由发送 模块用于发送所述读取的测试路由到被测试设备。 优选的,所述参数预置输入模块还用于输入预置路由总生成数目和预定路 由总测试数目,根据网上路由分布规律计算出各种路由前缀长度的路由的生成 数目和各种路由前缀长度的路由的测试数目。 从上述的技术方案可以看出,本发明通过预先设置路由总生成数目和总测 试数目,依据网上路由分布规律,计算出各种路由前缀长度的路由的生成数目 和测试数目,采用随机算法生成所述生成数目的各种路由前缀长度的随机路 由,从生成的随机路由中,读取所述测试数目的各种路由前缀长度的路由,然 后发送所述读取的测试路由到被测试设备。通过这种方法,使得发送到被测试 设备的路由不仅符合网上路由分布规律,而且具有随机特性,测试路由与被测 试设备在实际互联网中接收到的路由一致;从而可以准确的测试该设备在实际 工作环境中处理路由的能力。 附图说明 图1为本发明的方法流程图; 图2为本发明随机路由生成的方法流程图; 图3为本发明测试路由读取的方法流程图; 图4为本发明的系统示意图。 具体实施方式本发明提供了一种发送测试路由的方法和系统,其基本思路是首先生成符 合网上路由前缀长度分布规律的预置数目的随机路由,然后从生成的路由中, 读取预定数目的各种路由前缀长度的测试路由,将所述测试路由发送到被测试 设备。 请参考图1,为本发明的方法流程图,包括步骤: P1.预置路由总生成数目,依据网上路由分布规律,计算出各种路由前缀 长度的路由的生成数目,采用随机算法生成所述生成数目的各种路由前缀长度 的路由。 P2.预定路由总测试数目,依据网上路由分布规律,计算出各种路由前缀 长度的路由的测试数目,从所述步骤P1生成的路由中,读取所述测试数目的 各种路由前缀长度的路由;所述总测试数目不大于总生成数目。 P3.发送所述读取的测试路由到被测试设备。 为进一步理解本发明,以下通过具体实施方式对本技术方案的方法流程进 行详细的描述。 从上述本发明的基本思想可知,本发明可以分为生成随机路由、读取测试 路由和发送测试路由三个部分,下面按实施步骤顺序对这三个部分进行描述。 请参考图2,为本发明随机路由生成的方法流程图,包括: A1.预置路由总生成数目,根据网上路由分布规律,计算各种路由前缀长 度的路由的生成数目。 上述路由前缀为路由的网络地址部分信息。 上述路由前缀长度为路由的网络地址部分信息的长度(单位为bit),也就是 掩码长度。 具体的,表1列出了某时段网上路由前缀长度(IPv4)分布规律,即各种 路由前缀所占总路由前缀的百分比,该分布规律由单位时间统计得出。预置总 生成路由为1000万条,在生成随机路由的时候,如果路由总数很大,按照这个 表中的路由分布规律,前缀长度为8的路由数目为2000条,但是除去第1字节为 0,127,以及大于等于224的路由,有效的路由数目只有222条。后面,还有些 前缀长度的路由数目也有这样的问题,因此在具体实现的时候,涉及到修正的 问题。前缀长度为8的路由数目最大就设置为222,其它类似情况的前缀长度的 路由数目也设置为该种长度的有效路由的最大数目,最后,设置前缀长度为31 的路由数目为指定路由总数与其它所有前缀长度的路由总和的差。各种前缀长 度路由的生成数目,以及根据前缀的具体情况更正后的有效路由数目如表1所 示。 前缀长度 百分比(%) 路由数目 修改后的有效路由数目 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 8 0.02 2000 222 9 0 0 0 10 0.01 1000 888 11 0.01 1000 1000 12 0.03 3000 3000 13 0.08 8000 7104 14 0.23 23000 14208 15 0.36 36000 28416 16 6.38 638000 56832 17 1.2 120000 113664 18 2.19 219000 219000 19 6.33 633000 454656 20 5.42 542000 542000 21 4.32 432000 432000 22 6.35 635000 635000 23 8.06 806000 806000 24 55.52 5552000 5552000 25 0.46 46000 46000 26 0.51 51000 51000 27 0.42 42000 42000 28 0.42 42000 42000 29 0.36 36000 36000 30 0.76 76000 76000 31 0 0 785010 32 0.56 56000 56000 表1 在程序实现中,可以使用一个数组,比如ULONG ulMaxPrefixIpNum[33], 每个元素表示一种前缀长度的路由数目,ulMaxPrefixIpNum[8]就表示前缀长度 为8的有效路由数目。ULONG是32bit的无符号整数。 A2.设置起始生成路由前缀长度n为2。对IPv4协议的路由来说,路由前缀 长度为1~32。 A3.利用伪随机函数生成路由前缀长度为n的路由前缀。 具体的,在程序实现中,首先初始化一个数组,比如ULONG ulRoutesInfoList[10000000]来表示生成的1000万条路由。从前缀长度为2开 始,依次生成各种前缀长度的路由:在路由生成过程中,利用伪随机函数每生 成一条路由。 路由生成的方法举例:因为一条路由,比如10.1.160.3,实际上可以用4个 字节(1个字节是8bit)表示,依次是10,1,160,3。所以生成随机路由的时 候,可以使用伪随机函数,比如rand(),来分别生成4个伪随机数,每个伪随机 数的范围在0-255之间。由这4个伪随机数一起,就组成了一条路由,共32bit。 然后,再根据前缀长度(比如18)来取前面的18bit,修改后面的14bit为0。比 如10.1.160.3用二进制表示成32bit,是00001010 00000001 10100000 00000011, 根据前缀长度18,取前面的18bit,修改后面的14bit修改为0,得到2进制的32bit 结果为00001010 00000001 10000000 00000000,用点分10进制表示就是 10.1.128.0。为了处理简单,存放到表示路由的本地文件中的时候存放4个字节, 依次是10,1,128,0。 A4.判断该路由前缀长度的路由前缀是否已经存在?如果是,则删除此次 生成的路由前缀,继续步骤A3,否则,继续步骤A5。 A5.将该路由前缀加入路由前缀长度为n的缓冲区。具体的,在程序实现 中,可以使用数组ulRoutesInfoList作为数据存放的缓冲区。 A6.判断是否已经生成指定数目的该种路由前缀长度的路由。如果是,继 续步骤A7;否则,继续步骤A3。所述指定数目为在步骤A1计算出来的该种路 由前缀长度生成的路由数目。 A7.前缀长度n+1,判断n是否大于32,如果是,继续步骤A8;否则,继 续步骤A3。IPv4最长的前缀长度为32,故大于32表示路由已经全部生成。 A8.将所有生成路由写入测试设备的本地文件。 具体的,创建一个.txt文件,先写入4个字节的路由总数,这里是1000万; 再写入整个数组ulRoutesInfoList[10000000]的内容。 需要特别说明的是,以上随机路由生成方法,仅为本发明随机路由生成方 法的一种具体实施例,本发明可根据需要采用其他随机路由生成方法,只要首 先生成符合网上路由前缀长度分布规律的预置数目的随机路由即可,由此处不 再赘述。 在生成随机路由后,进入读取测试路由流程。 请参考图3,为本发明测试路由读取的方法流程图,包括: B1.预定路由总测试数目,根据网上路由分布规律,计算各种路由前缀长 度的路由的测试数目。 首先输入在测试过程中需要发送的路由数目,允许用户根据测试需要,输 入需要向路由器添加、撤消、振荡的路由数目,比如,输入需要发送的测试路 由为20万条;然后根据网上前缀长度规律和输入的路由总数计算各种前缀长 度的路由数目,计算原理和步骤A1相同。 B2.根据路由的测试数目,从系统中分配内存s1。 具体的,如果测试路由为20万条,每条路由包括前缀长度1个字节,前 缀4个字节,所以需要分配内存s1的大小为20万*(4+1)=100万字节的空间。 在程序实现中,可以使用一个数组,比如ULONG ulMaxPrefixIpNum[33],每 个元素表示一种前缀长度的路由数目,ulMaxPrefixIpNum[8]就表示前缀长度为 8的有效路由数目,ULONG是32bit的无符号整数。 B3.从存储生成路由的文件,把全部路由读取到内存s2中。 具体的,生成的路由为1000万条;分配4*1000万字节大小的内存,读取 所有路由到内存s2。因为这1000万条路由是按各种前缀长度依次生成的,所 以在内存s2中清楚的知道某个前缀长度的路由的起始和结束位置。 B4.设置起始测试路由前缀长度n为2。 B5.在路由前缀长度n的生成路由数目范围内生成一个随机数。可以使用 伪随机函数生成随机数。 B6.从随机数开始,依顺序读取指定数目的路由前缀n的路由,如果读到 最后还不够,再从第一条开始读起,把读取的路由添加到内存s1。 为了使得每次测试,即使路由总数相同,比如都是20万条,最后从文件获 取的路由也不完全相同,在读取某个前缀长度的路由的时候,先在该前缀长度 的路由总数范围内生成一个随机数,假设为m,从该种前缀长度的第m条路由 开始读取所需路由,如果读到最后还不够指定数目,再返回去继续从该前缀长 度的生成路由的第1条开始读取。 以下对该步骤举例说明:定义1个数据结构,表示路由,包括前缀长度和 前缀: typedef struct tagBGP_ROUTES_INFO { BYTE ucLen;//路由的prefix len,也就是20.0.0.1/16里面的16 UCHAR ucaPrefix[4];//也就是20.0.0.1/16里面的20001四个字节 }BGP_ROUTES_INFO_S; 生成1个BGP_ROUTES_INFO_S类型的临时变量,比如 pBgpV4RoutesInfo, 读取各种前缀的路由后,将前缀长度写入pBgpV4RoutesInfo的ucLen,将 前缀写入pBgpV4RoutesInfo的ucaPrefix,然后将pBgpV4RoutesInfo写入内存 s1。 假设输入的路由数目为10,最后从文件中读取到5条前缀长度为23,5 条前缀长度为24的路由,分别如下: 14.5.24.0/23,142.97.240.0/23,159.157.148.0/23,125.21.192.0/23, 205.2.62.0/23 186.81.104.0/24,54.208.184.0/24,194.137.80.0/24,117.75.59.0/24, 146.139.49.0/24。 那么内存s1的内容(以下为16进制)就为: 17 0E 05 18 00 17 8E 61 F0 00 17 9F 9D 94 00 17 7D 15 C0 00 17 CD 02 3E 00 18 BA 51 68 00 18 36 D0 B8 00 18 C2 89 50 00 18 75 4B 3B 00 18 92 8B 31 00 需要说明的是,步骤B5和B6通过在路由前缀长度n的生成路由数目范 围内生成一个随机数,然后从随机数开始顺序读取指定数目的路由前缀n的路 由。也可以把路由前缀长度n的生成路由数目范围作为一个数据段,使用随机 的方法,每次从这个数据段随机读取一条路由,直到读取够指定数目的路由前 缀n的路由为止。 B7.前缀长度n+1,判断n是否大于32。如果是,继续步骤B8;否则,继 续步骤B5。 B8.测试路由读取结束。 另外,需要说明的是,上述读取测试路由的方法,仅为本发明读取测试路 由的方法进行详细说明的一种具体实施例,本发明亦可以采用其他随机方式读 取测试路由,此处亦不再赘述。 在读取测试路由后,进入测试路由发送流程。以下实施例为将测试路由发 送给启用BGP的路由器。 C1.在测试工具与路由器来建立BGP Session。 在测试工具与路由器之间建立BGP Session的基本过程包括,先在测试工 具与DUT(device under test,被测设备)之间建立tcp连接,目的端口号为179, 然后在tcp连接的基础上互相发送BGP Open报文,BGP KeepAlive报文,就 建立起BGP Session了。建立BGP Session后,互相每隔一段时间发送BGP KeepAlive报文,就可以维护BGP Session。 C2.组织包含上述读取的测试路由在内的Update报文。所述Update报文 包括添加路由的Update报文和撤销路由的Update报文。Update报文包括报文 头,测试路由和Session相关属性。 添加路由的Update报文是tcp数据包,tcp目的端口号为179,其数据部 分包括Update报文头,以及Origin,As_Path,Next_Hop,Local-Preference等 路由属性,还有添加的各条路由,所述路由包括前缀长度和前缀。 撤消路由的Update报文是tcp数据包,tcp目的端口号为179,其数据部 分包括Update报文头,以及撤消的各条路由,所述路由包括前缀长度和前缀。 具体的,添加路由和撤消路由的Update报文中,10.1.128.0/18封装到 Update报文中的时候,实际上先填写18,然后填写3个字节10,1,128,最后 的1个字节0是不写到Update报文中的,也就是只填写前缀长度所表示的有 效字节。如果前缀长度大于24,有效字节为4,需要填写4个字节的前缀;前 缀长度小于或等于24而大于16,有效字节为3,需要填写3个字节的前缀; 前缀长度小于或等于16而大于8,有效字节为2,需要填写2个字节的前缀; 前缀长度小于或等于8,有效字节为1,需要填写1个字节的前缀。 C3.将Update报文发送给路由器。除发送添加路由和撤销路由外,在对 路由器的测试还包括路由震荡,所述路由震荡为添加路由和撤消路由交替进 行,路由震荡的过程就是交替向路由器发送添加路由和撤消路由的Update报 文,添加路由和撤消路由之间的时间间隔由用户设置。 另外,如果测试过程对时间没有紧迫的要求,可以每次测试的时候生成符 合网上前缀长度分布规律的随机路由,然后直接发送给路由器进行测试。 另外还可以收集网上的路由器上的路由表中的数量足够多的路由,存放成 文件,每次测试的时候,从文件中随机读取其中的部分路由。 请参考图4,为本发明的系统示意图。 本发明的发送测试路由的系统100包括参数预置输入模块110、随机路由 生成模块120、测试路由读取模块130、测试路由发送模块140: 参数预置输入模块110用于输入预置路由总生成数目、预定路由总测试数 目和网上路由分布规律参数,计算出各种路由前缀长度的路由的生成数目和各 种路由前缀长度的路由的测试数目; 随机路由生成模块120用于读取所述各种路由前缀长度的路由的生成数 目,采用随机算法生成所述生成数目的各种路由前缀长度的随机路由; 测试路由读取模块130用于读取所述各种路由前缀长度的路由的测试数 目,从所述生成的各种路由前缀长度的随机路由中,读取所述测试数目的路由; 测试路由发送模块140用于发送所述读取的测试路由到被测试设备。 首先,将网上路由分布规律参数和预置路由总生成数目输入到参数预置输 入模块110,参数预置输入模块110计算出各种路由前缀长度的路由的生成数 目。然后随机路由生成模块120读取所述各种路由前缀长度的路由的生成数 目,采用随机算法生成所述生成数目的各种路由前缀长度的随机路由。将预定 路由总测试数目输入到参数预置输入模块110,参数预置输入模块110计算出 各种路由前缀长度的路由的测试数目,可以理解的是,可以在输入路由总生成 数目的时候,同时输入路由总测试数目。测试路由读取模块130读取各种路由 前缀长度的路由的测试数目,从上述生成的各种路由前缀长度的随机路由中, 读取所述测试数目的路由。测试路由发送模块140用于发送所述读取的测试路 由到被测试设备200。从而实现了路由测试系统100发送符合网上路由分布规 律,且具有随机特性的测试路由到被测试设备200。 以上对本发明所提供的一种发送测试路由的方法和系统进行了详细介绍, 本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的 说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般 技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处, 综上所述,本说明书内容不应理解为对本发明的限制。 |