专利名称:一种三层报文转发方法及装置的制作方法
技术领域:
本发明涉及通信技术领域,尤其涉及一种三层报文转发方法及装置。
背景技术:
交换设备在网络中承担着大量网络报文的转发任务,为了提高交换设备 的报文转发效率,通常将报文转发和路由表维护分开进行,报文转发由交换
设备的转发冲莫块完成,路由表维护由交换设备的CPU (Central Processing Unit ,中央处理单元)进行,这样在交换设备内形成了控制组件(CPU)和 转发组件(转发模块)分离的构架形式。由于CPU仅完成相对实时性要求不 高的报文转发表的处理操作,对其性能要求也大大下降,从而可以P争低成本。 通常,报文转发是独立进行的,以三层ARP (Address Resolution Protocol,地 址解析协议)数据为例,当交换设备的转发模块已知报文相对应的ARP表项 时,该报文由转发模块直接处理转发,当转发模块中不存在该ARP表项时, 例如由于ARP表项老化或交换设备重新启动等原因,转发模块无法确定该报 文转发的目的地址,此时需要交换设备向服务器发送ARP请求报文以获得该 ARP表项。为此,转发模块将该种报文送往CPU, CPU分析后向服务器发送 ARP请求报文,等待服务器发送的ARP回应报文到达后刷新转发模块中的 ARP表项,这样,转发模块就可依据新的ARP表项进行报文转发。
由于交换设备中CPU的交换性能远低于转发模块,当去向CPU的三层未 匹配报文(在转发模块中该报文对应的ARP表项不存在,无法根据ARP表项 及报文目的地址确定该报文的目的MAC地址和出端口 )的数量较大时,CPU 无法及时从服务器获取新ARP表项,CPU的报文入口将会被这些报文阻塞, CPU入口会按照队列丟弃报文,和三层未匹配报文处在同样CPU队列的报文 会被丢掉一部分,导致对应业务无法正常进行。
当CPU收到来自转发模块的ARP请求报文后,先向转发模块中写入指导该报文转发的假ARP表项(这个ARP表项设置转发到转发模块"黑洞",即 将该报文的目的MAC地址或出端口设置为不存在,当转发模块根据报文目的 地址在该4叚ARP表项中找不到对应目的MAC地址或出端口时,直接丟弃该 报文),再向服务器发送ARP请求报文,根据交换设备的CPU处理能力不同, 该假ARP表项在转发模块中保持一定时间(该时间为CPU获取新ARP表项 的时间),保证同样目的地址的三层报文进入转发模块后,按照该假ARP表 项直接丟弃,不再进行转发,这样在CPU等待收取ARP回应报文时,去往该 ARP目的地址的报文不再拥塞CPU,也不影响网上其他业务。
现有技术中, 一种报文转发场景如图1所示,PC (个人计算机)通过交 换设备访问服务器,报文在交换设备做三层转发。当PC访问服务器,但是交 换设备还没有学习到服务器的ARP表项时,PC通过交换设备进行报文转发 的过程包括以下步骤
步骤IOI, PC向交换设备发送报文,该报文在交换设备的转发模块上为 三层未匹配报文,交换设备开始ARP学习过程,即交换设备中转发模块向CPU 发送ARP请求报文,CPU向转发模块下发假ARP表项;
步骤102,交换设备的CPU向服务器发送ARP请求报文,以获得该三层 未匹配寺艮文的目的地址对应的ARP表项;
步骤103,交换设备的CPU收到服务器发送的ARP回应报文,该回应报 文中携带该三层未匹配才艮文的目的地址对应的ARP表项;
步骤104,交换设备的CPU根据ARP回应报文中携带的新ARP表项更 新转发模块中的ARP表项的目的MAC地址和出端口 ,使PC再次发送的该 报文可以通过交换设备的转发模块直接转发到服务器。
该种报文转发场景中,交换设备更新ARP表项为真正目的MAC地址和 出端口之前,三层报文都会匹配转发模块的假ARP表项,按照"黑洞,,丟弃 报文。当CPU处理能力比较差、网络环境比较差时,由于交换设备比较长的 时间收不到服务器的ARP回应报文以更新转发模块中的ARP表项,会有很多 报文丟弃。
另 一种冲艮文转发场景如图2所示,PC通过交换i殳备访问外部网络服务器有两条链路(链路A和链路B ),由于通过链路A和链路B去往服务器的路 径长短不同,这两条链路不等价,所以形成的转发表项指向其中一条链路(链 路A,称为主路径),另外一条链路作为备份(链路B,称为备份路径)。PC 通过交换设备进行报文转发的过程包括以下步骤
步骤201,当两条链路都可达时,去往服务器地址的路由指向主路径。 步骤202,当主路径出现问题断掉时,对应路由切换到备份路径,主路径 对应设置为假ARP表项;路由切换和主路径为假ARP表项下发到转发模块, 由CPU的两个不同任务并行处理,当出现先设置主路径为假ARP表项,再设 置切换路由,这两个操作之间的时间内,就会出现对应路由指向假ARP表项, PC发送到交换设备的报文被转发到"黑洞"丟弃的情况。 步骤203,路由切换到备份路径后,主路径又恢复正常。 步骤204,交换设备通过主路径向服务器发送ARP请求报文。 步骤205,交换设备收到服务器通过主路径发送的ARP回应报文,交换 设备中的CPU下发真实ARP表项到转发模块。
步骤206,交换设备和主路径对端设备交互路由,学到对应路由后,发现 主路径链路A开销最小,对应路由再切换回主路径,PC发送的报文通过交换 设备走链路A转发到服务器。
任务处理,不能保证时序为先下发ARP表项到转发模块再切换路由,由于 ARP表项下发过程中交互ARP报文需要时间比较长,导致路由切换先于ARP 表项下发转发模块,此时交换设备没有真正学到主路径对应ARP表项,而是 先进行路由切换,CPU会向转发模块下发指向"黑洞"的假ARP表项,所以 在流量切换的过程中,对应三层转发流量断流。
综上两个例子,虽然现有技术保证了 CPU不会受到大量三层未匹配"R文 冲击,但是在某些情况下,对应转发报文按照假ARP进行转发进黑洞丟弃, 在交换设备收到ARP回应报文,并下发真正转发ARP表项前,报文都会被丢 弃,不会正常转发。
发明内容
本发明提供了 一种三层报文转发方法及装置,以避免在ARP学习过程中, 由于CPU向转发芯片下发假ARP表项把^^文引入"黑洞"造成的丢包。
本发明提供了一种三层报文转发方法,应用于包括转发模块、处理模块 的交换设备中,所述方法包括以下步骤
所述处理模块记录前次正常转发的邻居软件表项;
所述转发模块接收用户设备发送的报文,如果所述转发模块中没有与所 述报文目的地址匹配的邻居表项,向所述处理模块发送邻居表项请求报文;
所述处理模块根据所述邻居表项请求报文中携带的报文目的地址查找匹 配的前次邻居软件表项,如果找到,将所述前次邻居软件表项作为假邻居表 项下发到所述转发模块,使所述转发模块按照所述前次邻居软件表项中的 MAC地址对所述4艮文进行转发。
如果根据所述邻居表项请求报文中携带的报文目的地址,没有查找到匹
配的前次邻居软件表项,则指令所述转发模块丢弃所述报文。
其中,将所述前次邻居软件表项作为假邻居表项下发到所述转发模块, 之前还包括
果没有变化,则将所述前次邻居软件表项下发到所述转发模块,如果MAC地 址发生变化,关闭所述将前次邻居软件表项下发到所述转发模块的功能。
其中,将所述前次邻居软件表项作为假邻居表项下发到所述转发模块, 之前还包括
通过三层探测报文确定是否存在路由环路,如果不存在,则将所述前次 邻居软件表项下发到所述转发模块,如果存在,则指令所述转发模块丟弃所 述报文。
其中,将所述前次邻居软件表项作为假邻居表项下发到所述转发模块, 之前还包括
对所述转发模块中的每一个假邻居表项进行跟踪,如果预设时间内所述 假邻居表项没有被刷新为真邻居表项,将所述假邻居表项修改为直接丢弃报文。
其中,还包括对所述邻居软件表项进行维护,具体包括 启动前次邻居软件表项老化定时器,定时将设置老化标记的邻居软件表 项进行删除;或
启动前次邻居软件表项老化定时器,每次进行定时操作,都将设置老化 标记的邻居软件表项老化计数器加一,判断所述老化计数器是否达到第一老 化阈值,如果达到所述第一老化阈值,将对应邻居软件表项删除。
其中,所述记录前次正常转发的邻居软件表项之前还包括
判断前次邻居软件表项中的表项数是否达到阈值,如果达到所述阈值, 提前老化邻居软件表项,具体为当老化定时器达到第三老化阈值,删除所 述设置老化标记的邻居软件表项,所述第三老化阈值小于所述第一老化阈值。
本发明还提供了一种交换装置,包括转发模块、处理模块和存储模块,
所述存储模块,用于存储前次邻居软件表项;
所述处理模块,与所述存储模块连接,用于记录维护所述存储模块中的 前次邻居软件表项,并根据所述转发模块发送的邻居表项请求报文携带的报 文的目的地址查找匹配的前次邻居软件表项,如果找到,将所述前次邻居软 件表项作为假邻居表项下发到所述转发模块;
所述转发模块,与所述处理模块连接,用于接收用户设备发送的报文, 如果所述转发模块中没有与所述报文目的地址匹配的邻居表项时,向所述处 理模块发送邻居表项请求报文,并接收所述处理模块发送的假邻居表项,如 果所述假邻居表项为前次邻居软件表项,则根据所述前次邻居软件表项中的 MAC地址对所述报文进行转发,如果假邻居表项指向硬件黑洞,则丢弃所述 报文。
其中,所述处理模块,还用于当根据所述邻居表项请求报文中携带的报 文目的地址,没有查找到匹配的前次邻居软件表项时,指令所述转发模块丢 弃所述报文。
其中,所述处理模块,还用于检测所述报文目的地址在所述交换设备上 对应的MAC地址是否变化,如果没有变化,则将所述前次邻居软件表项下发到所述转发模块,如果MAC地址发生变化,关闭所述将前次邻居软件表项下 发到所述转发模块的功能。 其中,
所述处理模块,还用于通过三层探测报文确定是否存在路由环路,如果 不存在,则将所述前次邻居软件表项下发到所述转发模块,如果存在,则指 令所述转发模块丢弃所述报文。
其中,
所述处理模块,还用于对所述转发模块中的每一个假邻居表项进行跟踪, 如果预设时间内所述假邻居表项没有被刷新为真邻居表项,将所述假邻居表 项修改为直接丟弃报文。
其中,
所述处理模块,还用于启动前次邻居软件表项老化定时器,定时将设置 老化标记的邻居软件表项进行删除;或启动前次邻居软件表项老化定时器, 每次进行定时操作,都将设置老化标记的邻居软件表项老化计数器加一,判 断所述老化计数器是否达到第一老化阈值,如果达到所述第一老化阈值,将 对应邻居软件表项删除。
其中,
所述处理模块,还用于判断前次邻居软件表项中的表项数是否达到阈值, 如果达到所述阈值,提前老化邻居软件表项,具体为当老化定时器达到第 三老化阈值,删除所述设置老化标记的邻居软件表项,所述第三老化阈值小 于所述第一老化阈值。
与现有技术相比,本发明具有以下优点
本发明中,当邻居表项(例如ARP或ND等)的MAC地址保持不变, 对每个学到的邻居表项信息进行记录,后续再设置假邻居表项时,都按照前 次学到的邻居表项信息下发到转发模块。对于下发假邻居表项时MAC地址与 记录的前次邻居表项一致的情况,邻居表项交互学习过程中,报文转发不再 丢包;ARP的MAC地址变化情况下,可以快速切换到硬件"黑洞,,,减少流 量泄漏。本发明还可以对邻居表项软件表进行维护,例如添加、修改和老化
10删除等,以保证邻居软件表项处于最新状态。
图l是现有技术中一种三层报文转发场景示意图; 图2是现有技术中另一种三层报文转发场景示意图; 图3是本发明中一种三层报文转发方法流程图; 图4是本发明中一种交换装置结构图。
具体实施例方式
本发明的核心思想是记录并维护上次学到真正转发的邻居软件表项信 息(例如ARP或ND软件表项信息);当CPU向转发模块下发假邻居软件表 项时,根据接收报文的目的地址在前次邻居软件表项中进行匹配查找,如果 找到,将前次邻居软件表项作为假邻居表项下发到转发模块;如果在前次邻 居软件表项中没有找到,按照"黑洞"处理。以ARP为例在转发模块中有 两种硬件实现逻辑第一种情况,ARP)MAC)出端口,即,ARP表项指向 MAC地址表项,匹配ARP转发的报文最终需要根据ARP表项中对应MAC 表项的出端口信息进行封装。第二种情况,ARP》MAC+出端口,即,ARP 表项中有MAC地址和出端口信息,该出端口信息和MAC表项中对应的出端 口信息一致。所以,前次邻居表项中只记录MAC地址就可以了。对于第一种 情况,转发模块会根据MAC地址找到对应出端口,对于第二种情况,可以在 设置ARP表项时查找对应的MAC地址找到出端口 ,设置到ARP表项中。
本文主要以ARP表项为例,对通过记忆的邻居表项来保障三层硬件转发 快速切换的方法进行说明,对于ND等其他邻居表项的应用场景原理相同, 不在赘述。
本发明提供了一种三层报文转发方法,应用于包括转发模块、处理模块 的交换,没备中,所述方法如图3所示,包括以下步骤
步骤301,处理模块记录前次正常转发的邻居软件表项;
步骤302,转发模块接收用户设备发送的报文,如果所述转发模块中没有与所述报文目的地址匹配的邻居表项,向所述处理模块发送邻居表项请求报
文;
步骤303,处理模块根据所述邻居表项请求报文中携带的报文目的地址查 找匹配的前次邻居软件表项,如果找到,将所述前次邻居软件表项作为假邻 居表项下发到所述转发模块,使所述转发模块按照所述前次邻居软件表项中 的MAC地址对所述报文进行转发,如果没有找到,指令所述转发模块丟弃所 述报文。
由于在实际网络中,存在两种情况 一、指定目的地址的ARP表项对应 的MAC地址不发生变化;二、指定目的地址的ARP表项对应的MAC地址 发生变化。
其中,第一种情况最常见,本发明主要针对这种情况进行优化。由于ARP 表项的MAC地址不变,在需要向转发模块下发假ARP表项时,对应假ARP 表项不再指向"黑洞",而是将该假ARP表项设置为前次ARP软件表项的 MAC地址,对于在前次ARP软件表项中没有找到的ARP表项,按照"黑洞" 向转发模块下发假ARP表项。由于ARP表项对应的MAC地址没有发生变化, 下发假ARP表项时,转发模块中ARP表项实际就已经是真ARP表项,对应 流量在下发假ARP表项时可以正常转发,不必等到来自服务器的ARP回应报 文收到后才能正常向转发模块下发真ARP表项。
对于第二种情况,当ARP表项的MAC地址发生变化时,下发假ARP表 项和真实ARP表项不同,此时流量按照上次学到的MAC地址进行转发,流 量可能发送到目的设备以外的设备,造成流量泄露。
然而,只要能够学习到真正的ARP表项,这种流量泄漏时间很短,不会 影响到正常转发。因此,可以对转发模块中的每一个假ARP表项进行跟踪, 一定时间后,如果这个假ARP表项没有被刷新为真ARP表项,就将该假ARP 表项修改为"黑洞"。
对于一些需要避免流量泄漏的场景,在步骤303中将所述前次邻居软件 表项作为假邻居表项下发到所述转发模块之前,需要检测所述报文目的地址 在所述交换设备上对应的MAC地址是否变化,如果没有变化,则将所述前次邻居软件表项下发到所述转发模块,如果MAC地址发生变化,关闭所述将前 次邻居软件表项下发到所述转发模块的功能。 其中,关闭上述功能的场景包括
1, 当报文泄漏会对其他设备造成影响,可以关闭向转发模块下发假ARP 表项为上次转发的真ARP表项的机制,使得流量不会发送到其他设备。
2, 当存在路由环路,造成流量无限循环的场景。跟踪按照前次ARP软 件表项向转发模块下发的ARP表项,发送TTL等于2的对应目的IP三层探 观'讨艮文,确定是否会收到TTL为1的同样源IP和目的IP的三层报文,如果 是,确认存在路由环路,即两台直连网络设备学习到的路由表项互相指向对 端,会造成流量循环,为了避免这种流量循环,需要将对应假ARP表项恢复 为"黑洞"表项。
本发明为了保证ARP软件表项的实时性,还需要维护前次ARP软件表项 信息,例如添加、修改和老化删除前次ARP软件表项信息。
其中,前次ARP软件表项信息添加、纟务改过程包括
当交换设备添加(或者修改)正常转发的ARP表项时,查找前次ARP 软件表项是否有对应记录,如果在前次ARP软件表项中没有找到对应记录, 记录该正常转发的ARP表项中的IP、 MAC地址到前次ARP软件表项中;如 果在前次ARP软件表项中找到对应记录,更新该正常转发的ARP表项中的 IP地址、MAC地址到前次ARP软件表项。无论是添加还是修改前次ARP软 件表项,ARP软件表项为更新后状态,且没有作为假ARP表项下发到转发模 块,因此,需要将对应前次ARP软件表项中的老化标记清除、老化定时计数 器清零和清除下发假ARP表项标记。
当交换设备添加(或者》务改)对应ARP表项为〗叚ARP表项时,查找前次 ARP软件表项是否有对应记录,如果在前次ARP软件表项中没有找到对应记 录,向转发模块下发假ARP表项,使该报文指向"黑洞",对应报文进入转 发模块后直接丟弃;如果在前次ARP软件表项中找到对应记录,对应的假 ARP表项按照前次ARP软件表项的MAC地址进行设置,同时设置前次ARP软件表项中对应表项的老化标记和下发假ARP表项标记。 其中,前次ARP软件表项信息老化删除过程包括
当交换i殳备删除对应ARP表项时,查找前次ARP软件表项是否有对应记 录,如果在前次ARP软件表项中找到对应记录,设置前次ARP软件表项中对 应ARP表项的老化标记,老化定时计数器清零,清除下发假ARP表项标记。
交换设备初始化时,启动前次ARP软件表项老化定时器,定时将设置老 化标记的表项按照一定周期进行删除;可以根据交换设备学到的ARP表项数 目和交换设备所处位置决定周期的长短;定时器的时间可以设置的稍短,每 次进行定时操作,都将设置老化标记的表项老化计数器加一,判断是否达到 第一老化阈值Yl,如果达到Yl,将对应表项删除。
同时,考虑到前次ARP软件表项大小和交换设备内存、表项查找速度都 有关联,在向这个ARP软件表项添加新的ARP表项时,判断前次ARP软件 表项中表项数是否达到第二阈值Y2,如果达到Y2,启动提前老化,当老化 定时计数器达到第三老化阈值Y3 (Y3<Y1),对应表项将被删除。
增加定时器,对下发上次学到的ARP信息的假ARP表项进行跟踪,例如 通过下发假ARP表项标记进行跟踪,确认上次下发的假ARP表项是否学到对 应真ARP表项,如果在一定时间内没有学到真ARP表项,说明该目的地址对 应的真ARP表项可能获取不到,为了避免流量泄漏到其他设备,需要将对应 假ARP表项修改为指向"黑洞"。
为使得本发明的目的、技术方案及优点更加清楚明白,以下举两个较佳 实施例对本发明的技术方案做进一步的详细说明。本发明的较佳实施例的介 绍中,均以ARP为例对邻居表项的维护进行说明,
第一较佳实施例解决图l所述问题,主要包括以下步骤
1,交换设备启动后,PC发送的三层报文目的地址对应ARP表项在转发 模块中没有学到,转发模块向CPU发送ARP请求报文;
2,交换设备触发ARP表项学习过程,交换设备中的CPU向转发模块下 发布iARP表项,由于此目的地址的假ARP表项为第一次下发,在前次ARP软件表项中没有找到与该目的地址匹配的ARP表项,向转发模块下发假ARP 表项,使报文指向"黑洞";
3,交换设备的CPU向服务器发送ARP请求报文;
4,服务器收到ARP请求报文后,向交换设备的CPU发送ARP回应报文, 该回应报文中携带该目的地址对应的ARP表项;
5,交换设备的CPU收到ARP回应报文,触发修改ARP软件表项操作, 修改ARP软件表项为真ARP表项的MAC地址信息;如果在前次ARP软件 表项中没有找到对应记录,初始化对应前次ARP软件表项,记录对应ARP 表项的IP、 MAC地址到前次ARP软件表项中,将该ARP软件表项对应的下 发假ARP表项标记清除、老化标记清除、老化定时计数器清零;
6,对应ARP出端口链路故障断掉,由于此ARP没有路由指向,CPU下 发指令从转发模块删除对应的ARP表项,在前次ARP软件表项中找到对应记 录,设置对应表项的老化标记,老化定时计数器清零,清除下发假ARP表项 标记',
7, 再次接收到来自PC的三层报文,该三层报文目的地址在转发模块ARP 表项中没有找到,转发模块向CPU发送ARP请求报文;
8, 交换设备CPU触发ARP学习过程,向转发模块下发假ARP表项,由 于老化时间没到,此IP地址在前次ARP软件表项中找到,假ARP表项按照 前次ARP软件表项中记录的MAC地址和该MAC地址对应的出端口信息下 发,此时出端口断掉状态,报文丟弃;
9,设置前次ARP软件表项中对应表项下发,支ARP表项标记;
10,当对应ARP出端口链路恢复,如果前次ARP软件表项和即将学到的 ARP表项完全一致,MAC地址不变,此时转发报文已经恢复正常;
11 ,交换设备的CPU向服务器发送ARP请求报文;
12,服务器收到ARP请求报文后,向交换设备的CPU发送ARP回应报 文,该回应报文中携带该目的地址对应的ARP表项;
13,交换设备的CPU收到ARP回应才艮文,CPU向转发纟莫块下发修改ARP 表项操作,将转发模块中的ARP表项修改为真ARP表项的MAC地址;在前
15次ARP软件表项中找到对应记录,修改对应表项的IP、MAC地址到前次ARP 软件表项中,清除下发假ARP表项标记、老化标记清除、老化定时计数器清 零。此时,对于前次ARP软件表项和最新学到的ARP表项不同的情况,由于 转发模块中已更新了 ARP表项,流量也恢复正常。
第二较佳实施例解决图2所述的问题,包括以下步骤
1, 在网络中转发到指定目的地址的路由有两个下一跳(两条路径),由 于去往不同的路由路径长短不同,这两个下一跳不是等价的,所以形成的转 发表项指向其中一个下一跳(称为主路径),另外一个下一跳作为备份(称为 备份路径),当两个路径都可达时,路由指向主路径下一跳。
2, 两个路径下一跳ARP表项都已经学到,在前次ARP软件表项中有对 应ARP表项保存。
3, 当主路径链路A出现问题断掉时,对应路由切换到备份路径链路B, 链路A对应下 一跳设置为假ARP表项。
4,此时从前次ARP软件表项中可以找到对应表项,此假ARP表项下发 的为前次ARP表项中对应的MAC地址,所以转发模块中对应ARP表项的 MAC地址没有改变,还是指向主路径。
5,路由切换下发转发模块和主路径下发假ARP表项到转发模块由CPU 两个不同的任务并行处理,当出现先设置并下发主路径为假ARP表项,再设 置并下发切换路由情况,可能存在流量瞬断。
6,主路径断掉有两种情况 一、主路径链路层断掉,此时流量断不可避 免;二、主路径三层虚链路(VLAN虚接口 )断掉,MAC地址都没变,此时 流量在切换过程中还可以正常转发。
7,切换后,当主路径链路A恢复正常时,由于主路径下一跳开销最小, 路由还会再切换回主路径下 一跳。
8, 此时有两个操作需要做, 一个是主路径和对端设备交互ARP信息, 下发真ARP表项到转发模块;另一个是和主路径对端设备交互路由,学到对 应路由后,发现主路径开销最小,对应路由进行切换。
9, 同上原因,200910136159.5
说明书第13/16页
不能保证时序为先学习下发ARP表项到硬件再切换路由下一跳,通常由于 ARP表项学习需要交互ARP报文的延时导致路由切换先于ARP表项下发硬 件,此时主路径对应ARP表项没有真正学到,切换路由先下发,然后下发对 应的假ARP表项,在前次ARP软件表项中可以找到对应的表项,按照这个表 项下发MAC地址。因为ARP表项的MAC地址没有变化,下发假ARP表项 和真ARP表项一样,所以在流量切换的过程中对应三层转发流量不会断流。
本发明中所述的具体实施方式
,均能应用到IPV6中邻居发现表项的维护。
本发明还提供了一种交换装置,如图4所示,包括转发模块410、处理模 块420和存储模块430。
存储模块430,用于存储前次邻居软件表项;若网络中到目的地址的路由 存在两个下一跳,即一个为主i 各径, 一个为备份路径,当两个路径下一跳邻 居表项都已经学到时,在前次邻居软件表项中有对应邻居表项保存。
处理模块420,与存储模块410连接,用于记录维护存储模块430中的前 次邻居软件表项,并根据转发模块410发送的邻居表项请求报文携带的目的 地址查找匹配的前次邻居软件表项,如果找到,将前次邻居软件表项作为假 邻居表项下发到转发模块410,如果没有找到,指令转发模块410丢弃报文;
转发模块410,与处理模块420连接,用于接收用户设备发送的报文,如 果转发模块410中没有与报文目的地址匹配的邻居表项时,向处理模块420 发送邻居表项请求报文,并接收处理模块420发送的假邻居表项,如果假邻 居表项为前次邻居软件表项,则根据前次邻居软件表项中的MAC地址对报文 进行转发,如果假邻居表项指向硬件黑洞,则丟弃报文。
其中,处理模块420,还用于检测报文目的地址在交换设备上对应的MAC 地址是否变化,如果没有变化,则将前次邻居软件表项下发到转发模块410, 如果MAC地址发生变化,关闭将前次邻居软件表项下发到转发^f莫块410的功 能。在实际网络中,存在两种情况 一、指定目的地址的邻居表项对应的MAC 地址不发生变化;二、指定目的地址的邻居表项对应的MAC地址发生变化。 对于第一种情况,由于邻居表项的MAC地址不变,在需要向转发模块下发假 邻居表项时,对应假邻居表项不再指向"黑洞",而是将该假邻居表项设置为前次邻居软件表项的MAC地址,对于在前次邻居软件表项中没有找到的邻居 表项,按照"黑洞"向转发模块下发假邻居表项。由于邻居表项对应的MAC 地址没有发生变化,下发假邻居表项时,转发模块中邻居表项实际就已经是 真邻居表项,对应流量在下发假邻居表项时可以正常转发,不必等到来自服 务器的邻居回应报文收到后才能正常向转发模块下发真邻居表项。对于第二 种情况,对于第二种情况,当ARP表项的MAC地址发生变化时,下发假ARP 表项和真实ARP表项不同,此时流量按照上次学到的MAC地址进行转发, 流量可能发送到目的设备以外的设备,造成流量泄露。对于第二种情况,当 ARP表项的MAC地址发生变化时,下发假邻居表项和真实邻居表项不同, 此时流量按照上次学到的MAC地址进行转发,流量可能发送到目的设备以外 的设备,造成流量泄露。
其中,处理模块420,还用于通过三层探测报文确定是否存在路由环路, 如果不存在,则将前次邻居软件表项下发到转发模块410,如果存在,则指令 转发模块410丟弃报文。当存在路由环路时,会造成流量无限循环。因此需 要跟踪按照前次邻居软件表项向转发模块下发的邻居软件表项,发送TTL等 于2的对应目的IP三层探测报文,确定是否会收到TTL为1的同样源IP和 目的IP的三层报文,如果是,确认存在路由环路,即两台直连网络设备学习 到的路由表项互相指向对端,会造成流量循环,为了避免这种流量循环,需 要将对应假ARP表项恢复为"黑洞"表项。
其中,处理模块420,还用于对转发模块410中的每一个假邻居表项进行 跟踪,如果预设时间内假邻居表项没有被刷新为真邻居表项,将假邻居表项 修改为直接丢弃报文。当ARP表项的MAC地址发生变化时,下发假ARP表 项和真实ARP表项不同,此时流量按照上次学到的MAC地址进行转发,流 量可能发送到目的设备以外的设备,造成流量泄露。然而,只要能够学习到 真正的ARP表项,这种流量泄漏时间很短,不会影响到正常转发。
当对前次邻居表项信息进行老化删除时,处理模块420还用于
其中,处理模块420,还用于启动前次邻居软件表项老化定时器,定时将 设置老化标记的邻居软件表项进行删除;或启动前次邻居软件表项老化定时
18器,每次进行定时操作,都将设置老化标记的邻居软件表项老化计数器加一, 判断老化计数器是否达到第一老化阈值,如果达到第一老化阈值,将对应邻 居软件表项删除。在该交换装置中,还包括邻居软件老化定时器,用于在计 时周期后通知处理模块将设置老化标记的表项进行删除。该周期可以根据交 换设备学到的邻居表项数目和交换设备所处位置来决定。另外,定时器的时 间可以设置的稍短,每次进行定时操作,都将设置老化标记的表项老化计数
器加一,判断是否达到第一老化阈值Yl,如果达到Yl,将对应表项删除。
其中,处理模块420,还用于判断前次邻居软件表项中的表项数是否达到 阈值,如果达到阈值,提前老化邻居软件表项,具体为当老化定时器达到 第三老化阈值,删除设置老化标记的邻居软件表项,第三老化阈值小于第一 老化阈值。由于前次ARP软件表项大小和交换设备内存、表项查找速度都有 关联,在向这个ARP软件表项添加新的ARP表项时,判断前次ARP软件表 项中表项数是否达到第二阈值Y2,如果达到Y2,启动提前老化。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护 范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发 明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。 基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软 件产品可以存储在一个非易失性存储介质(可以是CD-ROM, U盘,移动硬 盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服 务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的 模块或流程并不 一 定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述 进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一 个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆 分成多个子模块。上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此, 任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
权利要求
1、一种三层报文转发方法,应用于包括转发模块、处理模块的交换设备中,其特征在于,所述方法包括以下步骤所述处理模块记录前次正常转发的邻居软件表项;所述转发模块接收用户设备发送的报文,如果所述转发模块中没有与所述报文目的地址匹配的邻居表项,向所述处理模块发送邻居表项请求报文;所述处理模块根据所述邻居表项请求报文中携带的报文目的地址查找匹配的前次邻居软件表项,如果找到,将所述前次邻居软件表项作为假邻居表项下发到所述转发模块,使所述转发模块按照所述前次邻居软件表项中的MAC地址对所述报文进行转发。
2、 如权利要求l所述的方法,其特征在于,还包括 如果根据所述邻居表项请求报文中携带的报文目的地址,没有查找到匹配的前次邻居软件表项,则指令所述转发模块丢弃所述报文。
3、 如权利要求l所述的方法,其特征在于,将所述前次邻居软件表项作 为假邻居表项下发到所述转发模块,之前还包括果没有变化,则将所述前次邻居软件表项下发到所述转发模块,如果MAC地 址发生变化,关闭所述将前次邻居软件表项下发到所述转发模块的功能。
4、 如权利要求l所述的方法,其特征在于,将所述前次邻居软件表项作 为假邻居表项下发到所述转发模块,之前还包括通过三层探测报文确定是否存在路由环路,如果不存在,则将所述前次 邻居软件表项下发到所述转发模块,如果存在,则指令所述转发模块丢弃所 述报文。
5、 如权利要求l所述的方法,其特征在于,将所述前次邻居软件表项作 为假邻居表项下发到所述转发模块,之前还包括对所述转发模块中的每一个假邻居表项进行跟踪,如果预设时间内所述 假邻居表项没有被刷新为真邻居表项,将所述假邻居表项修改为直接丟弃报 文。
6、 如权利要求1所述的方法,其特征在于,还包括 对所述邻居软件表项进行维护,具体包括启动前次邻居软件表项老化定时器,定时将设置老化标记的邻居软件表 项进行删除;或启动前次邻居软件表项老化定时器,每次进行定时操作,都将设置老化 标记的邻居软件表项老化计数器加一 ,判断所述老化计数器是否达到第 一老 化阈值,如果达到所述第一老化阈值,将对应邻居软件表项删除。
7、 如权利要求6所述的方法,其特征在于,所述记录前次正常转发的邻 居软件表项之前还包括判断前次邻居软件表项中的表项数是否达到阔值,如果达到所述阈值, 提前老化邻居软件表项,具体为当老化定时器达到第三老化阈值,删除所 述设置老化标记的邻居软件表项,所述第三老化阈值小于所述第一老化阈值。
8、 一种交换装置,包括转发模块、处理模块和存储模块,其特征在于, 所述存储模块,用于存储前次邻居软件表项;所述处理模块,与所述存储模块连接,用于记录维护所述存储模块中的 前次邻居软件表项,并根据所述转发模块发送的邻居表项请求报文携带的报 文的目的地址查找匹配的前次邻居软件表项,如果找到,将所述前次邻居软 件表项作为假邻居表项下发到所述转发模块;所述转发模块,与所述处理模块连接,用于接收用户设备发送的报文, 如果所述转发模块中没有与所述报文目的地址匹配的邻居表项时,向所述处 理模块发送邻居表项请求报文,并接收所述处理模块发送的假邻居表项,如 果所述假邻居表项为前次邻居软件表项,则根据所述前次邻居软件表项中的 MAC地址对所述报文进行转发,如果假邻居表项指向硬件黑洞,则丢弃所述 报文。
9、 如权利要求8所述的交换装置,其特征在于,所述处理模块,还用于当根据所述邻居表项请求报文中携带的报文目的 地址,没有查找到匹配的前次邻居软件表项时,指令所述转发模块丢弃所述报文。
10、 如权利要求8所述的交换装置,其特征在于,所述处理模块,还用于检测所述报文目的地址在所述交换设备上对应的MAC地址是否变化,如果没有变化,则将所述前次邻居软件表项下发到所述 转发模块,如果MAC地址发生变化,关闭所述将前次邻居软件表项下发到所 述转发模块的功能。
11、 如权利要求8所述的交换装置,其特征在于,所述处理模块,还用于通过三层探测报文确定是否存在路由环路,如果 不存在,则将所述前次邻居软件表项下发到所述转发模块,如果存在,则指 令所述转发模块丟弃所述报文。
12、 如权利要求8所述的交换装置,其特征在于,所述处理模块,还用于对所述转发模块中的每一个假邻居表项进行跟踪, 如果预设时间内所述假邻居表项没有被刷新为真邻居表项,将所述假邻居表 项修改为直接丢弃报文。
13、 如权利要求8所述的交换装置,其特征在于,所述处理模块,还用于启动前次邻居软件表项老化定时器,定时将设置 老化标记的邻居软件表项进行删除;或启动前次邻居软件表项老化定时器, 每次进行定时操作,都将设置老化标记的邻居软件表项老化计数器加一,判 断所述老化计数器是否达到第一老化阈值,如果达到所述第一老化阈值,将 对应邻居软件表项删除。
14、 如权利要求13所述的交换装置,其特征在于,所述处理模块,还用于判断前次邻居软件表项中的表项数是否达到阈值, 如果达到所述阈值,提前老化邻居软件表项,具体为当老化定时器达到第 三老化阈值,删除所述设置老化标记的邻居软件表项,所述第三老化阈值小 于所述第一老化阈值。
全文摘要
本发明公开了一种三层报文转发方法,包括处理模块记录前次正常转发的邻居软件表项;转发模块接收用户设备发送的报文,如果转发模块中没有与报文目的地址匹配的邻居表项,向处理模块发送邻居表项请求报文;处理模块根据邻居表项请求报文中携带的报文目的地址查找匹配的前次邻居软件表项,如果找到,将前次邻居软件表项作为假邻居表项下发到转发模块,使转发模块按照前次邻居软件表项中的MAC地址对报文进行转发。本发明对于下发假邻居表项时MAC地址与记录的前次邻居表项一致的情况,邻居表项交互学习过程中,报文转发不再丢包。
文档编号H04L29/06GK101540731SQ200910136159
公开日2009年9月23日 申请日期2009年4月30日 优先权日2009年4月30日
发明者捷 李, 王庆文 申请人:杭州华三通信技术有限公司