基于Linux内核的流量分析方法

文档序号:7611430阅读:426来源:国知局
专利名称:基于Linux内核的流量分析方法
技术领域
本发明涉及计算机网络流量分析技术领域,特别是设计一种基于Linux内核的流量分析方法。
背景技术
流量指标是网络运维最重要的指标之一,是网络规划设计、协议设计、业务部署、流量工程实施、攻击检测与故障诊断的基础。通过网络流量的监测和分析可以获得大量网络性能信息、网络服务状况以及网络中存在的攻击或者弱点。通过数据包捕获与协议分析的被动流量监测获得各个协议层次的流量指标,是流量监测最常用的方法。
近几年来,网络链路速率迅速增长,已经开始从Mbit/s迈向Gbit/s,不久的将来可能还会发展至40Gbit/s甚至Tbit/s。千兆网卡和千兆交换机已经相当的便宜,几乎每个新的局域网用户都会采用此项技术,一个普通的家庭用户所能够获得的带宽比两年前一个公司获得的带宽还要大。网络应用的普及与网络技术的发展,导致网络流量也日益庞大,基于数据包捕获的被动流量监测分析受到诸多技术的限制,如PCI(PeripheralComponent Interconnect,外设部件互连)总线吞吐量、存储容量、内存访问速度以及磁盘阵列的速率[1],使得满足低速链路流量监测分析的传统被动流量监测分析技术不能适用于更高速率的网络环境,如基于libpcap的流量监测分析工具。为了克服操作系统、PCI总线带宽和系统资源所带来的性能限制,很多研究人员开始采用网络处理器进行流量监测分析。而采用网络处理器往往需要专用的设备,开发周期长,大量部署不太现实。
数据包捕获方法是进行被动流量监测分析最常用的方法。近几年,也有很多研究人员和硬件生产厂商试图A通过专用硬件实现被动流量监测和分析,如OC3MON及DAG。另外,有关流量监测分析的一些新的研究项目也正在进行,如欧洲的SCAMP设计了一种数据包捕获的体系结构;MAGNet则可以进行应用流的监测;CoralReef是由著名的CAIDA组织开发实现的一种收集和分析Internet被动流量监测信息的重要工具之一。
在通用平台上实现流量监测分析仍然是最为常用的方法,如Tcpdump/Libpcap,Sniffer等,其基本原理是捕获流经链路或者端口的数据包,分析每个数据包并获得流量统计分析结果。流量分析方法被广泛应用到入侵检测(snort,Bro),流量分析(ntop,ethereal,tcpflow)系统中。目前大部分的流量分析工具是基于libpcap实现的,能够提供基本的网络链路状况信息,比如链路利用率,带宽,协议分布等。
Libpcap是可以适用于多种操作系统(如Linux,FreeBSD,Solaris等)的数据包捕获库,利用该库可以向开发人员屏蔽底层网络链路所采用技术。Libpcap提供强大的内核包过滤器-BPF(Berkeley Packet Filter)。在介绍BPF之前,首先解释Linux操作系统中网络通信的实现。图1是一个简单linux系统中数据包接收的流向图,其中包括了BPF的位置。Linux网络接口包括四个重要部分网络设备接口、网络核心接口、网络协议栈和网络socket接口。前两个部分是实现网络通信的基础,也是和本文介绍的流量分析方法密切相关的。网络设备接口是实现网络通信的最关键的部分之一,可以屏蔽底层不同的物理介质,提供统一的数据包发送/接收接口,如图1中所示的网络设备(Network Interface)。网络核心接口则负责从网络设备获得相应的数据包并缓存在内核中,根据用户或者系统缺省注册的处理函数进行分发处理,图1所示的BPF即属于网络核心接口。BPF是基于内核的数据包过滤器,是进行数据包捕获的重要组件之一。BPF被认为是Unix中实现数据包过滤组件中最好的一种实现[10]。BPF包括两个主要部分数据包复制器和数据包过滤器。数据包复制器负责从网络设备驱动获得网络链路中数据包的备份,并把该备份传送给数据包过滤器。过滤器则根据过滤规则决定数据包取舍。非常重要的一点,BPF只把符合规则要求的数据包传递到用户空间。同时,BPF也支持只把所需要的部分数据包,如数据包的前64字节,传递到用户空间,以降低数据包拷贝开销。举例来讲,对于以太网数据包,前64字节足以满足对以太网头与IP/TCP头的分析。

发明内容
本发明是一种基于Linux内核的流量分析方法,该方法的关键在于其采用了基于Linux内核可装载模式实现,以字符设备方式供用户空间程序使用,具体内容叙述如下1)基于Linux内核的流量分析方法在Linux内核空间实现,并且集成BPF的数据包过滤以及网络流量分析功能,能够支持对2-7层100多种协议数据包的分析。其实现方法能够有效减少内存拷贝及系统调用时间,降低存储空间的需求,提高流量监测分析的效率。附图1为该方法设计的系统结构图。
2)网络数据包在Linux系统内核中的到达和处理流程可描述如下网卡收到数据包即向CPU发送硬中断,CPU将把数据包从网卡的缓存中取出并在内核的Skbuff链表中创建新的结点存储接收到的数据包等待协议栈或者其他注册的功能函数的处理。由于方法在内核中完成所有的流量分析功能,只是把分析结果通过API方式提供给用户空间程序。而且,待分析的网络数据包可以直接从内核中的Skbuff链表中获得,大大降低了内核到用户空间的内存拷贝和系统调用开销。
该方法通过直接获取Skbuff中数据包的内容,并在内核空间实现所有的流量分析功能,包括数据包捕获功能均在内核中实现。
3)本发明的流量分析方法支持两种级别的流量分析数据包级和流(Flow)级。数据包级,缺省情况下能够完成对所有原始数据包的协议分析,并提供200多种协议分析结果。这些结果可以通过方法本身提供的用户空间可用的接口获得,主要的分析指标包括流量速率(包速率和字节速率),链路利用率,不同层次的协议分布,包大小分布、包间隔分布以及不同协议流量速率等。除此之外,还可以根据不同的流规则定义实现指定流的监测并提供基于流的分析指标,其中统计指标包括流持续时间的统计分布,流速率,流大小统计分布,并发流数量统计分布等;其他详细指标根据流规则定义不同而有所不同,例如出入境流量区分、特定端口、特定AS域、特定IP地址段、特定服务的监测分析、流量排名前N的IP主机,IP主机对及流量排名前N的端口和AS域等。
4)支持原始数据包的捕获也是流量分析工具的一个重要功能,因此本方法提供了对一定数量的原始数据包捕获的功能支持。方法中能够提供的配置功能、原始数据包以及统计分析数据的上传都可以通过设计的API接口供用户空间程序使用。并且鉴于BPF(BerkeleyPacket Filter)是一种比较成熟,且被广泛使用的过滤器,方法中继承了对BPF的过滤规则的语法支持。


图1是Linux系统下数据包接收过程流程图。
图2是基于内核的流量分析方法的系统结构示意图。
图3是基于Linux内核的流量分析方法流程图。
具体实施例方式
图1Linux系统内核中数据包接收过程的走向图,首先网卡收到数据包会向CPU发送中断请求,CPU根据中断请求从网卡缓存中获得到达的数据包,数据包经由PCI总线传到内核空间,并在Skbuff中创建对应数据包的结点,最后交给协议栈或者类似BPF的基于内核的处理模块处理。所有的处理以及结果根据用户需求通过系统调用方式和用户空间程序互通。
图2基于内核的流量分析方法体系结构设计图。该方法的所有分析功能均在内核中实现,并且提供两种级别数据包级和流级的监测分析指标,并支持一定数量原始数据包的捕获。分析结果和原始数据包都通过API方式提供给用户空间程序使用。
图3的基于Linux内核的流量分析方法,其步骤如下首先网卡收到数据包会向CPU发送中断请求,CPU根据中断请求从网卡缓存中获得到达的数据包,数据包经由PCI总线传到内核空间,并在Skbuff中创建对应数据包的结点,最后交给协议栈以及在内核中注册的其他处理网络数据包处理函数进行处理。
具体步骤为步骤S1,把网卡设置为混杂模式以获得所有网络数据包;
步骤S2,注册内核级网络流量分析函数,用来对分析函数指定的协议类型进行处理,本方法中的流量分析函数指定的协议类型为所有以太网类型;步骤S3,配置流量分析参数,使得流量分析函数能够分析根据用户自定义规则进行分析;步骤S4,如果内核空间中的数据包内核缓存链表不为空,则调用已注册的流量分析函数进行分析,结果放在统计结果缓存和流记录缓存中;步骤S5,如果模块接收到用户空间卸载模块请求则取消网卡混杂模式并执行S6;步骤S6,取消注册的内核级流量分析函数;步骤S7,如果模块接收到用户空间获取分析结果的请求,则处理请求并返回相应结果。
具体实施例1.以Linux内核下的字符设备驱动方式实现方法中提到的流量分析功能、配置功能、结果获取API。
2.装载实现流量分析功能的字符设备驱动,并根据提供的字符设备操作API对内核中的流量分析功能进行配置并获取分析结果。
权利要求
1.基于Linux内核的流量分析方法,其特征在于,该方法完全在Linux内核空间实现,降低了系统调用、内存拷贝开销以及PCI总线带宽的需求。
2.根据权利要求1所述的基于Linux内核的流量分析方法,其特征在于,该方法通过直接获取Skbuff中数据包的内容,并在内核空间实现所有的流量分析,包括数据包捕获均在内核中实现。
3.根据权利要求1所述的基于Linux内核的流量分析方法,其特征在于,该方法通过可装载内核模块方式,以字符设备方式供用户空间程序使用。
4.根据权利要求1所述的基于Linux内核的流量分析方法,其特征在于,该方法提供两种不同级别流量分析指标数据包级及流级。
5.根据权利要求4所述的基于Linux内核的流量分析方法,其特征在于,方法中数据包级指标提供200多种协议分析,主要分析指标有流量速率,链路利用率,不同层次的协议分布,包大小分布、包间隔分布以及不同协议流量速率。
6.根据权利要求4所述的基于Linux内核的流量分析方法,其特征在于,方法中流级统计指标包括流持续时间的统计分布,流速率,流大小统计分布,并发流数量统计分布。
7.一种基于Linux内核的流量分析方法,首先网卡收到数据包会向CPU发送中断请求,CPU根据中断请求从网卡缓存中获得到达的数据包,数据包经由PCI总线传到内核空间,并在Skbuff中创建对应数据包的结点,最后交给协议栈以及在内核中注册的其他处理网络数据包处理函数进行处理。
8.根据权利要求7的基于Linux内核的流量分析方法,其具体步骤如下步骤S1,把网卡设置为混杂模式以获得所有网络数据包;步骤S2,注册内核级网络流量分析函数,用来对分析函数指定的协议类型进行处理,本方法中的流量分析函数指定的协议类型为所有以太网类型;步骤S3,配置流量分析参数,使得流量分析函数能够分析根据用户自定义规则进行分析;步骤S4,如果内核空间中的数据包内核缓存链表不为空,则调用已注册的流量分析函数进行分析,结果放在统计结果缓存和流记录缓存中;步骤S5,如果模块接收到用户空间卸载模块请求则取消网卡混杂模式并执行S6;步骤S6,取消注册的内核级流量分析函数;步骤S7,如果模块接收到用户空间获取分析结果的请求,则处理请求并返回相应结果。
全文摘要
一种基于Linux内核的流量分析方法,采用Linux中可装载内核的方式实现,可以实现数据包级及流级的流量分析。提供的监测分析指标包括流量速率,链路利用率,2-7层协议分布,不同协议的流量速率,包大小分布等;还可根据各种流定义规则,进行特定类型流的监测并提供相关统计结果。由于采用了可装载内核模块的方式,降低了系统调用和内存拷贝等开销,提高了流量分析性能。实验结果显示对于100Mbps和1000Mbps链路,采样该方法可以分别实现对速率为142000pps和405000pps的流量进行实时监测和分析。比较基于libpcap的用户空间流量分析方法,该方法可以提高约50%的处理能力。
文档编号H04L12/56GK1633110SQ20051000424
公开日2005年6月29日 申请日期2005年1月14日 优先权日2005年1月14日
发明者杨建华, 谢高岗, 李忠诚 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1