基于Linux系统实现虚拟路由转发方法和装置的制作方法

文档序号:7887407阅读:304来源:国知局
专利名称:基于Linux系统实现虚拟路由转发方法和装置的制作方法
技术领域
本发明涉及网络通信技术,特别涉及基于Linux系统实现虚拟路由转发(VRF:Virtual Routing and Forwarding)的方法和装置。
背景技术
VRF能够允许多个路由表在一台网络设备上同时存在和工作,其类似一台逻辑网络设备,至少维护以下三个元素:一张独立的路由表,一组归属于这个VRF的接口集合,以及一组只用于该VRF的路由协议。该三个元素在VRF内相互独立,VRF通过独立的路由表、接口管理、路由协议等对应的一系列模块控制报文转发,实现将VRF内部的报文转发控制在VRF内部,而VRF之间默认不能相互转发报文。VRF增加了网络安全性,避免使用加密、认证这些技术手段。网络服务提供商(ISPs:Internet service providers)利用VRF特性为用户创建相互隔离的虚拟私有网络
(virtual private networks-VPNs),因此VRF技术也被称作VPN路由转发。典型的VRF
可用于实现MPLS VPN。每个VRF拥有的路由表存在于服务提供商边缘(PE provider Edge)设备的每个VPN实例中,而VPN之间相互隔离。目前,一些诸如基于Linux系统的网络设备,其需要支持VRF。其中,该网络设备在Linux上实现VRF主要通过开发一套专门的软件代码。而该软件代码的原理是通过在Linux协议栈中对VRF进行扩展,比如扩展VRF的路由、VRF的地址表、VRF的TCP连接表方式等。这套软件代码的实现方式比较困难和复杂,对现有Linux协议栈修改很大。并且,伴随着Linux内核版本的不断升级,移植这套软件代码到升级版本都会有很大工作量,还有,如果该软件代码的管理者没有适当维护,会导致一些新的表项无法支持VRF,例如Linux中的netfilter表项。

发明内容
本发明提供了基于Linux系统实现虚拟路由转发方法和装置,用于利用基于Linux系统的网络设备自身已有特性实现VRF,减少独立维护代码成本。本发明提供的技术方案包括:—种基于Linux系统实现虚拟路由转发VRF方法,该方法应用于基于Linux系统的网络设备,包括:在内核空间中创建网络名称空间,生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间;所述网络设备通过网络接口接收报文,并以该网络接口所属VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路;其中,所述网络接口所属VRF实例为预先配置的,或者为系统初始化时默认网络名称空间中的VRF实例。一种基于Linux系统实现虚拟路由转发VRF装置,该装置应用于基于Linux系统的网络设备,包括:网络名称空间创建模块,处于内核空间中,用于在内核空间中创建网络名称空间,并生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间;接口管理模块,处于内核空间中,用于为所述网络设备的网络接口配置其所属的至少一个VRF实例,或者默认该网络接口所属VRF实例为系统初始化时默认网络名称空间中的VRF实例;报文收发模块,用于通过网络接口接收报文,并以该网络接口所属VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路。由以上技术方案可以看出,本发明中,通过在内核空间中创建网络名称空间,并生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间,实现了利用Linux的网络名称空间特性实现VRF功能,在所述网络设备通过网络接口接收报文时,以该网络接口所属的VRF实例为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路,这相比于现有技术,能够利用Linux的网络名称空间特性实现VRF功能,而不必额外开发一套专门用于实现VRF功能的软件代码,减少独立维护代码成本。


图1为本发明实施例提供的方法流程图;图2为本发明实施例提供的装置结构图;图3为本发明实施例提供的Socket分配VRF实例示意图。
具体实施例方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。Linux系统的网络名称空间,在生成时保存有私有的路由表、地址表、接口表等相关表项,而VRF,其需要使用上述网络名称空间保存的若干个表项,基于此,本发明可利用Linux的网络名称空间特性实现VRF功能,而不必额外开发一套专门用于实现VRF功能的软件代码。下面对本发明提供的方法进行描述:参见图1,图1为本发明实施例提供的方法流程图。该方法应用于基于Linux系统的网络设备,包括如图1所示的以下流程:步骤101,在内核空间中创建网络名称空间,生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间;
步骤102,网络设备通过网络接口接收报文,并以该网络接口所属VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路。其中,所述网络接口所属VRF实例为预先配置的,或者为系统初始化时默认网络名称空间中的VRF实例。下面以网络接口所属VRF实例为预先配置为例对图1所示流程进行描述:首先,为实现上述步骤101,本发明需要对基于Linux系统的网络设备进行扩展得到图2所示的以下各个模块:用户空间中的VRF控制模块和网络名称空间管理模块。基于图2所示的模块,步骤101可包括:VRF控制模块将VRF创建请求传递至内核空间中的网络名称空间管理模块。当网络名称空间管理模块接收到VRF创建请求后,其完成网络名称空间的创建操作,具体为:网络名称空间管理模块根据VRF创建请求创建网络名称空间,所述网络名称空间中至少包含用于报文转发的表项,并生成一个与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存在所述网络名称空间中,并将网络名称空间创建消息通知至所述VRF控制模块。其中,所述网络名称空间中用于报文转发的表项在生成网络名称空间时自动生成,其可包含路由表、地址表、接口表等相关表项,具体与现有技术中如何生成网络名称空间相同。通常,网络设备的内核空间中会创建多个网络名称空间,为便于区分创建的各个网络名称空间,本发明对网络名称空间进行了扩展,即为创建的每一网络名称空间指定一个名称,该名称在内核空间中唯一。所述VRF控制模块接收到网络名称空间管理模块的通知后,将所述网络名称空间创建消息转换成VRF创建消息,统一告知用户空间中的各个模块。这里之所以转换网络名称空间创建消息,目的是:在用户空间中的各个应用模块比如动态路由管理模块其是感知不到内核空间中的网络名称空间,其仅知道VRF实例概念,因此,为统一概念,需要将网络名称空间创建消息转换成VRF创建消息。至此,完成步骤101的详细描述。需要说明的是,内核空间中的网络名称空间并非固定不变,其也是动态变化的,当在需要删除内核中已创建的至少一个网络名称空间时,所述网络名称空间管理模块删除该网络名称空间(包含网络名称空间中所有的表项和VRF实例的标识),并将网络名称空间删除消息通过VRF API通知给所述VRF控制模块,由所述VRF控制模块将所述网络名称空间删除消息转换成VRF删除消息,统一告知用户空间中的各个模块。其中,VRF控制模块将所述网络名称空间删除消息转换成VRF删除消息的目的与上述将所述网络名称空间创建消息转换成VRF创建消息类似,不再赘述。优选地,本发明中,为实现VRF控制模块与网络名称空间管理模块之间的交互,还需要在图2所示的装置中扩展出连接在VRF控制模块和网络名称空间管理模块之间的VRFAPI,如此,VRF控制模块或者网络名称空间管理模块通过调用该VRF API即可与对方进行交互。从以上描述可以看出,本发明是通过VRF控制模块调用VRF API来控制网络名称空间管理模块创建网络名称空间以及VRF实例,而在现有技术中,如果要创建网络名称空间需要修改进程网络名称空间属性,因此,相比于现有技术,本发明在创建网络名称空间时不需要和进程关联,因此其可单独对网络名称空间进行管理。另外,本发明通过在网络名称空间中保存VRF实例的名称和标识,能够完成VRF实例到网络名称空间的映射。优选地,本发明中,为实现对网络接口所属VRF实例进行配置,上述图2所示的装置进一步包括:接口管理模块。如此,对网络接口所属VRF实例进行配置具体可包括:VRF控制模块控制接口管理模块为所述网络设备上的网络接口配置其所属的VRF实例。其中,在为网络接口配置VRF实例时,如果该VRF实例所处的网络名称空间不可用或者已被删除,则提供错误提示。优选地,为保证VRF控制模块控制接口管理模块,还需要在VRF控制模块和接口管理模块之间扩展出接口 API,由VRF控制模块调用接口 API进入接口管理模块,具体如图2所示,通过接口管理模块为所述网络设备上的各个网络接口配置其所属的VRF实例。需要说明的是,在为网络接口配置好VRF实例后,并非表示该网络接口被配置的VRF实例固定不变,其可动态变化,比如可以在业务需求时取消,其中,如果接口管理模块取消网络接口已被配置的VRF实例,则后续默认该网络接口所属系统初始化时创建的默认网络名称空间中的VRF实例。另外,优选地,本发明中,还可由应用模块针对内核空间中的套接字(Socket)配置其所属的至少一个VRF实例,具体如图3所示的配置示意图,或者,直接将系统初始化时默认网络名称空间中的VRF实例默认为该Socket所属的VRF实例。其中,一个socket可属于单个或者多个VRF实例,这能够提高应用模块操作效率。本发明通过为socket配置VRF实例,能解决网络名称空间自身工作模式与VRF实例要求不一致的问题:因为现有技术中,网络名称空间默认socket所属的VRF实例是通过进程所属网络名称空间继承的,这样就会导致一个进程的socket只能属于一个VRF实例,而如果网络设备的一个应用程序需要在多个VRF实例中工作的话,就需要同时启动多个进程,这样会对内存资源和CPU资源消耗很大,而本发明中,扩展socket接口,可以直接指定socket所属的VRF实例,这样一个进程的socket就可以同时属于多个VRF实例,因此,即使在网络设备的一个应用程序需要在多个VRF实例中工作的话,也不会出现上述的内存资源和CPU资源消耗大的问题。基于Socket所属VRF实例的描述,则当图3所示的应用模块通过用户空间中的Socket接口发送报文时,就以该Socket所属的VRF实例为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项发送所述报文。而当应用模块通过Socket接口接收报文时,就接收该Socket所属VRF实例对应的报文。另外,基于上述针对Socket的描述,上述步骤102中,在利用查找到的网络名称空间中用于报文转发的表项为所述报文选路时,如果选路结果为:所述报文是本机报文,则将所述报文、以及查找到的网络名称空间传递(deliver)给本机传输层;传输层查找出哪些Socket所属的VRF实例包含在该查找到的网络名称空间中,并将所述报文传递至查找出的Socket,由所述网络设备的应用模块处理该查找出的Socket接收的报文。而如果选路结果为:所述报文是非本机报文,则直接利用网络名称空间中的路由表项进行报文转发。至此,完成本发明提供的方法描述,下面对本发明提供的装置进行描述。本发明提供的装置应用于基于Linux系统的网络设备,包括:报文收发模块和图2所示的VRF控制模块、网络名称空间创建模块和接口管理模块。
其中,VRF控制模块、网络名称空间创建模块和接口管理模块执行的操作如图2对应的文字描述,这里不再赘述;而报文收发模块,用于通过网络接口接收报文,并以该网络接口所属VRF实例为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路。优选地,该装置进一步包括:图3所示的应用模块,该应用模块执行的操作如上所述述,不再赘述。其中,基于应用模块执行的操作,所述报文收发模块通过以下步骤实现利用查找到的网络名称空间中用于报文转发的表项为所述报文选路:如果选路结果为:所述报文是本机报文,则将所述报文、以及查找到的网络名称空间传递deliver给本机传输层,由传输层查找出哪些Socket所属的VRF实例包含在该查找到的网络名称空间中,并将所述报文传递至查找出的Socket,由所述网络设备的应用模块处理该查找出的Socket接收的报文。至此,完成本发明提供的装置描述。由以上技术方案可以看出,本发明中,通过在内核空间中创建网络名称空间,并生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间,实现了利用Linux的网络名称空间特性实现VRF功能,之后,在所述网络设备通过网络接口接收报文时,以该网络接口所属的VRF实例为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路,这相比于现有技术,能够利用Linux的网络名称空间特性实现VRF功能,而不必额外开发一套专门用于实现VRF功能的源代码,减少独立维护代码成本,并对Linux协议栈修改较小,减小复杂度,节省工作量;进一步地,由于Linux自身支持网络名称空间,因此,即使Linux内核升级也能够在后续版本得到支持。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种基于Linux系统实现虚拟路由转发VRF方法,该方法应用于基于Linux系统的网络设备,其特征在于,该方法包括: 在内核空间中创建网络名称空间,生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间; 所述网络设备通过网络接口接收报文,并以该网络接口所属VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路; 其中,所述网络接口所属VRF实例为预先配置的,或者为系统初始化时默认网络名称空间中的VRF实例。
2.根据权利要求1所述的方法,其特征在于,如果所述选路的结果为:所述报文是本机报文,则将所述报文、以及查找到的网络名称空间传递(deliver)给传输层;传输层查找出哪些Socket所属VRF实例包含在该查找到的网络名称空间中,并将所述报文传递至查找出的 Socket ; 其中,Socket所属VRF实例为预先配置的,或者为系统初始化时默认网络名称空间中的VRF实例。
3.根据权利要求1所述的方法,其特征在于,该方法进一步包括: 所述网络设备在通过Socket接口发送报文时,以该Socket所属VRF实例的标始为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项发送所述报文; 所述网络设备通过Socket接口接收该Socket所属VRF实例对应的报文; 其中,所述Socket所属VRF实例为预先配置的,或者为系统初始化时默认网络名称空间中的VRF实例。
4.根据权利要求1所述的方法,其特征在于,该方法进一步包括: 在需要取消至少一个网络接口已被配置的VRF实例时,取消该网络接口已被配置的VRF实例,并默认该网络接口所属系统初始化时默认网络名称空间中的VRF实例。
5.根据权利要求1至4任一所述的方法,其特征在于,所述网络设备至少包括:内核空间中的网络名称空间管理模块和用户空间中的VRF控制模块; 步骤A包括: 所述VRF控制模块传递VRF创建请求至所述网络名称空间管理模块; 所述网络名称空间管理模块根据VRF创建请求创建网络名称空间,生成一个与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存在所述网络名称空间中,并将网络名称空间创建消息通知至所述VRF控制模块; 所述VRF控制模块将所述网络名称空间创建消息转换成VRF创建消息,统一告知用户空间中的各个模块。
6.根据权利要求5所述的方法, 其特征在于,该方法进一步包括: 在需要删除内核中已创建的至少一个网络名称空间时,所述网络名称空间管理模块删除该网络名称空间,并将网络名称空间删除消息通知给所述VRF控制模块,由所述VRF控制模块将所述网络名称空间删除消息转换成VRF删除消息,统一告知用户空间中的各个模块。
7.一种基于Linux系统实现虚拟路由转发VRF装置,该装置应用于基于Linux系统的网络设备,其特征在于,该装置包括: 网络名称空间创建模块,处于内核空间中,用于在内核空间中创建网络名称空间,并生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的标识保存至所述网络名称空间; 接口管理模块,处于内核空间中,用于为所述网络设备的网络接口配置其所属的至少一个VRF实例,或者默认该网络接口所属VRF实例为系统初始化时默认网络名称空间中的VRF实例; 报文收发模块,用于通过网络接口接收报文,并以该网络接口所属VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路。
8.根据权利要求7所述的装置,其特征在于,该装置进一步包括: 应用模块,处于用户空间中,用于针对所述网络设备上的套接字Socket,配置其所属的至少一个VRF实例或者默认其所属的VRF实例为系统初始化时默认网络名称空间中的VRF实例; 所述应用模块通过Socket接口发送报文时,以该Socket所属VRF实例为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项发送所述报文;以及通过Socket接口接收该Socket所属VRF实例对应的报文。
9.根据权利要求7所述的装置,其特征在于,所述接口管理模块进一步在在需要取消至少一个网络接口已被配置 的VRF实例时,取消该网络接口已被配置的VRF实例,并默认该网络接口所属系统初始化时默认网络名称空间中的VRF实例。
10.根据权利要求7至9任一所述的装置,其特征在于,所述装置进一步包括:VRF控制模块; 所述VRF控制模块,处于用户空间中,传递VRF创建请求至所述网络名称空间管理模块,以及将所述网络名称空间管理模块发送的网络名称空间创建消息转换成VRF创建消息,统一告知用户空间中的各个模块; 所述网络名称空间管理模块根据VRF创建请求创建网络名称空间,生成一个与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存在所述网络名称空间中,并将网络名称空间创建消息通知至所述VRF控制模块;以及进一步在需要删除内核中已创建的至少一个网络名称空间时,所述网络名称空间管理模块删除该网络名称空间,并将网络名称空间删除消息通知给所述VRF控制模块,由所述VRF控制模块将所述网络名称空间删除消息转换成VRF删除消息,统一告知用户空间中的各个模块。
全文摘要
本发明提供了基于Linux系统实现虚拟路由转发VRF方法和装置。该方法应用于基于Linux系统的网络设备,包括在内核空间中创建网络名称空间,并生成与所述网络名称空间中用于报文转发的表项相关联的VRF实例的名称和标识,将所述VRF实例的名称和标识保存至所述网络名称空间;为所述网络设备的网络接口配置其所属的至少一个VRF实例;所述网络设备通过网络接口接收报文,并以该网络接口被配置的VRF实例的标识为关键字查找到包含该关键字的网络名称空间,利用该查找到的网络名称空间中用于报文转发的表项为所述报文选路。
文档编号H04L12/703GK103209127SQ201210013559
公开日2013年7月17日 申请日期2012年1月17日 优先权日2012年1月17日
发明者林茂, 王佑刚, 李永合 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1