法律状态公告日
法律状态信息
法律状态
2014-05-07
未缴年费专利权终止 IPC(主分类):H04L29/06 授权公告日:20110824 终止日期:20130312 申请日:20080312
专利权的终止
2011-08-24
授权
授权
2009-04-15
实质审查的生效
实质审查的生效
2009-02-18
公开
公开
技术领域
本发明属于计算机操作系统及计算机网络,具体地讲是基于Linux内核网络子系统的虚拟网络块框架的构建方法。
背景技术
在通信网络日益复杂,各种网络设备和新业务大量涌现,网络正在进化成一个可以提供数据、语音和视频内容的多元混合体,对网络业务流量的处理能力提出了更高的要求。虚拟网络块(virtual network block)框架建立在Netgraph机制上,Netgraph机制是一个遵循Unix规范的内核子系统,它由许多模块组成,每个模块完成一定的功能。它由nodes和edges组成,数据流沿着edge从一个node流向另外一个node。当node收到数据包的时候,执行一定的数据包处理操作,然后转发数据包到另外一个node。在这个数据包处理操作中,可以是简单的添加和删除数据包头,也可以添加更具体的处理操作(例如数据包的内容合成,校验等)。Netgraph系统设计思想采用了System V的流技术,因此具有更快的速度、灵活性和更高的处理效率。Netgraph运行速度快是因为它完全运行在内核里,在ether-input接受到网卡传递过来的数据包以后就交给了netgraph,利用内核的高优先级,在尽可能的低层截获数据包进行处理。另外它采用了函数式调用,数据包在从一个node传递到另外一个node的时候不需要数据包的复制操作,而只是传递了存放数据包内容的内存的地址,这样就增加了系统设计的灵活性同时也提高了运行速度。
发明内容
本发明的目的是提供一种面向对象的设计方法引入内核设计中,所有的网络操作处理都是模块化,通过不同模块之间的组合实现网络子系统的高效灵活,采用“低层处理”的策略,提高内核处理核心数据的能力,有效的提升各种应用的性能的基于Linux内核网络子系统的虚拟网络块框架的构建方法
为了实现上述目的,本发明所采用的方法是:
第一步骤:虚拟网络块框架的构成:
每一个虚拟网络块由一个处理单元(TU)节点和一个或多个互连单元(IU)钩子组成:数据包通过双向的互连单元从一个处理节点流向另一个处理节点,每一个虚拟网络块实例节点处理接受到的数据包,然后传递到下一个节点,每个节点是一个简单的包处理过程,如果要在网络软件框架中实现复杂的处理过程需要多个虚拟网络块模块组合完成,通过不同的配置实现重用虚拟网络块模块;钩子作为互连单元(UT)将不同的虚拟网络块进行连接,处理单元(TU)通过钩子来实现数据流和控制消息在虚拟网络块节点之间的传递;
第二步骤:虚拟网络块框架的数据流及接口构成:
虚拟网络块框架中数据流通过两类API来传递控制消息和数据消息:
1)数据API:在内核或用户空间之间交换数据包,数据包沿着钩子从一个节点传递到另一个节点,每一个节点决定如何处理来至于自己钩子的数据包;
2)控制API:在内核或用户空间之间传递控制消息进行虚拟网络块的管理,节点通过控制API向另一个节点直接发送消息或ASCII指令。在虚拟网络块框架中,虚拟网络块的控制包括:虚拟网络块节点之间的控制和用户空间虚拟网络块控制进程对内核内虚拟网络块的控制;
第三步骤:构建虚拟网络块框架的核心模块:
第四步骤:构建虚拟网络块框架:
首先使用C或C++开发满足特性需求的虚拟网络块模块;第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制模块与内核内虚拟网络块节点以及虚拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。
本发明基于Linux内核的网络子系统,进行了模块化的虚拟网络块框架设计,其主要技术优势如下:
1)在内核空间内,虚拟网络块作为内核内的网络子系统,使用网络协议模块的概念设计高效的内核,所有的操作处理都是模块化,每个模块完成一定的功能,执行一定的数据包处理操作,通过不同模块之间的组合实现网络子系统的高效灵活,同时任何模块的处理可以动态的增加到内核模块中。
2)虚拟网络块运行速度快是因为它完全运行在内核里,利用内核的高优先级,在尽可能的低层截获数据包进行处理。整个过程中采用了“低层处理”的策略,尽可能在最低层能够把非法的数据包屏蔽掉,在最低层对内存进行释放。整个核心数据处理流程全部工作在内核一级,包括在物理层、IP层、TCP层,把相对耗费时间的匹配过程交给了用户进程去处理。
3)虚拟网络块的设计采用了面向对象的设计,整个数据的处理过程采用了Unix System V的流技术,所有数据包处理过程中都没有复制的操作。数据包的传送过程全部依靠指针的调用来定位。
附图说明
图1为本发明虚拟网络块框架组成图。
图2为本发明虚拟网络块消息接口图。
图3为本发明数据流流入虚拟网络块流程图。
图4为本发明数据包流出虚拟网络块流程图。
图5为本发明NG_RAW框图。
图6为本发明PPP输入过程的虚拟网络块框架图。
图7为本发明PPP输出过程的虚拟网络块框架图。
图8为本发明不同模块特性下虚拟网络块模块框图。
其中:a-NG_SOCKET、b-NG_ETHER、c-NG_TEE、d-NG_IFACE、e-NG_EIFACE、f-NG_KSOCKET、g-NG_ETF、h-NG_VLAN。
图9为本发明在不同NGCTL命令下虚拟网络块框图。
其中:a-MKPEER、b-NAME、c-CONNECT、d-SHUTDOWN、e-MSG。
具体实施方式
下面结合附图对本发明作进一步的详细描述
本发明虚拟网络块(virtual network framework)框架建立在Linuxkernl的网络子系统基础上,整个数据的处理过程采用了Unix System V的流技术,所有数据包处理过程中都没有复制的操作。数据包的传送过程全部依靠指针的调用来定位。在整个过程中我们采用了“低层处理”的策略,尽可能在最低层能够把非法的数据包屏蔽掉,在最低层对内存进行释放。整个核心数据处理流程全部工作在内核一级,包括在物理层、IP层、TCP层,把相对耗费时间的匹配过程交给了用户进程去处理。
虚拟网络块框架的构成
虚拟网络块类似于一个网络拓扑图,所有的数据包从一个地方流向另一个地方,可以根据需要增加和删除node,数据以数据流的形式进行传递。而且如果需要添加新的过滤策略,加密算法,还有其他特殊处理的时候,只需要在虚拟网络块系统中增加一个新的node,在这个node里边加入一些特殊的操作,就可以实现这样的功能。正是因为虚拟网络块良好的扩展性,我们可以很方便地提供多协议的支持。
虚拟网络块框架作为内核内的网络子系统,使用网络协议模块的概念设计高效的内核,所有的操作处理都是模块化,通过不同模块之间的组合实现网络子系统的高效灵活,同时任何模块的处理可以动态的增加到内核模块中。
每一个虚拟网络块由一个处理单元(TU)节点和一个或多个互连单元(IU)钩子组成。数据包通过双向的互连单元从一个处理节点流向另一个处理节点,没一个虚拟网络块实例节点处理接受到的数据包,然后传递到下一个节点,每个节点是一个简单的包处理过程,如果要在网络软件框架中实现复杂的处理过程需要多个虚拟网络块模块组合完成,通过不同的配置实现重用虚拟网络块模块。钩子作为互连单元(UT)将不同的虚拟网络块进行连接,处理单元(TU)通过钩子来实现数据流和控制消息在虚拟网络块节点之间的传递(图1)。
虚拟网络块处理单元-实例节点需要满足下列属性:
1、每个虚拟网络块的实例在某一时刻仅仅能处理一个数据包。
2、每个虚拟网络块实例节点参数是局部变量。
3、虚拟网络块实例节点根据节点参数的不同来定义操作
4、虚拟网络块实例节点处理简单的操作,例如:去掉或增加报文头、根据相关的表确定数据包的流向。
5、虚拟网络块实例节点至少有一个钩子连接到另一个激活的节点时,节点才能激活。
虚拟网络块连接单元-钩子需要满足下列属性:
1、每个激活节点至少连接有一个钩子。
2、钩子与使用钩子的节点是完全独立的。
3、钩子必须保证虚拟网络块实例节点在某一时刻仅仅处理一个数据包。
虚拟网络块框架的数据流及接口:
虚拟网络块框架中数据流通过两类API来传递控制消息和数据消息:
1、数据API:在内核或用户空间之间交换数据包,数据包沿着钩子从一个节点传递到另一个节点,每一个节点决定如何处理来至于自己钩子的数据包。
2、控制API:在内核或用户空间之间传递控制消息进行虚拟网络块的管理,节点通过控制API向另一个节点直接发送消息或ASCII指令。在虚拟网络块框架中,虚拟网络块的控制包括:虚拟网络块节点之间的控制和用户空间虚拟网络块控制进程对内核内虚拟网络块的控制。
上述的两类API,既可以在用户空间控制内核内的虚拟网络块,并且与虚拟网络块交换数据;又可以在内核内直接在互连的虚拟网络块之间交换数据,并且在不同的虚拟网络块之间传递控制命令。
控制消息和数据消息又根据运行的空间不同分为用户空间API和内核API。用户空间的API基于BSD套接字API,用来配置虚拟网络块节点并在节点之间传递数据包,使用新的协议簇PF_NETGRAPH以及新的sockaddr_ng数据结构。对于使用NGCTL构建虚拟网络块框架使用libnetgraph库,使用NG_SOCKET通过内核API在虚拟网络块节点之间传递数据包。内核API在内核空间内不同的虚拟网络块节点之间传输数据并传输控制消息。
虚拟网络块框架的核心模块:
表1 虚拟网络块核心模块表
虚拟网络块框架的构建方法
为了发挥虚拟网络块高效、高性能的特点,在本发明的软件框架中,提供了一系列的标准虚拟网络块节点(如上所述),构建虚拟网络块框架首先要根据功能特性,使用C或C++开发满足特性需求的虚拟网络块模块;
第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制模块与内核内虚拟网络块节点以及虚拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。
本发明利用NGGT命令集构建虚拟网络块框架,这些命令用于管理模块,可以避免内核开发过程中难以测试和调试的问题。利用虚拟网络块框架,本发明可以动态的修改内核并开发自动测试脚本。
构建虚拟网络块框架的主要命令如下表2所列。
表2 虚拟网络块框架建立命令表
虚拟网络块框架的网络应用设计方法:
虚拟网络块在软件框架中的多个层次有不同的应用,它适合在下列的开发场景中使用。
1)在虚拟网络块框架中,内核在数据平面里可以轻松的实现各种协议的封装,例如:GRE、基于Teredo隧道机制的IPv6转换机制、PPPoE/PPPoA、VLAN、MPLS、ATM、UDP等等。
2)控制平面应用的性能优化:通过虚拟网络块框架,控制平面中的应用能够在内核实现,对于某些性能敏感的应用如netflow,可以在控制平面实现来验证实现,而后利用虚拟网络块在内核中优化性能;利用虚拟网络块中的注册机制集成不同网络接口的驱动。
连接物理层的虚拟网络块模块:
虚拟网络块框架提供注册机制将原始的网络设备驱动转变成虚拟网络块使能的驱动,为了实现虚拟网络块与网络设备的连接,网络设备必须为可加载的内核模块,它将在内核加载虚拟网络块模块后加载。
同时,网络驱动必须作为标准的net_device网络设备数据结构注册,利用标准的Linux队列机制,例如通过netif_rx()向上层发送数据包,通过dev_queue_xmit()从上层接受的数据包并进行处理。在net_device网络设备注册过程中,通过扩展集成在内核内的net_device数据结构存储虚拟网络块的私有数据。
其中,VNB_ops的数据结构定义如下:
a)VNB_node:连接到网络设备的虚拟网络块节点。
b)VNB_input():数据包通过虚拟网络块节点时,由netif_receive_skb()调用。
c)VNB_input_orphan():数据流处理过程中,对未在虚拟网络块中定义类型的报文调用此函数。
d)VNB_output():数据包流出虚拟网络块时,由dev_queue_xmit()调用。
网络设备在注册机制中集成虚拟网络块私有数据后,网络设备同时也在虚拟网络块框架中注册,并自动的生成NG_RAW于网络设备连接,NG_RAW节点名字将作为此网络设备名。数据包通过NG_RAW的lower钩子输入与之连接的虚拟网络块节点;同样,从虚拟网络块节点接受的数据包也通过lower钩子,通过调用dev_queue-xmit()传递到网络设备。对于那些虚拟网络块节点无法处理的数据包(例如:协议处理类型不匹配),通过upper钩子将这些数据包分离到传统的内核处理路径。根据(图5)上面输入、输出过程的描述,以标准的PPP协议过程为例,设计的PPP输入过程能够如图6所示;PPP输出过程如图6-7所示。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
机译: 虚拟网络构建程序,虚拟网络构建设备和虚拟网络构建方法
机译: 虚拟网络构建程序,虚拟网络构建设备和虚拟网络构建方法
机译: 虚拟网络构建系统,虚拟网络构建方法,小终端和认证服务器