基于FPGA的SDN网络流量测量系统及方法与流程

文档序号:16245337发布日期:2018-12-11 23:31阅读:710来源:国知局
基于FPGA的SDN网络流量测量系统及方法与流程

本发明属于计算机网络通信技术领域,涉及一种sdn网络流量的测量方法,具体涉及一种基于fpga的sdn网络流量实时测量方法,可用于大规模网络部署场景下及时了解网络整体以及局部区域的性能状态,排除网络故障,为增加新的网络业务收集决策信息。

背景技术

网络流量测量是指捕获网络上的数据分组并对其进行分析的过程。网路流量测量捕获通过网络的数据分组,对所得数据集进行分析,处理,提取出反应网络行为的活动特征、统计规律,监视网络行为的变化,预测网络流量特征的发展趋势。针对网络的流量特征、统计信息、异常事件等现象进行的测量和研究,对网络问题的解决、协议的调试、性能评估等方面均有极大帮助。

软件定义网络sdn(softwaredefinednetwork),将网络的数据层和控制层分离,通过集中化控制和提供开放控制接口,简化网络管理,支持网络服务的动态应用程序控制。通过对网络数据的分析、预测和管理,实现网络性能的优化。

sdn网络流量测量的实现思路是控制器生成探测数据包并下发至指定的交换机节点,当测量进程结束时,相应的交换机需要触发相应机制将探测包返回控制器,由控制器分析并计算得到测量结果。而表征网络测量方法的评价指标有实时性、准确性(精度)、可扩展性、存储复杂性、计算复杂性等。目前,sdn网络流量测量最为关注的是实时性与准确性的评价指标。

已有的sdn网络测量方案可分为三大类:基于性能的测量方案、基于资源利用的测量方案和基于实时性的测量方案。其中基于实时性的测量方案的关键因素之一是能否及时地收集流的统计信息,大规模的网络流量可能会导致实时数据分析的可伸缩性问题,对于时间敏感的网络应用因此无法获得实时的测量结果。例如刘川,娄征等人在2015年11月《电信科学》第z1期上发表了名为sdn环境下网络流量监测与控制系统设计的期刊,公开了一种基于sflow技术的sdn流量监测与控制系统。该系统包含控制器、多个交换机和基于sflow的流量测量模块,其中,基于sflow的流量测量模块包括流量采集模块、流量存储模块、流量分析模块和流量通告模块,流量采集模块采集监控脚本捕获流量数据包信息,并把它们发送到流量存储模块进行存储,然后通过流量分析模块对存储的流量数据进行分析处理,当发现交换机某个端口的流量超过已定义的阈值时,则通过脚本形成一个异常流量通告,流量通告模块通过openflow协议向控制器提交流量通告。sflow实时地向sdn控制器通告交换设备各端口的流量情况,sdn控制器根据通告修改流表规则并下发新的流表,从而对攻击行为进行管控,实现了异常流量的拦截。该方法提高了网络流量采集的实时性,但是,该方法的不足之处是:第一,因为网络流实时性采样会给sdn控制器带来较大的负载与开销,导致控制器的处理能力下降,控制器在sdn网络中效率较低。第二,因为基于sflow技术的网络测量采用数据流随机采样,导致它的测量精度较低。



技术实现要素:

本发明的目的在于针对上述已有技术的不足,提出一种基于fpga的sdn网络流量测量系统和方法,用于解决现有技术中存在的测量效率和精度较低的技术问题。

为实现上述目的,本发明采取的技术方案为:

一种基于fpga的sdn网络流量测量系统,包括控制器、交换机组和测量模块,其中:

所述控制器,用于构造测量流表和测量流量数据包,并对自身的流量和交换机的流量进行管理;

所述交换机组,包括串联的源交换机、多个中间交换机和目的交换机,所述交换机支持openflow协议,其中,源交换机用于根据控制器下发的侧量流表,在控制器下发的数据包中识别与测量流表相匹配的测量流量数据包并转发,多个中间交换机用于实现测量流量数据包的转发,目的交换机用于将测量流量数据包返回给控制器;

所述测量模块,包括通过fpga实现的流量采集模块、流量存储模块、地址映射模块、控制单元模块、分组数计算模块、流容量计算模块、流量分析模块和流量通告模块,其中:

所述流量采集模块,用于采集每个交换机端口的测量流量数据包;

所述流量存储模块,用于存储流量采集模块采集的测量流量数据包的统计帧;

所述地址映射模块,用于根据测量流量数据包的统计帧的流号在哈希表中查找当前流的计数器地址,并将计数器地址和测量流量数据包的统计帧的分组长度传送给控制单元模块;

所述控制单元模块,用于对计数器地址进行解析,向分组数计算模块传送解析的分组数计数器值,向流容量计算模块传送分组长度以及解析出的流容量计数器值;

所述分组数计算模块,用于计算当前流分组数计数器的采样概率,向流量分析模块发送采样命令;

所述流容量计算模块,用于计算当前流容量计数器的采样概率和基本增量,向流量分析模块发送采样命令和基本增量;

所述流量分析模块,用于分析计算新的分组数计数器值和新的流容量计数器值,向流量通告模块发送新的流计数器值;

所述流量通告模块,用于将新的流计数器值返回给控制器。

上述基于fpga的sdn网络流量测量系统,所述流量存储模块,采用sram存储器。

上述基于fpga的sdn网络流量测量系统,所述分组数计算模块,包括采样概率计算模块和比较模块,其中:

所述采样概率计算模块,用于计算分组计数器值的采样概率;

所述比较模块,用于产生随机数,向流量分析模块发送采样命令。

上述基于fpga的sdn网络流量测量系统,所述流容量计算模块,包括浮点运算模块和比较模块,其中:

所述浮点运算模块,用于计算流容量计数器值的采样概率和基本增量;

所述比较模块,用于产生随机数,向流量分析模块发送采样命令和基本增量;

一种基于fpga的sdn网络流量测量方法,包括如下步骤:

(1)控制器构造测量流表和测量流量数据包:

控制器构造测量流表和测量流量数据包,并依次将测量流表和包含测量流量数据包的数据包下发至源交换机;

(2)交换机转发测量流量数据包:

源交换机识别数据包中与测量流表的数据结构相匹配的测量流量数据包,并将测量流量数据包转发至中间交换机,中间交换机依次转发测量流量数据包至目的交换机,目的交换机将测量流量数据包返回给控制器;

(3)测量模块对测量流量数据包进行实时采样和测量:

(3a)流量采集模块采集测量流量数据包的统计帧:

流量采集模块采集源交换机、中间交换机和目的交换机端口的测量流量数据包的统计帧,并将测量流量数据包的统计帧发往流量存储模块;

(3b)流量存储模块存储测量流量数据包的统计帧;

(3c)地址映射模块获取测量流量数据包统计帧的流号和分组长度:

地址映射模块根据流量存储模块中测量流量数据包统计帧的流号,在哈希表中查找当前流的计数器地址,并将该流计数器地址和测量流量数据包统计帧的分组长度传送给控制单元模块;

(3d)控制单元模块对流计数器地址进行解析:

控制单元模块对流计数器地址进行解析,得到分组数计数器值和流容量计数器值,并将分组数计数器值发送到分组数计算模块,同时将流容量计数器值和测量流量数据包统计帧的分组长度发送到流容量计算模块;

(3e)分组数计算模块对分组数计数器值进行测量:

(3e1)分组数计算模块的采样概率计算模块根据分组数计数器值,计算当前分组数计数器的采样概率pa(ca);

(3e2)分组数计算模块的比较模块实时产生随机数,并通过随机数和采样概率pa(ca)的比较结果确定当前分组数计数器的更新决策,然后向流量分析模块发送更新决策的采样命令;

(3f)流容量计算模块对流容量计数器值和基本增量进行测量;

(3f1)流容量计算模块的浮点运算模块根据分组长度,计算当前流容量计数器的基本增量δ(cd,l);

(3f2)流容量计算模块的浮点运算模块根据流容量计数器值,计算当前流容量计数器的采样概率pd(cd,l)

(3f3)流容量计算模块的比较模块实时产生随机数,并通过随机数和采样概率pd(cd,l)的比较结果确定当前分组数计数器的更新决策,然后向流量分析模块发送更新决策的采样命令和基本增量;

(3g)流量分析模块计算新的分组数计数器值和新的流容量计数器值:

流量分析模块根据分组数计算模块传入的采样命令计算新的分组数计数器值,同时根据流容量计算模块传入的采样命令和基本增量计算新的流容量计数器值,并将该两个计数器值合并成新的流计数器值,发送给流量通告模块;

(3h)流量通告模块将新的流计数器值返回给控制器,实现对网络流量的实时测量。

本发明与现有技术相比,具有以下优点:

第一,本发明采用的流量采集模块、流量存储模块、地址映射模块、控制单元模块、分组数计算模块、流容量计算模块、流量分析模块和流量通告模块是通过fpga实现的,减轻了sdn中心控制器的负担与开销,对控制器处理能力的影响因此被消除,与现有技术相比,有效提高了sdn网络流量测量的效率。

第二,本发明的采样概率计算模块根据分组数的数值大小计算采样概率,浮点运算模块根据流容量的数值大小计算采样概率,对分组数值和流容量值较大的流量降低采样概率,对分组数值和流容量值较小的流量增加采样概率,动态调整采样概率,与现有技术相比,有效提高了sdn网络流量测量的精度。

附图说明

图1为本发明测量系统的结构示意图;

图2为本发明测量方法的实现流程图。

具体实施方式

以下结合附图和具体实施例,对本发明作进一步详细描述:

参照图1:基于fpga的sdn网络流量测量系统包括控制器、交换机组和基于fpga平台的流实时性测量模块。

控制器,是sdn网络的核心部件,位于网络的控制层,其主要功能是构造测量流表和测量流量数据包,并对自身的流量和交换机的流量进行管理。

交换机组,包括串联的源交换机、多个中间交换机和目的交换机,位于网络的数据转发层,每个交换机支持openflow协议,其中,源交换机用于根据控制器下发的侧量流表,对控制器发送的测量流量数据包进行识别匹配后转发,多个中间交换机用于实现测量流量数据包的转发,目的交换机用于将测量流量数据包返回给控制器。

基于fpga平台的流实时性测量模块,包括通过fpga实现的流量采集模块、流量存储模块、地址映射模块、控制单元模块、分组数计算模块、流容量计算模块、流量分析模块和流量通告模块。整个模块位于网络的扩展层,利用物理接口与sdn三层架构的数据转发层相连,利用fpga可编程硬件对流量实时性采样测量,设计并行统计每流分组数与流容量的测量方法。

流量采集模块采集源交换机、中间交换机和目的交换机端口的测量流量数据包的统计帧,并将测量流量数据包的统计帧发往流量存储模块;

流量存储模块存储流量采集模块采集的测量流量数据包的统计帧;

地址映射模块根据流量存储模块中测量流量数据包统计帧的流号,在哈希表中查找当前流的计数器地址,并将该流计数器地址和测量流量数据包统计帧的分组长度传送给控制单元模块;

控制单元模块对流计数器地址进行解析,得到分组数计数器值和流容量计数器值,并将分组数计数器值发送到分组数计算模块,同时将流容量计数器值和测量流量数据包统计帧的分组长度发送到流容量计算模块;

分组数计算模块的采样概率计算模块根据分组数计数器值,计算当前分组数计数器的采样概率pa(ca),分组数计算模块的比较模块实时产生随机数,并通过随机数和采样概率pa(ca)的比较结果确定当前分组数计数器的更新决策,然后向流量分析模块发送更新决策的采样命令;

流容量计算模块的浮点运算模块根据分组长度,计算当前流容量计数器的基本增量δ(cd,l),流容量计算模块的浮点运算模块根据流容量计数器值,计算当前流容量计数器的采样概率pd(cd,l),流容量计算模块的比较模块实时产生随机数,并通过随机数和采样概率pd(cd,l)的比较结果确定当前分组数计数器的更新决策,然后向流量分析模块发送更新决策的采样命令和基本增量;

流量分析模块根据分组数计算模块传入的采样命令计算新的分组数计数器值,同时根据流容量计算模块传入的采样命令和基本增量计算新的流容量计数器值,并将该两个计数器值合并成新的流计数器值,发送给流量通告模块;

流量通告模块将新的流计数器值返回给控制器,实现对网络流量的实时测量。

参照图2:基于fpga的sdn网络流量测量系统方法,下面以一次测量为例,包括如下步骤:

(1)控制器构造测量流表和测量流量数据包:

控制器构造测量流表,根据源交换机下发针对网络测量的流表扩展、action扩展,使源交换机具有测量流量数据包处理能力,控制器构造测量流量数据包,并通过packetout报文将数据包送至源交换机;

(2)交换机转发测量流量数据包:

源交换机收到数据包后,根据测量流表对数据包进行识别匹配,识别数据包中与测量流表的数据结构相匹配的测量流量数据包,识别后进行正常转发至中间交换机,中间交换机依次转发测量流量数据包至目的交换机,目的交换机将测量流量数据包通过packetin报文返回给控制器;

(3)测量模块对测量流量数据包进行实时采样和测量:

该测量模块在基于fpga的可编程开发硬件平台上搭建,其中,流量存储模块采用sram存储器在fpga片外实现,其他功能模块均在fpga芯片内搭建,利用verilog硬件语言实现全部系统功能,硬件平台上的晶振发出统一系统时钟,各个模块根据自己的功能需要进行适当的分频或倍频;

(3a)流量采集模块采集测量流量数据包的统计帧:

流量采集模块采集源交换机、中间交换机和目的交换机端口的测量流量数据包的统计帧,并将测量流量数据包的统计帧发往流量存储模块;

(3b)流量存储模块存储测量流量数据包的统计帧;

(3c)地址映射模块获取测量流量数据包统计帧的流号和分组长度:

地址映射模块根据流量存储模块中测量流量数据包统计帧的流号,在哈希表中查找当前流的计数器地址,如果哈希表中没有该流的计数器地址,说明当前分组是本流的第1个到达分组,此时在哈希表中新建一个对应表项,从空闲地址池中分配一个新计数器地址,写入哈希表项,并将该流计数器地址和测量流量数据包统计帧的分组长度传送给控制单元模块;

(3d)控制单元模块解析流计数器地址:

控制单元模块将地址映射模块中传入的当前流计数器地址进行解析,该当前流计数器地址由分组数计数器值和流容量计数器值两部分组成,向分组数计算模块传送解析的分组数计数器值,向流容量计算模块传送测量流量数据包统计帧的分组长度以及解析出的流容量计数器值;

(3e)分组数计算模块测量分组数和发出采样命令:

分组数计算模块实现ansl-i采样方法,该模块包括以下两步:

(3e1)分组数计算模块的采样概率计算模块根据控制单元模块传入的分组数计数器值,通过公式(1)计算当前分组数计数器的采样概率pa(ca);

其中:ca为当前分组数计数器的值,函数f(x)是一组单调递增凸函数簇,其中一个实例可定义为:

其中:b(b>1)是压缩参数;

(3e2)分组数计算模块的比较模块实时产生随机数,将随机数与采样概率pa(ca);作比较,根据公式(3)决定当前分组数计数器的更新决策,比较模块向流量分析模块发出更新决策的采样命令;

当前分组数计数器的更新决策为:

其中,c′a为新的分组数计数器值;

(3f)流容量计算模块测量流容量和基本增量,并发出采样命令

流容量计算模块实现ansl-ii采样方法,该模块包括以下三步:

(3f1)流容量计算模块的浮点运算模块根据控制单元模块传入的分组长度,通过公式(4)计算当前流容量计数器的基本增量δ(cd,l):

δ(cd,l)=|f-1(l+f(cd))-cd|-1(4)

其中:cd为当前流容量计数器的值,l为本次到达分组长度,函数f(x)在形式上与式(2)相同;

(3f2)流容量计算模块的浮点运算模块根据控制单元模块传入的流容量计数器值,通过公式(5)计算当前流容量计数器的采样概率pd(cd,l)

(3f3)流容量计算模块的比较模块实时产生随机数,将随机数与采样概率pd(cd,l)作比较,根据公式(6)决定当前分组数计数器的更新决策,比较模块连同基本增量向流量分析模块发出更新决策的采样命令;

当前流容量计数器的更新决策为:

其中:c′d为新的流容量计数器值。

(3g)流量分析模块计算新的分组数计数器值和新的流容量计数器值

流量分析模块根据分组数计算模块传入的采样命令通过公式(3)计算新的分组数计数器值,根据流容量计算模块传入的采样命令和基本增量通过公式(6)计算新的流容量计数器值,然后把新的分组数计数器值和新的流容量计数器值合并成一个新的流计数器值,发送给流量通告模块;

(3h)流量通告模块将新的流计数器值发往控制器

流量通告模块根据流量分析模块传入的新的流计数器值返回给控制器,实现对网络流量的实时测量。

以上描述仅是本发明的一个具体实现方法,并不构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修正和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1