APP下载

基于NetFPGA虚拟路由器的路由表下发与更新机制研究

2014-12-13龚珊珊

数字技术与应用 2014年8期

龚珊珊

摘要:基于NetFPGA硬件平台设计的可编程虚拟化路由器,为提高其可编程性和灵活性将控制平面与数据平面进行分离,导致二个平面难以正常进行数据传输。通过对控制平面的接口进行设置,对OpenVZ虚拟路由实例中Zebra路由协议软件计算出来的路由表进行提取,并下发给底层NetFPGA来完成交互。本文就如何将路由表提取出来进行了研究,提出了对Zebra路由协议软件进行二次开发,增加路由表定时更新输出的功能解决方案。该方案基于Zebra面向对象设计思想,复用其通用接口,设计相应数据结构和函数,增加线程来处理通过Rip、Ospf或Bgp计算得到的路由表。

关键词:NetFPGA 控制平面 数据平面 Zebra

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2014)08-0043-02

1 前言

随着互联网规模日益的扩大,用户的增长,应用和业务的多样化,使得TCP/IP网络体系结构在可扩展性、移动性、安全可控性方面存在巨大的挑战[1],为应对这些挑战,科研人员提出了未来网络这一概念。未来网络[2]旨在设计全新的网络体系结构和新的网络协议满足当前复杂网络。然而未来网络新的体系结构、协议、算法等在实际应用之前需要进行大量的理论分析与仿真实验,更需要在试验网络中进行评估与验证。

作为连接网络的核心设备,路由器必须要满足未来网络需求。然而考虑到传统路由器封闭性以及网络试验对正常业务产生一定影响,导致在部署、实现和验证的体系结构、算法和协议会非常困难,严重制约了互联网体系结构的研究发展和创新。

为了解决这些问题,研究人员提出了一种新型的路由器—可编程虚拟化路由器[3]。它将可编程性和虚拟化都融合于路由器中,既解决了由于封闭性对新型业务的影响,也满足了在多种业务的并行运行。可编程虚拟化路由器采用分层思想[4](如图1):控制平面和数据平面。控制平面负责路由器的虚拟化以及路由协议的运行和维护,得到路由表、ARP表和端口表;数据平面负责路由信息的查找与转发。将控制引擎与数据平面分离导致二者不能正常交互,需要对控制平面与数据平面进行接口设置,并将VR(虚拟路由器)中路由表下发给转发模块。本文基于NetFPGA硬件平台对路由表提取技术进行了研究。

2 控制平面的虚拟化研究与实现

科研人员把虚拟化技术主要分为:全虚拟化、半虚拟化、系统级虚拟化。全虚拟化技术最大的特点是无需任何修改客户操作系统就可以直接在虚拟化平台上运行;半虚拟化技术最大优点是需要改变客户操作系统内核;系统级虚拟化采用共享操作系统内核手段,是基于操作系统本身之上实现的服务器的虚拟化。综合比较,采用系统级虚拟化具有其他虚拟技术所没有的高性能、高效率和高密度特性。其代表技术有:SWsoft公司的开源OpenVZ项目。

在Centos6.0操作系统中安装OpenVZ内核、OpenVZ用户管理工具(vzctl和vzquato)并重新启动OpenVZ。下载需要安装的模板(centos)到vz/template/cache目录下,并用vzctl指令创建4个VE分别表示为:VR1、VR2 … VRn(VR表示为虚拟路由器),每个VR中创建4个虚拟网络接口(对应NetFPGA的4个物理端口),然后下载Zebra软件包,安装源码包,修改配置文件并配置接口IP。

3 虚拟路由器路由表的下发与更新研究与实现

Zebra系统体系结构图如2所示。

整个系统主要分为三大部分:Zebra交互模块、路由协议模块和VTY显示配置模块。Zebra模块负责与路由协议进行交互,将路由协议计算得到的路由表存储在Rib结构体中;Zebra模块与Linux内核交互,将进入到Linux中的数据包传送到路由协议模块。路由协议模块负责路由协议计算,主要有三种路由协议RIP、OSPF和BGP并包含IPv6版本。VTY模块主要方便用户进行路由协议配置,起人机交互的作用。

通过对Zebra模块的分析,可以将模块分为两个部分:模块交互部分、路由表管理部分。

模块交互部分负责与协议模块进行交互,获取通过路由协议计算的到得路由表,并交由路由表管理模块进行管理。

(1)路由表的提取。首先,在../zebra目录下创建Gtroutertable.h、Gtroutertable.c两个文件,负责路由提取的功能,在Gtroutertable.c中编写获取路由表函数void *Get(…)。在zebra模块主线程中创建一个新的子线程,当获取到了路由表的时候,执行该子线程,调用获取路由表函数,从而提取出所需的路由表。

其次,重新修改Makefile文件,执行make指令进行重新编译。

(2)路由表的更新。当链路发生变化后,通过RIP或OSPF计算出来的路由表也发生了变化,但由于直接从zebra模块中提取的路由表变化时间较长,不能满足实时性更新。Zebra中主要包含3种定时器,分别为:update_time、timeout_time、garbage_time。通过在zebra主线程上设置定时器update_time,当路由表发生变化后,立即调用Get(…)获取路由表函数。从而达到定时更新提取出的路由表的目的。

4 实验验证与分析

该实验基于NetFPGA硬件设计的可编程路由器如下:在每个VR中安装zebra路由协议软件,开启zebra守护进程,运行Rip路由协议。得到的路由表信息分别是图3、图4所示。

其中C代表是connect,R代表是运行RIP路由协议。

二者对比,明显发现随着链路发生变化,所提取的路由表也随着发生了变化,并且和链路变化一致,说明路由表提取是有效的,并是实时更新的。

5 结语

本文针对基于NetFPGA硬件的可编程虚拟化路由器由于采用控制与转发分离,而导致无法正常交互问题,做了一些分析研究,通过对路由协议软件的研究与分析,通过对zebra路由协议软件进行二次开发,添加了路由提取功能和定时更新功能,通过实验验证分析,提取的路由表随着路由信息的改变而更新,并恢复了控制平面与数据平面的正常交互。

参考文献

[1]Xie Gao-Gang, Zhang Yu-Jun,Li Zhen-Yu,et al.A survey on future Internet architecture[J].Chinese Journal of Computers, 2012,35(6):1109-1119(in Chinese).

[2]Paul S,Pan Jianli,Jain R.Architectures for the future networks and the next generation Internet:a survey[C].Computer Communications.2011.34(1):2-42.

[3]Feldmann Anja.Internet clean-slate design:what and why?[C]ACM SIGCOMM Computer Communication Review.2007.37(3):59-64.

[4]杨懋,刘中金,李勇,曾烈光,金德鹏,苏厉.基于可编程硬件的虚拟路由器控制平面.清华大学学报(自然科学版)[J].2012,52(5):586-591.

摘要:基于NetFPGA硬件平台设计的可编程虚拟化路由器,为提高其可编程性和灵活性将控制平面与数据平面进行分离,导致二个平面难以正常进行数据传输。通过对控制平面的接口进行设置,对OpenVZ虚拟路由实例中Zebra路由协议软件计算出来的路由表进行提取,并下发给底层NetFPGA来完成交互。本文就如何将路由表提取出来进行了研究,提出了对Zebra路由协议软件进行二次开发,增加路由表定时更新输出的功能解决方案。该方案基于Zebra面向对象设计思想,复用其通用接口,设计相应数据结构和函数,增加线程来处理通过Rip、Ospf或Bgp计算得到的路由表。

关键词:NetFPGA 控制平面 数据平面 Zebra

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2014)08-0043-02

1 前言

随着互联网规模日益的扩大,用户的增长,应用和业务的多样化,使得TCP/IP网络体系结构在可扩展性、移动性、安全可控性方面存在巨大的挑战[1],为应对这些挑战,科研人员提出了未来网络这一概念。未来网络[2]旨在设计全新的网络体系结构和新的网络协议满足当前复杂网络。然而未来网络新的体系结构、协议、算法等在实际应用之前需要进行大量的理论分析与仿真实验,更需要在试验网络中进行评估与验证。

作为连接网络的核心设备,路由器必须要满足未来网络需求。然而考虑到传统路由器封闭性以及网络试验对正常业务产生一定影响,导致在部署、实现和验证的体系结构、算法和协议会非常困难,严重制约了互联网体系结构的研究发展和创新。

为了解决这些问题,研究人员提出了一种新型的路由器—可编程虚拟化路由器[3]。它将可编程性和虚拟化都融合于路由器中,既解决了由于封闭性对新型业务的影响,也满足了在多种业务的并行运行。可编程虚拟化路由器采用分层思想[4](如图1):控制平面和数据平面。控制平面负责路由器的虚拟化以及路由协议的运行和维护,得到路由表、ARP表和端口表;数据平面负责路由信息的查找与转发。将控制引擎与数据平面分离导致二者不能正常交互,需要对控制平面与数据平面进行接口设置,并将VR(虚拟路由器)中路由表下发给转发模块。本文基于NetFPGA硬件平台对路由表提取技术进行了研究。

2 控制平面的虚拟化研究与实现

科研人员把虚拟化技术主要分为:全虚拟化、半虚拟化、系统级虚拟化。全虚拟化技术最大的特点是无需任何修改客户操作系统就可以直接在虚拟化平台上运行;半虚拟化技术最大优点是需要改变客户操作系统内核;系统级虚拟化采用共享操作系统内核手段,是基于操作系统本身之上实现的服务器的虚拟化。综合比较,采用系统级虚拟化具有其他虚拟技术所没有的高性能、高效率和高密度特性。其代表技术有:SWsoft公司的开源OpenVZ项目。

在Centos6.0操作系统中安装OpenVZ内核、OpenVZ用户管理工具(vzctl和vzquato)并重新启动OpenVZ。下载需要安装的模板(centos)到vz/template/cache目录下,并用vzctl指令创建4个VE分别表示为:VR1、VR2 … VRn(VR表示为虚拟路由器),每个VR中创建4个虚拟网络接口(对应NetFPGA的4个物理端口),然后下载Zebra软件包,安装源码包,修改配置文件并配置接口IP。

3 虚拟路由器路由表的下发与更新研究与实现

Zebra系统体系结构图如2所示。

整个系统主要分为三大部分:Zebra交互模块、路由协议模块和VTY显示配置模块。Zebra模块负责与路由协议进行交互,将路由协议计算得到的路由表存储在Rib结构体中;Zebra模块与Linux内核交互,将进入到Linux中的数据包传送到路由协议模块。路由协议模块负责路由协议计算,主要有三种路由协议RIP、OSPF和BGP并包含IPv6版本。VTY模块主要方便用户进行路由协议配置,起人机交互的作用。

通过对Zebra模块的分析,可以将模块分为两个部分:模块交互部分、路由表管理部分。

模块交互部分负责与协议模块进行交互,获取通过路由协议计算的到得路由表,并交由路由表管理模块进行管理。

(1)路由表的提取。首先,在../zebra目录下创建Gtroutertable.h、Gtroutertable.c两个文件,负责路由提取的功能,在Gtroutertable.c中编写获取路由表函数void *Get(…)。在zebra模块主线程中创建一个新的子线程,当获取到了路由表的时候,执行该子线程,调用获取路由表函数,从而提取出所需的路由表。

其次,重新修改Makefile文件,执行make指令进行重新编译。

(2)路由表的更新。当链路发生变化后,通过RIP或OSPF计算出来的路由表也发生了变化,但由于直接从zebra模块中提取的路由表变化时间较长,不能满足实时性更新。Zebra中主要包含3种定时器,分别为:update_time、timeout_time、garbage_time。通过在zebra主线程上设置定时器update_time,当路由表发生变化后,立即调用Get(…)获取路由表函数。从而达到定时更新提取出的路由表的目的。

4 实验验证与分析

该实验基于NetFPGA硬件设计的可编程路由器如下:在每个VR中安装zebra路由协议软件,开启zebra守护进程,运行Rip路由协议。得到的路由表信息分别是图3、图4所示。

其中C代表是connect,R代表是运行RIP路由协议。

二者对比,明显发现随着链路发生变化,所提取的路由表也随着发生了变化,并且和链路变化一致,说明路由表提取是有效的,并是实时更新的。

5 结语

本文针对基于NetFPGA硬件的可编程虚拟化路由器由于采用控制与转发分离,而导致无法正常交互问题,做了一些分析研究,通过对路由协议软件的研究与分析,通过对zebra路由协议软件进行二次开发,添加了路由提取功能和定时更新功能,通过实验验证分析,提取的路由表随着路由信息的改变而更新,并恢复了控制平面与数据平面的正常交互。

参考文献

[1]Xie Gao-Gang, Zhang Yu-Jun,Li Zhen-Yu,et al.A survey on future Internet architecture[J].Chinese Journal of Computers, 2012,35(6):1109-1119(in Chinese).

[2]Paul S,Pan Jianli,Jain R.Architectures for the future networks and the next generation Internet:a survey[C].Computer Communications.2011.34(1):2-42.

[3]Feldmann Anja.Internet clean-slate design:what and why?[C]ACM SIGCOMM Computer Communication Review.2007.37(3):59-64.

[4]杨懋,刘中金,李勇,曾烈光,金德鹏,苏厉.基于可编程硬件的虚拟路由器控制平面.清华大学学报(自然科学版)[J].2012,52(5):586-591.

摘要:基于NetFPGA硬件平台设计的可编程虚拟化路由器,为提高其可编程性和灵活性将控制平面与数据平面进行分离,导致二个平面难以正常进行数据传输。通过对控制平面的接口进行设置,对OpenVZ虚拟路由实例中Zebra路由协议软件计算出来的路由表进行提取,并下发给底层NetFPGA来完成交互。本文就如何将路由表提取出来进行了研究,提出了对Zebra路由协议软件进行二次开发,增加路由表定时更新输出的功能解决方案。该方案基于Zebra面向对象设计思想,复用其通用接口,设计相应数据结构和函数,增加线程来处理通过Rip、Ospf或Bgp计算得到的路由表。

关键词:NetFPGA 控制平面 数据平面 Zebra

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2014)08-0043-02

1 前言

随着互联网规模日益的扩大,用户的增长,应用和业务的多样化,使得TCP/IP网络体系结构在可扩展性、移动性、安全可控性方面存在巨大的挑战[1],为应对这些挑战,科研人员提出了未来网络这一概念。未来网络[2]旨在设计全新的网络体系结构和新的网络协议满足当前复杂网络。然而未来网络新的体系结构、协议、算法等在实际应用之前需要进行大量的理论分析与仿真实验,更需要在试验网络中进行评估与验证。

作为连接网络的核心设备,路由器必须要满足未来网络需求。然而考虑到传统路由器封闭性以及网络试验对正常业务产生一定影响,导致在部署、实现和验证的体系结构、算法和协议会非常困难,严重制约了互联网体系结构的研究发展和创新。

为了解决这些问题,研究人员提出了一种新型的路由器—可编程虚拟化路由器[3]。它将可编程性和虚拟化都融合于路由器中,既解决了由于封闭性对新型业务的影响,也满足了在多种业务的并行运行。可编程虚拟化路由器采用分层思想[4](如图1):控制平面和数据平面。控制平面负责路由器的虚拟化以及路由协议的运行和维护,得到路由表、ARP表和端口表;数据平面负责路由信息的查找与转发。将控制引擎与数据平面分离导致二者不能正常交互,需要对控制平面与数据平面进行接口设置,并将VR(虚拟路由器)中路由表下发给转发模块。本文基于NetFPGA硬件平台对路由表提取技术进行了研究。

2 控制平面的虚拟化研究与实现

科研人员把虚拟化技术主要分为:全虚拟化、半虚拟化、系统级虚拟化。全虚拟化技术最大的特点是无需任何修改客户操作系统就可以直接在虚拟化平台上运行;半虚拟化技术最大优点是需要改变客户操作系统内核;系统级虚拟化采用共享操作系统内核手段,是基于操作系统本身之上实现的服务器的虚拟化。综合比较,采用系统级虚拟化具有其他虚拟技术所没有的高性能、高效率和高密度特性。其代表技术有:SWsoft公司的开源OpenVZ项目。

在Centos6.0操作系统中安装OpenVZ内核、OpenVZ用户管理工具(vzctl和vzquato)并重新启动OpenVZ。下载需要安装的模板(centos)到vz/template/cache目录下,并用vzctl指令创建4个VE分别表示为:VR1、VR2 … VRn(VR表示为虚拟路由器),每个VR中创建4个虚拟网络接口(对应NetFPGA的4个物理端口),然后下载Zebra软件包,安装源码包,修改配置文件并配置接口IP。

3 虚拟路由器路由表的下发与更新研究与实现

Zebra系统体系结构图如2所示。

整个系统主要分为三大部分:Zebra交互模块、路由协议模块和VTY显示配置模块。Zebra模块负责与路由协议进行交互,将路由协议计算得到的路由表存储在Rib结构体中;Zebra模块与Linux内核交互,将进入到Linux中的数据包传送到路由协议模块。路由协议模块负责路由协议计算,主要有三种路由协议RIP、OSPF和BGP并包含IPv6版本。VTY模块主要方便用户进行路由协议配置,起人机交互的作用。

通过对Zebra模块的分析,可以将模块分为两个部分:模块交互部分、路由表管理部分。

模块交互部分负责与协议模块进行交互,获取通过路由协议计算的到得路由表,并交由路由表管理模块进行管理。

(1)路由表的提取。首先,在../zebra目录下创建Gtroutertable.h、Gtroutertable.c两个文件,负责路由提取的功能,在Gtroutertable.c中编写获取路由表函数void *Get(…)。在zebra模块主线程中创建一个新的子线程,当获取到了路由表的时候,执行该子线程,调用获取路由表函数,从而提取出所需的路由表。

其次,重新修改Makefile文件,执行make指令进行重新编译。

(2)路由表的更新。当链路发生变化后,通过RIP或OSPF计算出来的路由表也发生了变化,但由于直接从zebra模块中提取的路由表变化时间较长,不能满足实时性更新。Zebra中主要包含3种定时器,分别为:update_time、timeout_time、garbage_time。通过在zebra主线程上设置定时器update_time,当路由表发生变化后,立即调用Get(…)获取路由表函数。从而达到定时更新提取出的路由表的目的。

4 实验验证与分析

该实验基于NetFPGA硬件设计的可编程路由器如下:在每个VR中安装zebra路由协议软件,开启zebra守护进程,运行Rip路由协议。得到的路由表信息分别是图3、图4所示。

其中C代表是connect,R代表是运行RIP路由协议。

二者对比,明显发现随着链路发生变化,所提取的路由表也随着发生了变化,并且和链路变化一致,说明路由表提取是有效的,并是实时更新的。

5 结语

本文针对基于NetFPGA硬件的可编程虚拟化路由器由于采用控制与转发分离,而导致无法正常交互问题,做了一些分析研究,通过对路由协议软件的研究与分析,通过对zebra路由协议软件进行二次开发,添加了路由提取功能和定时更新功能,通过实验验证分析,提取的路由表随着路由信息的改变而更新,并恢复了控制平面与数据平面的正常交互。

参考文献

[1]Xie Gao-Gang, Zhang Yu-Jun,Li Zhen-Yu,et al.A survey on future Internet architecture[J].Chinese Journal of Computers, 2012,35(6):1109-1119(in Chinese).

[2]Paul S,Pan Jianli,Jain R.Architectures for the future networks and the next generation Internet:a survey[C].Computer Communications.2011.34(1):2-42.

[3]Feldmann Anja.Internet clean-slate design:what and why?[C]ACM SIGCOMM Computer Communication Review.2007.37(3):59-64.

[4]杨懋,刘中金,李勇,曾烈光,金德鹏,苏厉.基于可编程硬件的虚拟路由器控制平面.清华大学学报(自然科学版)[J].2012,52(5):586-591.