背景技术
为使局域网内的本地主机能够通过外网实现流量转发、并同时兼顾流量的负载均衡和转发的可靠性,现有技术中通常会采用负载均衡的组网方式。即,在一个局域网内由至少两台本地路由器互为备份地为该局域网内的本地主机提供网关功能,并将提供网关功能的至少两台本地路由器接入至局域网之外的同一台外网路由器。其中:
对于本地主机发向外网的上行流量,提供网关功能的每台本地路由器需要创建以已知外网目的IP为前缀(Dest)、以外网路由器为下一跳(Nexthop)的若干条外网路由;
对于外网发向本地主机的下行流量,提供网关功能的每台本地路由器需要创建以局域网的网段IP地址为前缀、以本地主机为下一跳的网段路由,以及,提供网关功能的每台本地路由器还需要向外网路由器发布网段路由,以便于外网路由器能够依据每台本地路由器发布的网段路由分别创建以局域网的网段IP地址为前缀、以该本地路由器为下一跳的外网路由。
由此,在外网路由器和提供网关功能的至少两台本地路由器之间就形成了上行方向和下行方向上的多条外网路由,从而使上行流量和下行流量均可分担在不同的本地路由器转发,而且,当有本地路由器与外网路由器之间的链路发生故障时,其他本地路由器也可以代为实现上行流量和下行流量的转发。
虽然上述负载均衡的组网方式能够实现负载分担、并通过网关备份来提高流量转发的可靠性,但是,却容易导致上行流量和下行流量不一致的情况出现。具体说:
当有本地主机产生发向外网的上行流量时,由于与该本地主机直连的一台本地路由器会最先接收到上行流量,因而首选地由该本地路由器向外网路由器转发上行流量;
当外网路由器有需要向本地主机转发的下行流量时,由于外网路由器中相应的各条外网路由均是以该本地主机所在局域网的网段IP地址为前缀,因而外网路由器无法分辨出哪一台本地路由器与该本地主机直连,只能任选一条外网路由向对应的一台本地路由器转发下行流量,此后,若接收到下行流量的本地路由器未直连该本地主机,则需要再次将下行流量在局域网内转发至直连该本地主机的本地路由器;
从而,对于与任意一台本地主机直连的本地路由器来说,该本地主机的上行流量的发出、以及该本地主机的下行流量的流入就有可能发生在不同的端口,此时就出现了上行流量和下行流量不一致的情况出现。
由于上述的上行流量和下行流量不一致的情况通常会被本地路由器中的防火墙认定为攻击流量、并拒绝其通过,因此,上述的上行流量和下行流量不一致的情况就有可能导致流量的丢失。
图1为现有技术中的一种负载均衡组网方式的实例示意图。在如图1所示的实例中,局域网内由本地路由器RouteA和RouteB互为备份地为该局域网内的本地主机PC1和PC2提供网关功能,并且,本地路由器RouteA和RouteB还接入在同一台外网路由器RouteC。
其中,对于外网发向PC1的下行流量,RouteA和RouteB中均创建有以局域网的网段IP地址10.0.0.0/8为前缀、以PC1为下一跳的一条网段路由,以及,依据RouteA和RouteB发布的网段路由,RouteC创建有以局域网的网段IP地址10.0.0.0/8为前缀、分别以RouteA和RouteB为下一跳的两条外网路由。
当PC1产生发向外网的上行流量时,与PC1直连的RouteA通过内网端口Port_a1从PC1接收该上行流量、并通过外网端口Port_a0向RouteC转发上行流量;
当RouteC有需要向PC1转发的下行流量时,由于RouteC中相应的两条外网路由均是以网段IP地址10.0.0.0/8为前缀,因此,RouteC既可以选择以RouteA为下一跳的外网路由、也可以选择以RouteB为下一跳的外网路由;
若RouteC选择以RouteB为下一跳的外网路由转发下行流量,则RouteB在通过外网端口Port_b0接收到下行流量后,会通过内网端口Port_b2(RouteB中对应网段路由的二层转发项的出端口为内网端口Port_b2)将下行流量转交至RouteA的内网端口Port_a2,然后,需要由RouteA将内网端口Port_a2接收到的下行流量通过内网端口Port_a1(RouteA中对应网段路由的二层转发项的出端口为内网端口Port_a1)向PC1转发。
这样,对于RouteA来说,其未曾转发上行流量的内网端口Port_a2收到了下行流量,即,内网端口Port_a2出现进、出流量不一致的情况,因而就有可能导致进入内网端口Port_a2的下行流量被防火墙认定为攻击流量,从而使得下行流量无法从RouteA的内网端口Port_a1再继续转发至PC1。
发明内容
有鉴于此,本申请提供了一种发布ARP主机路由的方法和装置。
本申请提供的一种发布ARP主机路由的方法,该方法应用于局域网内的本地路由器,且应用该方法的本地路由器与处在同一局域网内的其它本地路由器互为备份地为本地主机提供网关功能、并与局域网内提供网关功能的其它本地路由器接入至局域网之外的同一台外网路由器,该方法包括:
为本机在局域网内实现互连的各内网端口分别配置对应的链路属性值;
当本机在任意内网端口学习到本地主机的ARP信息后,产生对应的ARP主机路由、并依据该内网端口的链路属性值产生该ARP主机路由的优先级;其中,与本地主机直连的内网端口所配置的链路属性值能够使产生的优先级相对高、通过其它本地路由器与本地主机级连的内网端口所配置的链路属性值能够使产生的优先级相对低;
当本机在任意内网端口产生ARP主机路由后,将产生的ARP主机路由及其优先级发布至外网路由器,以使外网路由器对应生成与本机所发布的ARP主机路由具有相同前缀、并以本机为下一跳的外网路由,并使外网路由器将本机发布的ARP主机路由的优先级作为对应生成的外网路由的优先级。
内网端口为物理端口或逻辑端口。
所述链路属性值为链路开销值;其中,与本地主机直连的内网端口所配置的链路开销值,小于通过其它本地路由器与本地主机级连的内网端口所配置的链路开销值;并且,链路开销值越小,优先级越高。
所述链路属性值为链路带宽;其中,与本地主机互连的内网端口所配置的链路带宽值,大于通过其它本地路由器与本地主机级连的内网端口所配置的链路带宽值;并且,链路带宽值越大,优先级越高。
本申请提供的一种发布ARP主机路由的装置,该装置应用于局域网内的本地路由器,且应用该装置的本地路由器与处在同一局域网内的其它本地路由器互为备份地为本地主机提供网关功能、并与局域网内提供网关功能的其它本地路由器接入至局域网之外的同一台外网路由器,该装置包括:
端口配置模块,为本机在局域网内实现互连的各内网端口分别配置对应的链路属性值;
ARP模块,当本机在任意内网端口学习到本地主机的ARP信息后,产生对应的ARP主机路由、并依据该内网端口的链路属性值产生该ARP主机路由的优先级;其中,与本地主机直连的内网端口所配置的链路属性值能够使产生的优先级相对高、通过其它本地路由器与本地主机级连的内网端口所配置的链路属性值能够使产生的优先级相对低;
路由协议模块,当本机在任意内网端口产生ARP主机路由后,将产生的ARP主机路由及其优先级发布至外网路由器,以使外网路由器对应生成与本机所发布的ARP主机路由具有相同前缀、并以本机为下一跳的外网路由,并使外网路由器将本机发布的ARP主机路由的优先级作为对应生成的外网路由的优先级。
内网端口为物理端口或逻辑端口。
所述链路属性值为链路开销值;其中,与本地主机直连的内网端口所配置的链路开销值,小于通过其它本地路由器与本地主机级连的内网端口所配置的链路开销值;并且,链路开销值越小,优先级越高。
所述链路属性值为链路带宽;其中,与本地主机互连的内网端口所配置的链路带宽值,大于通过其它本地路由器与本地主机级连的内网端口所配置的链路带宽值;并且,链路带宽值越大,优先级越高。
由此可见,基于本申请所提供的技术方案,本地路由器依据其各内网端口所配置的链路属性值,能够确定由每个内网端口触发产生的ARP主机路由的优先级,并且,本地路由器还能够将产生的ARP主机路由及其优先级一起发布至外网路由器,以使外网路由器能够依据ARP主机路由对应生成外网路由,并使外网路由器在针对不同本地主机的下行流量优选外网路由时能够延用对应的ARP主机路由的优先级。从而,通过内网端口所配置的链路属性值对优先级的影响,即可决定外网路由器针对下行流量的路由选择,进而能够确保本地路由器中的上行流量和下行流量一致。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
由于每台本地主机的上行流量通常是由与该本地主机直连的本地路由器进行转发,因此,为了避免上行流量和下行流量不一致的情况,本实施例首先需要确保外网路由器能够区分出不同本地主机的下行流量、并分别将每台本地主机的下行流量优先分配至与该本地主机直连的本地路由器进行转发。
为此,本实施例提供了一种发布ARP主机路由的机制来替代现有技术中发布网段路由的机制。
首先,该机制需要每台本地路由器在有内网端口(本实施例所述的内网端口是指用于在局域网内实现互连的端口、其可以是物理端口或逻辑端口)学习到ARP信息时,产生对应的本地主机的ARP主机路由、并将产生的ARP主机路由发布至外网路由器,以使外网路由器对应生成与本机所发布的ARP主机路由具有相同前缀、并以本机为下一跳的外网路由。
由于ARP主机路由的前缀中包含对应的本地主机的IP地址信息,因而,外网路由器对应生成的以本机为下一跳的外网路由的前缀中也同样包含对应的本地主机的IP地址信息。从而,不同本地主机的下行流量就能够通过外网路的前缀来区分。
其次,该机制需要在本地路由器的每个内网端口预先配置一种链路属性值,每个内网端口所配置的链路属性值用于确定由该内网端口触发产生的所有ARP主机路由的优先级(Prio),其中,与本地主机直连的内网端口所配置的链路属性值能够使产生的优先级相对高、通过其他本地路由器与本地主机级连的内网端口所配置的链路属性值能够使产生的优先级相对低;并且,所生成的优先级需要与其对应的ARP主机路由一同发布至外网路由器,以使外网路由器所生成的外网路由能够延用对应的ARP主机路由的优先级。
这样,当外网路由器为每台本地主机的下行流量选择外网路由时,即可通过比较优先级的高低而优先选择以直连该本地主机的本地路由器为下一跳的外网路由,进而确保每台本地主机的下行流量优先转发至与该本地主机直连的本地路由器。
实际应用中,每台本地路由器中的各内网端口的用途通常在组网时就已经确定,即,用于局域网内的本地主机接入、或用于在局域网内与互为备份的其他本地路由器互通。其中,用于局域网内的本地主机接入的内网端口就是与本地主机直连的内网端口,而用于在局域网内与互为备份的其他本地路由器互通的内网端口就是通过其他本地路由器与本地主机级连的内网端口。
因此,每个内网端口与本地主机之间的直连或级连的连接方式在组网时就是已知的,从而,对于连接方式已知的内网端口来说,本领域技术人员能够知晓如何适当地选取链路属性值来确保直连方式的内网端口所产生的ARP主机路由的优先级更高、级连方式的内网端口所产生的ARP主机路由的优先级更低。
例如,假设选用Cost(链路开销)值作为链路属性值,则,与本地主机互连的内网端口所配置的Cost值,需要小于通过本地路由器与本地主机级连的内网端口所配置的Cost值,并且,Cost值越小、优先级就越高。
再例如,假设选取链路带宽值作为链路属性值,则,与本地主机互连的内网端口所配置的链路带宽值,需要大于通过本地路由器与本地主机级连的内网端口所配置的链路带宽值,并且,链路带宽值越大、优先级越高。
而且,由于每台本地路由器中的各内网端口的用途通常在组网时就已经确定,因此,若对于本地路由器在组网时已被使用的内网端口、以及预留的空闲内网端口均预先配置链路属性值,则当局域网在完成组网之后又有新的主机接入在本地路由器专用于局域网内的本地主机接入的空闲内网端口时,也无须更改本地路由器中的内网端口配置,这样,能够更好地适应网络设备的变化。
下面,再结合一实例,对上述发布ARP主机路由的机制进行详细说明。
图2a至图2b为本申请实施例中发布ARP主机路由的实例示意图。
在如图2a至图2b所示的实例中,局域网内由本地路由器RouteA和RouteB互为备份地为该局域网内的本地主机PC1(IP地址为10.1.1.5/8)和PC2(IP地址为10.1.1.6/8)提供网关功能,并且,RouteA和RouteB还接入在同一台外网路由器RouteC。
另外,在如图2a至图2b所示的实例中,以选取Cost值作为链路属性值为例,并且,RouteA直连PC1的内网端口Port_a1配置的Cost值为50,RouteA通过RouteB与PC2级连的内网端口Port_a2配置的Cost值为100;RouteB直连PC2的内网端口Port_b1配置的Cost值为50,RouteB通过RouteA与PC1级连的内网端口Port_b2配置的Cost值为100。
请参见图2a:
当RouteA在内网端口Port_a1学习到PC1的ARP信息后,会产生以10.1.1.5/32为前缀、以PC1为下一跳的ARP主机路由,并依据内网端口Port_a1所配置的Cost值50产生该ARP主机路由的优先级50,然后,将以10.1.1.5/32为前缀的该ARP主机路由及其优先级50发布至RouteC;
当RouteB在内网端口Port_b2学习到PC1的ARP信息后,会产生以10.1.1.5/32为前缀、以PC1为下一跳的ARP主机路由,并依据内网端口Port_b2所配置的Cost值100产生该ARP主机路由的优先级100,然后,将以10.1.1.5/32为前缀的该ARP主机路由及其优先级100发布至RouteC;
此后,RouteC即可依据RouteA和RouteB发布的ARP主机路由,对应地生成针对PC1的两条外网路由,这两条外网路由均以10.1.1.5/32为前缀,但其中一条以RouteA为下一跳、优先级为相对高的50,另一条以RouteB为下一跳、优先级为相对低的100;
同理,对于PC2,RouteA和RouteB也会向RouteC上报相应的ARP主机路由及优先级,从而,在RouteC中也可生成对应PC2的两条外网路由,这两条外网路由均以10.1.1.6/32为前缀,但其中一条以RouteA为下一跳、优先级为相对低的100,另一条以RouteB为下一跳、优先级为相对高的50。
请参见图2b:
当PC1产生发向外网的上行流量时,与PC1直连的RouteA通过内网端口Port_a1从PC1接收该上行流量、并通过外网端口Port_a0向RouteC转发上行流量;
此后,当RouteC有需要向PC1转发的下行流量时,RouteC会在以10.1.1.5/32为前缀的两条外网路由中选择,但由于在这两条外网路由中,以RouteA为下一跳的一条具有相对高的优先级50,以RouteB为下一跳的另一条具有相对低的优先级100,因此,RouteC就会选择以RouteA为下一跳的外网路由、并将PC1的下行流量转发至RouteA的外网端口Port_a0,然后再通过RouteA的内网端口Port_a1转发至PC1,这样,就确保了RouteA中的上行流量和下行流量一致;
同理,当PC2产生发向外网的上行流量时,与PC2直连的RouteB通过内网端口Port_b1从PC2接收该上行流量、并通过外网端口Port_b0向RouteC转发上行流量;而当RouteC有需要向PC2转发的下行流量时,也会选择以RouteB为下一跳的外网路由、并将PC2的下行流量转发至RouteB的外网端口Port_b0,然后再通过RouteB的内网端口Port_b1转发至PC2,这样,同样能够确保RouteB中的上行流量和下行流量一致。
基于如上所述的发布ARP主机路由的机制,本实施例提供了一种发布ARP主机路由的方法。其中,该方法应用于局域网内的任意一台本地路由器,并且,应用该方法的本地路由器与处在同一局域网内的其他本地路由器互为备份地为本地主机提供网关功能、并与局域网内提供网关功能的其它本地路由器接入至局域网之外的同一台外网路由器。
图3为本申请实施例中发布ARP主机路由的方法的一种示例性流程示意图。如图3所示,该方法包括在应用其的本地路由器中执行的如下步骤:
步骤300,为本机的各内网端口分别配置对应的链路属性值。
在本步骤之后,即可反复循环地执行步骤301~步骤302。
步骤301,当本机在任意内网端口学习到本地主机的ARP信息后,产生对应的ARP主机路由、并依据该内网端口的链路属性值生成该ARP主机路由的优先级;其中,相比于通过本地路由器与本地主机级连的内网端口所配置的链路属性值,与本地主机直连的内网端口所配置的链路属性值能够使产生的ARP主机路由的优先级更高;
步骤302,当本机在任意内网端口产生ARP主机路由后,将产生的ARP主机路由及其优先级发布至外网路由器,以使外网路由器对应生成与本机所发布的ARP主机路由具有相同前缀、并以本机为下一跳的外网路由,并使外网路由器将本机发布的ARP主机路由的优先级作为对应生成的外网路由的优先级。
至此,流程结束。
实际应用中,上述方法能够以计算机程序来实现,因此,与上述方法相对应地,本实施例还提供了一种发布ARP主机路由的装置。其中,该装置应用于局域网内的任意一台本地路由器,并且,应用该装置的本地路由器与处在同一局域网内的其他本地路由器互为备份地为本地主机提供网关功能、并与局域网内提供网关功能的其它本地路由器接入至局域网之外的同一台外网路由器。
图4为本申请实施例中发布ARP主机路由的装置的一种示例性结构示意图。如图4所示,该装置包括在应用其的本地路由器中承载的如下模块:
端口配置模块400,为本机在局域网内实现互连的各内网端口分别配置对应的链路属性值;
ARP模块401,当本机在任意内网端口学习到本地主机的ARP信息后,产生对应的ARP主机路由、并依据该内网端口的链路属性值生成该ARP主机路由的优先级;其中,相比于通过本地路由器与本地主机级连的内网端口所配置的链路属性值,与本地主机直连的内网端口所配置的链路属性值能够使产生的ARP主机路由的优先级更高;
路由协议模块402,当本机在任意内网端口产生ARP主机路由后,将产生的ARP主机路由及其优先级发布至外网路由器,以使外网路由器对应生成与本机所发布的ARP主机路由具有相同前缀、并以本机为下一跳的外网路由,并使外网路由器将本机发布的ARP主机路由的优先级作为对应生成的外网路由的优先级。
基于本实施例所提供的上述方法和装置,本地路由器依据其各内网端口所配置的链路属性值,能够确定由每个内网端口触发产生的ARP主机路由的优先级,并且,本地路由器还能够将产生的ARP主机路由及其优先级一起发布至外网路由器,以使外网路由器能够依据ARP主机路由对应生成外网路由,并使外网路由器在针对不同本地主机的下行流量优选外网路由时能够延用对应的ARP主机路由的优先级。从而,通过内网端口所配置的链路属性值对优先级的影响,即可决定外网路由器针对下行流量的路由选择,进而能够确保本地路由器中的上行流量和下行流量一致。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。