专利名称::基于Linux内核网络子系统的虚拟网络块框架的构建方法
技术领域:
:本发明属于计算机操作系统及计算机网络,具体地讲是基于Linux内核网络子系统的虚拟网络块框架的构建方法。
背景技术:
:在通信网络日益复杂,各种网络设备和新业务大量涌现,网络正在进化成一个可以提供数据、语音和视频内容的多元混合体,对网络业务流量的处理能力提出了更高的要求。虚拟网络块(virtualnetworkblock)框架建立在Netgraph机制上,Netgraph机制是一个遵循Unix头见范的内核子系统,它由许多模块组成,每个模块完成一定的功能。它由nodes和edges纟且成,数才居5危沿着edge从一个node力充向另夕|^一个node。当node收到数据包的时候,执行一定的数据包处理操作,然后转发数据包到另外一个node。在这个数据包处理才喿作中,可以是简单的添加和删除数据包头,也可以添加更具体的处理操作(例如数据包的内容合成,4交,验等)。Netgraph系统设计思想采用了SystemV的流,技术,因此具有更快的速度、灵活性和更高的处理效率。Netgraph运行速度快是因为它完全运行在内核里,在ether-input接受到网卡传递过来的数据包以后就交给了netgraph,利用内核的高优先级,在尽可能的^f氐层截获数据包进^f亍处理。另外它采用了函数式调用,数据包在从一个node传递到另外一个node的时候不需要数据包的复制操作,而只是传递了存放数据包内容的内存的地址,这样就增加了系统设计的灵活性同时也提高了运行速度。
发明内容本发明的目的是提供一种面向对象的设计方法引入内核设计中,所有的网络操作处理都是模块化,通过不同模块之间的组合实现网络子系统的高效灵活,采用"低层处理,,的策略,提高内核处理核心数据的能力,有效的提升各种应用的性能的基于Linux内核网络子系统的虚拟网络块框架的构建方法为了实现上述目的,本发明所采用的方法是第一步骤虚拟网络块框架的构成每一个虚拟网络块由一个处理单元(TU)节点和一个或多个互连单元(IU)钩子组成凄t据包通过双向的互连单元从一个处理节点流向另一个处理节点,每一个虚拟网络块实例节点处理接受到的数据包,然后传递到下一个节点,每个节点是一个简单的包处理过程,如果要在网络软件框架中实现复杂的处理过程需要多个虚拟网络块模块组合完成,通过不同的配置实现重用虚拟网络块模块;钩子作为互连单元(UT)将不同的虚拟网络块进行连接,处理单元(TU)通过钩子来实现数据流和控制消息在虚拟网络块节点之间的传递;第二步骤虚拟网络块框架的数据流及接口构成虚拟网络块框架中数据流通过两类API来传递控制消息和数据消息1)数据API:在内核或用户空间之间交换凝:据包,数据包沿着钩子从一个节点传递到另一个节点,每一个节点决定如何处理来至于自己钩子的数据包;2)控制API:在内核或用户空间之间传递控制消息进行虚拟网络块的管理,节点通过控制API向另一个节点直接发送消息或ASCII指令。在虚拟网络块框架中,虚拟网络块的控制包括虚拟网络块节点之间的控制和用户空间虚拟网络块控制进程对内核内虚拟网络块的控制;第三步骤构建虚拟网络块框架的核心模块第四步骤构建虚拟网络块框架首先使用(:或0++开发满足特性需求的虚拟网络块模块;第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制^f莫块与内核内虚拟网络块节点以及虚拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。本发明基于Linux内核的网络子系统,进行了模块化的虚拟网络块框架设计,其主要技术优势如下1)在内核空间内,虛拟网络块作为内核内的网络子系统,^f吏用网络协议模块的概念设计高效的内核,所有的操作处理都是模块化,每个模块完成一定的功能,执行一定的数据包处理操作,通过不同模块之间的组合实现网络子系统的高效灵活,同时任何模块的处理可以动态的增加到内核模块中。2)虚拟网络块运行速度快是因为它完全运行在内核里,利用内核的高优先级,在尽可能的低层截获数据包进行处理。整个过程中采用了"低层处理"的策略,尽可能在最低层能够把非法的数据包屏蔽掉,在最低层对内存进行释放。整个核心数据处理流程全部工作在内核一级,包括在物理层、IP层、TCP层,把相对耗费时间的匹配过程交给了用户进程去处理。3)虚拟网络块的设计采用了面向对象的^:计,整个数据的处理过程采用了UnixSystemV的流技术,所有数据包处理过程中都没有复制的操作。数据包的传送过程全部依靠指针的调用来定位。图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—KS0CKET、g-NG—ETF、h-NG—VLAN。图9为本发明在不同NGCTL命令下虛拟网络块框图。其中a-MKPEER、b-N廳、c-C0NNECT、d-SHUTD0WN、e-MSG。具体实施方式下面结合附图对本发明作进一步的详细描述本发明虛拟网络块(virtualnetworkframework)框架建立在Linuxkernl的网络子系统基础上,整个数据的处理过程采用了UnixSystemV的流技术,所有数据包处理过程中都没有复制的操作。数据包的传送过程全部依靠指针的调用来定位。在整个过程中我们采用了"低层处理"的策略,尽可能在最低层能够把非法的数据包屏蔽掉,在最低层对内存进行释放。整个核心数据处理流程全部工作在内核一级,包括在物理层、IP层、TCP层,把相对耗费时间的匹配过程交给了用户进程去处理。虚拟网络块框架的构成虚拟网络块类似于一个网络拓朴图,所有的数据包从一个地方流向另一个地方,可以根据需要增加和删除node,数据以数据流的形式进行传递。而且如果需要添加新的过滤策略,加密算法,还有其他特殊处理的时候,只需要在虛拟网络块系统中增加一个新的node,在这个node里边加入一些特殊的操作,就可以实现这样的功能。正是因为虚拟网络块良好的扩展性,我们可以很方便地提供多协议的支持。虚拟网络块框架作为内核内的网络子系统,使用网络协议才莫块的概念设计高效的内核,所有的操作处理都是模块化,通过不同模块之间的组合实现网络子系统的高效灵活,同时任何模块的处理可以动态的增加到内核模块中。每一个虚拟网络块由一个处理单元(TU)节点和一个或多个互连单元(IU)钩子组成。数据包通过双向的互连单元从一个处理节点流向另一个处理节点,没一个虛拟网络块实例节点处理接受到的数据包,然后传递到下一个节点,每个节点是一个简单的包处理过程,如果要在网络软件框架中实现复杂的处理过程需要多个虚拟网络块模块组合完成,通过不同的配置实现重用虚拟网络块模块。钩子作为互连单元(UT)将不同的虚拟网络块进行连接,处理单元(TU)通过钩子来实现数据流和控制消息在虚拟网络块节点之间的传递(图1)。虚拟网络块处理单元-实例节点需要满足下列属性1、每个虚拟网络块的实例在某一时刻仅i^能处理一个数据包。2、每个虚拟网络块实例节点参数是局部变量。3、虚拟网络块实例节点根据节点参数的不同来定义操作4、虚拟网络块实例节点处理简单的操作,例如去掉或增加报文头、根据相关的表确定数据包的流向。5、虚拟网络块实例节点至少有一个钩子连接到另一个激活的节点时,节点才能激活。虚拟网络块连接单元-钩子需要满足下列属性1、每个激活节点至少连接有一个钩子。2、钩子与使用钩子的节点是完全独立的。3、钩子必须保证虚拟网络块实例节点在某一时刻4又仅处理一个数据包。虚拟网络块框架的数据流及接口虚拟网络块框架中数据流通过两类API来传递控制消息和数据消息1、数据API:在内核或用户空间之间交换数据包,数据包沿着钩子从一个节点传递到另一个节点,每一个节点决定如何处理来至于自己钩子的数据包。2、控制API:在内核或用户空间之间传递控制消息进行虛拟网络块的管理,节点通过控制API向另一个节点直接发送消息或ASCII指令。在虚拟网络块框架中,虚拟网络块的控制包括虛拟网络块节点之间的控制和用户空间虚拟网络块控制进程对内核内虚拟网络块的控制。上述的两类API,既可以在用户空间控制内核内的虚拟网络块,并且与虚拟网络块交换数据;又可以在内核内直接在互连的虚拟网络块之间交换数据,并且在不同的虚拟网络块之间传递控制命令。控制消息和数据消息又根据运行的空间不同分为用户空间API和内核API。用户空间的API基于BSD套接字API,用来配置虚拟网络块节点并在节点之间传递数据包,使用新的协议簇PF-NETGRAPH以及新的sockaddr-ng数据结构。对于使用NGCTL构建虚拟网络块框架使用libnetgraph库,使用NG-S0CKET通过内核API在虚拟网络块节点之间传递数据包。内核API在内核空间内不同的虚拟网络块节点之间传输数据并传输控制消息。虚拟网络块框架的核心模块表l虚拟网络块核心模块表<table>complextableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>虚拟网络块框架的构建方法为了发挥虚拟网络块高效、高性能的特点,在本发明的软件框架中,提供了一系列的标准虚拟网络块节点(如上所述),构建虚拟网络块框架首先要根据功能特性,使用C或0++开发满足特性需求的虚拟网络块模块;第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制模块与内核内虚拟网络块节点以及虛拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。本发明利用NGGT命令集构建虚拟网络块框架,这些命令用于管理棋块,可以避免内核开发过程中难以测试和调试的问题。利用虚拟网络块框架,本发明可以动态的修改内核并开发自动测试脚本。构建虚拟网络块框架的主要命令如下表2所列。表2虚拟网络块框架建立命令表<table>tableseeoriginaldocumentpage12</column></row><table>虚拟网络块框架的网络应用设计方法虚拟网络块在软件框架中的多个层次有不同的应用,它适合在下列的开发场景中使用。1)在虚拟网络块框架中,内核在数据平面里可以轻松的实现各种协议的封装,例如GRE、基于Teredo隧道机制的IPv6转换机制、PPPoE/PPPoA、VLAN、MPLS、ATM、UDP等等。2)控制平面应用的性能优化通过虚拟网络块框架,控制平面中的应用能够在内核实现,对于某些性能敏感的应用如netflow,可以在控制平面实现来验证实现,而后利用虚拟网络块在内核中优化性能;利用虚拟网络块中的注册机制集成不同网络接口的驱动。连接物理层的虚拟网络块模块虚拟网络块框架提供注册机制将原始的网络设备驱动转变成虚拟网络块使能的驱动,为了实现虚拟网络块与网络设备的连接,网络设备必须为可加载的内核^t块,它将在内核加载虚拟网络块才莫块后加载。同时,网络驱动必须作为标准的net-device网络i殳备凄史据结构注册,利用标准的Linux队列才几制,例如通过netif-rx()向上层发送数据包,通过dev_queue_xmit()从上层接受的数据包并进行处理。在net—device网络设备注册过程中,通过扩展集成在内核内的net—device数据结构存储虚拟网络块的私有数据。其中,VNB_ops的^U居结构定义如下a)VNB-node:连接到网络设备的虚拟网络块节点。b)VNB-input():数据包通过虚拟网《各块节点时,由netif—receive—skb()调用。c)VNB-input—orphan():数据流处理过程中,对未在虚拟网络块中定义类型的报文调用此函数。d)VNB—output():^t才居包流出虚拟网纟备块时,由dev_queue_xmit()调用。网络设备在注册机制中集成虚拟网络块私有数据后,网络设备同时也在虚拟网络块框架中注册,并自动的生成NG-RAW于网络设备连接,NG—RAW节点名字将作为此网络设备名。数据包通过NG-RAW的lower钩子输入与之连接的虚拟网络块节点;同样,从虚拟网络块节点接受的数据包也通过lower钩子,通过调用dev—queue-xmit()传递到网络设备。对于那些虚拟网络块节点无法处理的数据包(例如协议处理类型不匹配),通过u卯er钩子将这些数据包分离到传统的内核处理路径。根据(图5)上面输入、^T出过程的描述,以标准的PPP协议过程为例,设计的PPP输入过程能够如图6所示;PPP输出过程如图6-7所示。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。权利要求1.一种基于Linux内核网络子系统的虚拟网络块框架的构建方法,采用的方法是第一步骤虚拟网络块框架的构成每一个虚拟网络块由一个处理单元(TU)节点和一个或多个互连单元(IU)钩子组成数据包通过双向的互连单元从一个处理节点流向另一个处理节点,每一个虚拟网络块实例节点处理接受到的数据包,然后传递到下一个节点,每个节点是一个简单的包处理过程,如果要在网络软件框架中实现复杂的处理过程需要多个虚拟网络块模块组合完成,通过不同的配置实现重用虚拟网络块模块;钩子作为互连单元(UT)将不同的虚拟网络块进行连接,处理单元(TU)通过钩子来实现数据流和控制消息在虚拟网络块节点之间的传递;第二步骤虚拟网络块框架的数据流及接口构成虚拟网络块框架中数据流通过两类API来传递控制消息和数据消息1)数据API在内核或用户空间之间交换数据包,数据包沿着钩子从一个节点传递到另一个节点,每一个节点决定如何处理来至于自己钩子的数据包;2)控制API在内核或用户空间之间传递控制消息进行虚拟网络块的管理,节点通过控制API向另一个节点直接发送消息或ASCII指令。在虚拟网络块框架中,虚拟网络块的控制包括虚拟网络块节点之间的控制和用户空间虚拟网络块控制进程对内核内虚拟网络块的控制;第三步骤构建虚拟网络块框架的核心模块第四步骤构建虚拟网络块框架首先使用C或C++开发满足特性需求的虚拟网络块模块;第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制模块与内核内虚拟网络块节点以及虚拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。全文摘要本发明涉及一种基于Linux内核网络子系统的虚拟网络块框架的构建方法,采用的方法是第一构成虚拟网络块框架;第二构成虚拟网络块框架的数据流及接口;第三构建虚拟网络块框架的核心模块;第四构建虚拟网络块框架。本发明基于Linux内核的网络子系统,进行了模块化的虚拟网络块框架设计,对Linux操作系统的内核进行了内核优化,设计实现内核虚拟网络框架。通过本发明可以实现复杂协议的在内核内以面向对象的模块形式进行轻松的封装实现,并可以对用户空间的性能实现“内核实现”,利用内核的高效率实现高速处理能力,并将复杂的应用层协议与内核的高效结合起来,实现层三到层七应用功能的性能提升。文档编号H04L29/06GK101370009SQ20081004704公开日2009年2月18日申请日期2008年3月12日优先权日2008年3月12日发明者李腊元,蒋汉平申请人:武汉理工大学