基于SDN架构一种动态流量监控方法
2021-03-17杨旭
杨 旭
(公诚管理咨询有限公司,广西 南宁 530000)
互联网目前已成为人类社会最重要的信息基础设施,随着互联技术不断发展,网络运行中所带来的一系列问题也逐渐凸显出来,其中突出的是由网络流量过大所引发的网络拥塞;同时网络设备和应用也日益复杂化,因此人们迫切需求对网络流量进行高效的管理和监控。但是传统方法来对网络流量控制,是将控制逻辑和转发逻辑都耦合在软件或者硬件平台上,使得其复杂程度高、灵活性低,限制了网络设备对数据处理的能力。针对以上情况,提供一种基于SDN架构实现流量动态监控方法,以克服现有的采用传统的方法进行流量控制所凸显出灵活性差、复杂程度高及数据处理效率低等问题。
1 SDN定义
SDN(Software Defined Networking,软件定义网络)是一种新兴的基于软件的网络架构及技术,是由美国斯坦福大学clean slate研究组新提出的一种新型网络创新架构。其核心思想是通过分离网络设备的控制面和数据面以实现底层网络设备对上层应用的透明,使网络具有灵活的软件编程能力,提升了网络的自动化管理和控制能力,虚拟化支持网络资源优化调度和高效利用,为网络新应用和未来互联网技术的发展提供了一种新的解决方案。
SDN的架构一共可以分为三层,最上层是应用层,有着大量的应用和软件,具有灵活的可编程性,是网络能够被运营商以编程的方式来访问,从而实现自动化管理和服务编排,目前的网络上的创新基本上都是出自这个层次。
中间控制层主要负责维护网络拓扑,状态信息等,是整个SDN架构的核心,各厂商争夺SDN市场统治地位的最激烈的战争也将在这里发生。控制层在本地建立了用于创建转发流表的数据集,数据集利用转发流表在设备的出入端口之间转发数据流量。控制层与上层的应用层和下层的物理层之间的两个接口被成为南向接口和北向接口,控制层与这两个层之间的交换被称为Openflow交换,它可以完全取代商用交换机和路由器的第二层和第三层协议的功能。Openflow是一组协议和API,本身并不是一个产品,甚至不是一个产品功能。协议可以分成三部分:一是交换流表(Flow Table),是OpenFlow交换的关键,负责数据包的快速查询和转发;二是安全通道,负责传递控制器与交换机之间的管理和控制信息。三是Openflow协议,安全通道传输的是这个协议,如图1所示。
图1 SDN架构
最下层的硬件(基础设施层)负责数据的处理,包括收集和转发。通过一系列链路层操作来转发、丢弃、重标记、计数和排队(通过光纤、线缆或者无线媒介)到来的数据分组。基础设施层由各种物理设备组成,是IT的基础。
2 基于netmagic平台的网络架构详细设计
这是一种基于SDN架构动态流量监控的方法,其特征在于:通过控制层和转发层分离的架构实现方便、快捷的动态流量监控;硬件采用FPGA平台设计令牌桶算法和调度电路实现灵活的动态带宽分配,有效应对突发流量情况
根据上面的分析,我们可以知道SDN架构的本质就是控制和转发分离,首先,首先由上层软件控制器通过连接在控制器和FPGA间的通信协议发送参数配置命令,FPGA平台在接受到发送的命令后,进行识别,若是发送给自己的命令则根据通信协议进行解析,若否则做相应处理。然后提取命令中的有效信息(地址、数据和动作等),根据地址信息找到该地址空间,并将数据信息写入指定内存单元。当检测到对应的内存单元更新数据,则将数据读出作为令牌桶模块和调度模块配置参数。根据不同端口输入的报文,将报文标记不同类型,同时也修改为不同信息源、不同类型等报文,视实际需求而定。并存入对应的FIFO(First Input First Output,先进先出队列)缓存中。当令牌桶中令牌数量满足一定条件时,则允许当前报文通过,即从缓存FIFO中读取报文转发,并减少相应数量令牌,否则等待。当检测到FIFO的缓存队列长度大于设定的阈值时,则给令牌调度模块发送调度请求。收到调度请求后,调度模块将原先指向虚拟桶的发令牌路径调度至该FIFO。若在设定的时间到达,检测缓存FIFO队列长度依然大于设定的阈值,则向控制器发送反馈信号。控制器收到反馈信号后,根据实际需要作出相应动作。第一次收到调度请求后记为1次调度,若M(M>1)次调度则将令牌路径由当前FIFO调度至发起调度请求FIFO。若需要大规模令牌桶组完成流量控制,则设置多个数量虚拟桶,可同时满足多个令牌桶组调度。
2.1 控制层软件说明
通过运行在本地主机和FPGA平台间通信协议所提供可编程接口,实现友好的交互控制界面,便于高效、快捷访问FPGA内部地址空间和接受底层FPGA反馈信息。在控制器向FPGA发送命令,FPGA收到命令后,则根据通信协议的格式,提取命令中有效信息存入指定地址的内存空间。然后读取指定地址内存空间中数据信息,完成令牌桶模块和令牌轮询调度模块参数配置。设计令牌桶模块可配置参数包括令牌增加的时间间隔T(时间粒度)、T周期向令牌桶内添加的令牌个数N、令牌桶中可放置的最大令牌数(桶深)L;轮询调度模块计时参数Time。
2.2 转发层硬件逻辑机制
在接收到来自输入控制模块的报文后,会根据不同的输入端口,将输入报文标记相应类型。更为方便论述后续内容,设定三个输入端口port1、port2、port3,同时将对应报文标记为类型1(PR1)、类型2(PR2)、类型3(PR3)。将每个类型报文分别存入对应的FIFO中,并设定FIFO的阈值Thi(i=1、2、3)。其中,FIFO缓冲接口采用双端口设计,即读写同时进行,提高报文处理速度,若FIFO有溢出则丢弃当前报文。缓冲队列长度检测模块根据FIFO输出信号usedw,实时检测FIFO的队列长度(Length)。
流量控制模块由3个令牌桶组和1个虚拟调节桶构成,每个令牌桶组共用一个令牌信号,令牌轮询调度模块根据计数器CT以周期T向3个令牌桶组和1个虚拟调节桶发送令牌信号。3个令牌桶组的桶深L相同,T周期向类型为PR1、PR2、PR3令牌桶组内添加的令牌个数分别为N1、N2、N3;同时也可以设置多个虚拟桶。令牌桶组有足够令牌时,则从对应FIFO中读出报文并顺利转发,同时令牌桶内减少令牌数量。当第i缓冲队列的长度大于或等于设定的阈值时,则向令牌轮询调度模块发送请求信号Req_i,同时启动超时计数器Toc,将向虚拟调节桶发送令牌信号的路径调度至相应FIFO路径并保持令牌轮询调度模块发送令牌信号周期T不变。其中超时计数器每个时钟周期计数一次,直到计数值等于终止值Sum,停止计时,并清零计数器等待下次启动。待超时计数器停止,撤销请求信号Req_i,同时检测某缓冲队列的长度,若小于设定的阈值时,表示硬件“自调整”成功,待其他队列发起调度时,则进行二次调度,即将当前路径调度至该缓存队列,其后调度则以此类推。若仍然大于或等于阈值,说明“自调整”失败,同时向上层控制器发送反馈信号。
上层控制器接收到底层FPGA发来反馈信号后,做出相应动作同时撤销反馈信号。所谓的相应动作就是由实际需要决定控制器是修改令牌桶模块参数或调度模块计时参数Time,调节输出带宽大小;还是不作处理。
冲突解决机制:一是若某个缓存队列正在进行“自调整”的期间,另一个缓存队列也发送“自调整”请求信号,则由设计的调度算法,等待上一个缓存队列“自调整”完成后处理下一个队列发起的请求;二是若同一时刻有两个或两个以上(单个虚拟桶情况)缓存队列向令牌调度模块发起调度请求,则不进行自调整,直接向上层控制器发送反馈信号,由控制器做出相应动作处理;三是若设定多个虚拟桶,处理方式按上述类推。基于FPGA流量监控总体方案设计图见图2。
图2 基于FPGA流量监控总体方案设计图
下面以netmagic平台为例结合图3详细阐述完成具体实施方式和流程(一次调度)。
图3 基于FPGA流量监控硬件程序设计流程图(一次调度)
首先由通信协议(NMAC协议)所提供的可编程接口实现交互界面,由控制器向硬件平台发起建立连接的请求,通过三次握手与底层FPGA建立连接。通过控制器界面编辑命令信息发送到FPGA嵌入RAM表中(如RAM0,RAM1..RAMn),FPGA接受到控制器发来的命令,首先按相应通信协议格式和规则解析命令,提取其中有效信息,在FPGA内存空间寻址,寻址完成即将相应数据存入该地址空间(RAM0,RAM1..RAMn)。其中流量控制模块中的3个令牌桶组和令牌轮训调度模块检测到指定内存空间(RAM0,RAM1..RAMn)有数据更新,则读取指定内存空间数据信息完成参数初始化配置,包括3个令牌桶组。在完成对流量控制模块和令牌调度模块的参数初始化后,开始接收报文数据。控制器对硬件参数配置示意图见图4。
图4 控制器对硬件参数配置示意图
然后,根据不同端口输入的报文,将报文标记为类型1(PR1)、类型2(PR2)、类型3(PR3);并写入对应的缓存FIFO中;如3’b001表示由第一个端口输入的报文。当检测到FIFO非空(empty==0),对应令牌桶组将提取到的报文长度(字节)与组内令牌桶内令牌数量相比较(从第1个桶递增向下比较),若第K个桶令牌数量满足,则报文从第K桶发送出去,同时K桶内减少一定数量令牌;若不满足,则等待有足够令牌,再发送报文。
当令牌轮询调度模块状态一(Current_state)计数器满(CT==time)则向三个令牌桶组发送令牌信号Flag,同时将计数器清零(CT<=0)令牌组接收到信号后将加令牌信号add_flag置1,桶未满则加令牌,反之丢弃令牌;状态二(next_state)当计数器重新计数满(CT==time)则向虚拟调节桶发送信号Flag,下个时钟将计数器清零(CT<=0)同时返回状态一(Current_state),即完成一次循环需要2T时间。
检测到第i缓冲队列FIFO当前队列长度大于等于阈值(length_i≥Thi),则向令牌轮询调度模块发送请求信号Req_i同时启动超时计数器(Toc<=Toc+1);令牌轮询调度模块收到请求信号后,在状态二中等待计数器满(CT<=Sum),将向虚拟调节桶发送令牌信号的路径调度至相应FIFO路径。等待超时计数器停止(Toc==Time),撤销Req_i,再次检测当前缓冲FIFO队列长度Length_i并判断与FIFO阈值Thi大小,若Length_i≥Thi,则向控制层发送反馈信号Ret_i,控制器接收到Req_i信号,则根据需要作出相应处理动作,可向硬件指定存储空间(RAM0、RAM1...RAMn)配置不同参数改变输出带宽大小(在满足要求情况下,简化硬件设计,配置令牌调度模块计数器Time参数较为方便)。
3 结束语
方案主要设计构思为:一是结构上本设计采取控制和转发分离架构,简化硬件设计,根据SDN思想即由控制器实现动态对硬件相应参数配置灵活控制输出流量大小,满足设计实时性和灵活性要求;二是正常情况下令牌桶组具备相同时间粒度,也就是由调度模块同一时刻向令牌桶组发送令牌信号,这样不仅可以在较低时钟频率情况下,实现精确和大范围的流量控制同时避免了需要在调度模块设计多个计时逻辑的复杂情况从而使用户更为快捷对流量调控,减少复杂参数配置。三是有突发流量时,硬件通过动态带宽分配进行自调整,即调度模块可在极短时间内将虚拟桶发令牌信号调度至相应令牌桶组,进而缩短发令牌时间周期,加快报文转发速度,当有长时间流量激增情况下,通过反馈信号,用户通过控制器做出相应动作处理;四是根据不同端口输入报文的分类可以灵活监控指定端口流量大小,实现动态带宽分配。