首页> 中国专利> 基于Linux内核网络子系统的虚拟网络块框架的构建方法

基于Linux内核网络子系统的虚拟网络块框架的构建方法

摘要

本发明涉及一种基于Linux内核网络子系统的虚拟网络块框架的构建方法,采用的方法是:第一构成虚拟网络块框架;第二构成虚拟网络块框架的数据流及接口;第三构建虚拟网络块框架的核心模块;第四构建虚拟网络块框架。本发明基于Linux内核的网络子系统,进行了模块化的虚拟网络块框架设计,对Linux操作系统的内核进行了内核优化,设计实现内核虚拟网络框架。通过本发明可以实现复杂协议的在内核内以面向对象的模块形式进行轻松的封装实现,并可以对用户空间的性能实现“内核实现”,利用内核的高效率实现高速处理能力,并将复杂的应用层协议与内核的高效结合起来,实现层三到层七应用功能的性能提升。

著录项

  • 公开/公告号CN101370009A

    专利类型发明专利

  • 公开/公告日2009-02-18

    原文格式PDF

  • 申请/专利权人 武汉理工大学;

    申请/专利号CN200810047041.0

  • 发明设计人 李腊元;蒋汉平;

    申请日2008-03-12

  • 分类号

  • 代理机构武汉开元专利代理有限责任公司;

  • 代理人潘杰

  • 地址 430070 湖北省武汉市武昌珞狮路122号

  • 入库时间 2023-12-17 21:32:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 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 虚拟网络块核心模块表

 

虚拟网络块模块框图模块特性      图8(a)                              NG_SOCKET                                                                ·用户空间内的应用通过NG_SOCKET,控  制管理内核内的虚拟网络块模块        ·提供BSD套接接口、协议簇           PF_NETGRAPH(sendto(),write()...)   ·应用通过节点发送或接受数据流和控制消息。                              图8(b)                                          NG_ETHER                            ·对来自以太接口的数据包应用虚拟网络块的处理过程。                      ·输入的原数据包通过lower钩子。接受到的以太数据包通过upper钩子。         ·缺省状态lower钩子和upper钩子是互连 的。                                ·对每一个以太接口自动产生NG_ETHER节  点。                                图8(c)      NG_TEE                              ·对所有通过NG_TEE节点的数据包进行复制,然后传递给每一个出口钩子。        图8(d)                                          NG_IFACE                              ·连接到IP层(IPv4或IPv6)的系统网络    接口                                  ·对二层连接(例如:PPP)封装成IP逻辑   接口。                                ·支持控制消息:NGM_IFACE_GET_IFNAME,NGM_IFACE_SET_IFNAME,                NGM_IFACE_POINT2POINT,                 NGM_IFACE_BROADCAST。                  图8(e)      NG_EIFACE                             ·产生一个通用以太接口(bnet)            ·用于网络桥接。连接以太接口时自动产生

 

NG_ETHER节点。                    ·支持控制消息:NGM_IFACE_SET(设置接口链路层地址);                 NGM_EIFACE_GET_IFNAME(得到以太接口命名。                            图8(f)                        NG_KSOCKET                         ·VNB节点实现inet或inet6套接字接口·建立基于UDP隧道的数据包流       ·支持控制消息:NGM_KSOCKET_BING, NGM_KSOCKET_CONNECT,               NGM_KSOCKET_GETNAME。              图8(g)                              NG_ETF                                ·根据以太报头的以太类型字段          (ethertype),对数据包进行过滤或复用   后传递给不同的钩子。                  ·与NG_ETHER节点互连                  ·支持控制消息:NGM_ETF_SET_FILTER。确定数据包过滤的以太类型。              图8(h)                        NG_VLAN                              ·根据IEEE802.1Q的帧标签,在不同的钩 子之间多路传输数据包。               ·与NG_ETF节点互连。                 ·支持控制消息:NGM_VLAN_ADD_FILTER,NGM_VLAN_DEL_FILTER.                 

虚拟网络块框架的构建方法

为了发挥虚拟网络块高效、高性能的特点,在本发明的软件框架中,提供了一系列的标准虚拟网络块节点(如上所述),构建虚拟网络块框架首先要根据功能特性,使用C或C++开发满足特性需求的虚拟网络块模块;

第二步,在控制平面或数据平面中开发相应的控制模块;然后,定义控制模块与内核内虚拟网络块节点以及虚拟网络块节点之间的控制消息;最后,建立起虚拟网络块节点之间的图形方案,并建立起与功能对应的虚拟网络块框架。

本发明利用NGGT命令集构建虚拟网络块框架,这些命令用于管理模块,可以避免内核开发过程中难以测试和调试的问题。利用虚拟网络块框架,本发明可以动态的修改内核并开发自动测试脚本。

构建虚拟网络块框架的主要命令如下表2所列。

表2 虚拟网络块框架建立命令表

 

虚拟网络块框图NGCTL命令图9(a)                              MKPEER:生成一个虚拟网络块节点                  用法:mkpeer[path]<type><hook><peerhook>      生成一个类型为”type”的节点,利用”path”连    接此节点,原始节点上的钩子是”hook1”,新节点 上连接的钩子是”Peerhook”。                  构建虚拟网络块框图命令:                      Mkpeer VNB1:tee hook1 right.                    图9(b)                  NAME:为生成的虚拟网络块节点命名。 用法:name[path]<name>             对path指向的节点命名为”name”     构建虚拟网络块框图命令:           Name虚拟网络块1:hook1 MYTEE        图9(c)                  CONNECT:连接两个虚拟网络块节点              用法:connect[path]<relpath.><hook><peerhook>通过路径”relpath“连接目的节点的”peerhook”钩子。                                      Connect MYTEE:虚拟网络块2:Left hook2          图9(d)            SHUTDOWN:拆解一个虚拟网络块节点         用法:shutdown<path>                  拆解路径”path”指向的虚拟网络块节点。Shutdown虚拟网络块2:hook2             图9(e)                  MSG:向虚拟网络块节点发送控制消息。       用法:msg path command[args…]             通过路径paht发送netgraph控制消息给节点。 Msg send虚拟网络块1:hook1 name mytee       Msg send mytee:right getpeername            

虚拟网络块框架的网络应用设计方法:

虚拟网络块在软件框架中的多个层次有不同的应用,它适合在下列的开发场景中使用。

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所示。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号