Openflow协议

2024-07-17

Openflow协议 篇1

关键词:校园网,网络协议,自适应,网络链检测

1 引言

随着计算机网络的不断发展,越来越多的学校组建了校园网,高校校园网具有系统复杂、使用频率高等特点[1]。规模庞大的用户带来大量数据的处理,需要对网络进行快速,频繁的实时配置,按需调用网络资源[2]。因此传统的网络无法满足云计算,大数据,以及相关业务提出的灵活的资源需求。于是学校对于校园网的网络链路检测管理与维护的提出正是在这一背景下被广为接受认同。

监测对于校园网络管理是非常重要的,这就要求对应用的管理需要精确,对网络信息需要及时的统计[3,4]。像负载均衡,流量工程等网络管理任务都需要对网络资源基于不同层级的监测。已有的关于Openflow的网络监测如Open Sketch[5],在数据层面提供了一个三级管道用于多任务的测量,在控制层面Open Sketch提供了一个测量库用于自动配置管道和分配资源给不同的任务。Payless[6]则侧重于利用已有的技术构建更加有效的测量模型。这二者都是基于多任务的测量方法,但是带给控制器的负载过重。Open TM[7]则是为每一条流选择一组优化的交换机去轮询,一个交换机被选择以后将持续的轮询以获取流的统计信息。

本文利用Openflow协议自身的特性[8],结合自适应性OSPA(Openflow Switch Polling Algorithm)算法选择交换机轮询,同时获得一样的精确性和较少的通信开销,即控制器周期性的轮询交换机的流表计数器获取其端口统计信息来完成对校园网络数据流量进行监测。

2 校园网数据流统计信息的收集和处理

校园网络链路是基于Openflow网络的控制与转发分离的设计机制[9],使得设计人员可以开发基于标准接口的应用程序来提供网络服务。在传统的网络中,交换机和路由器依赖于端口映射表和路由表进行数据的转发。在Openflow交换机中,转发策略等功能由控制器完成,数据是基于流表进行转发的,其流表项中包头域整合了网络各个层次配置信息。

Openflow协议在底层网络提供基于流的统计信息收集功能,其流表的计数器可以针对交换机的流表、端口、队列进行维护,用于统计数据的一些相关信息。针对端口的统计信息主要包括发送数据包、接收数据包、发送字节、接收字节、发送错误和接收错误等。采用交换机端口计数器的提供的发送字节(tx_bytes)和接收字节(rx_bytes)信息来进行链路利用信息的计算。利用tx_bytes加上rx_bytes表示当前时刻通过端口的总字节数,记为R。控制器在t1时刻轮询某交换机端口的数值为R1,在t2时刻监控的数值为R2,则在t1~t2时段内通过端口的数据量为R2-R1,这个信息作为相应链路的带宽利用信息。控制器周期性(t1~t2的时间间隔)的向底层所有交换机发送ofp_port_stats_request信息轮询计数器并进行链路权值信息的更新。

SDN(Software Defined Network)网络数据流量的监测必须完成对底层链路的发现。普通网络中链路发现由网络设备自主进行,而SDN网络中链路的发现这一过程由控制器完成。控制器利用LLDP(Link Layer Discovery Protocol,数据链路层发现协议)来发现底层链路,该协议可以将本设备的标识号,端口号,MAC地址等信息封装在数据单元发送给相邻的设备,这些信息能够被控制器所利用用来构建整个网络的拓扑。

控制器的链路发现通过packet_in和packet_out信息完成,该过程如图1所示。

当设备将信息发送给相邻设备时,由于交换机中的流表项不能处理此类信息,因此该信息被发送到控制器,控制器将会对该数据包进行解析。利用交换机之间的链接记录构建网络拓扑,相邻设备的链路表示为设备A标识号:端口号→设备B标识号:端口号。

3 自适应性选择OSPA方法

3.1 自适应选择策略

一般来说,在进化过程的任意阶段,寻优性能更高的算法应有更大比例产生子代个体。因此,对于由J种算法构成的备选池,本文采用文献[10]的多种算法自适应选择策略确定第k代由算法j(j=1,2,…,J)产生子群体Qj(k)的规模nj(k)。

对于nj(k)∈{n1(k),n2(k),…,nJ(k)},其计算公式为:

其中,n为第k代父群体S(k)的规模;sj(k)为Sj(k)中由算法j所产生的个体数量,即第k-1代由算法j产生并经过筛选成功进入第k代父群体S(k)的个体数量;nj(k-1)为第k-1代父群体Sj(k)中由算法j所产生的个体数量。

由式(1)可知,若算法j在第k-1代产生的子代群体整体质量越高,即进化成功率越高,则第k代其产生的子代个体数量越多,从而以更大的比例使用进化过程当前阶段寻优性能更高的算法,实现多种算法的自适应选择。

3.2 校园SDN网络控制

SDN网络集中控制可以对网络具有整体视图的特点,有利于网络的管理。但是集中式控制的特点也带来一些安全问题,所有数据的转发都经过控制器的决策,给控制器带来很大的负担,一旦控制器出现单点失效问题,将会造成整个网络的瘫痪。因此在为了减小控制器的开销,提高网络的稳定性,应该尽可能的减小控制器的负载。本文通过减小Openflow网络交换机的监测数量来进一步达到减小控制器开销的目的。当控制器对交换机的端口计数器进行轮询时,交换机将会将其所有端口的统计信息发送给控制器,由于一条链路两端的交换机端口计数器所统计的tx_bytes与rx_bytes之和是一样的。在计算链路带宽利用情况时只需要获取链路任一端的端口统计信息即可,因而没有必要监测网络当中的所有交换机。在SDN网络中所有的交换机都有唯一的标识,交换机的识别号下标与名称下标相同即S1对应dpid1,S2对应dpid2,Sn对应dpidn。

本文提出一种简单快速的算法自适应OSPA用来选择被监测的交换机,在统计信息有效收集的情况下减小被轮询的交换机数量,从而减轻控制器的负荷。控制器对底层交换机进行轮询时,控制器总是优先选择连接链路数最多交换机,如果有多个连接链路相同的交换机则考虑交换机的标识号,标识号最小的将被选择。直到所选的交换机覆盖网络中所有的链路为止。该算法中所指的链路为交换机与交换机之间的链路,交换机与主机之间的链路不在此列。

3.3 约束处理与算法流程

采用实数编码,每个控制变量由处于其上下限之间的实数表示,对于离散变量,每代新产生的个体取整至最近的控制值[11]。约束处理方法[12]的总越界的计算公式为:

其中,Uilim与QG,ilim为相应的上限或下限,视其为越上限或下限而定;WU与WQ为权值,设定为0.5,使其能够用于处理约束。修正如下:对于两个个体,若都是可行解则采用帕累托最优的概念讨论整个控制变量空间,即当且仅当满足:

定义x1支配x2(记为x1x2);否则定义Fv较小的个体(Fv可能为0)支配Fv较大的个体。具体自适应OSPA算法流程如下:

步骤1.系统初始化:读入测试系统及控制变量的数;

步骤2.对S(0)中的个体进行潮流计算,求各目标函数的数值和越界程度;

步骤3.确定S(0)中的个体之间的支配关系,对S(0)中的个体进行适应度分配;设置第0代J种备选算法产生子代个体的数量nj(0)=n/J,(j=1,2,…,J);

步骤4.更新外部集合,确定PSO速度更新公式中全局最优粒子和自身最优位置;

步骤5.分别将J种不同算法进化算子作用于S(K),产生备选算法j对应的临时群体Tj(k)。从Tj(k)中随机选取数量为nj(k)的个体构成Qj(k),合并Qj(k)得到Q(k);

步骤6.对Q(k)中的个体进行潮流计算,求各目标函数值和越界程度;

步骤7.合并S(k)和Q,得到R(k);

步骤8.确定R(k)中的个体之间的支配关系,对R(k)中的个体进行适应度分配;从R(k)中筛选数量为n的优等个体构成S(k+1)进入下一代;

步骤9.统计S(k+1)中由算法j产生的个体数量Sjk+1。利用自适应策略确定第k+1代进化过程中应由算法j产生的子代个体数量nj(k+1):

步骤10.k=k+1。若k>K,则结束;否则转到4;

以上算法中步骤1,2进行初始化列出底层网络中所有的交换机和链路,步骤3中S用于存放筛选出的用于监测的交换机。步骤4首先选择连接链路数最多的交换机,该交换机放入到监测的行列,并将与该交换机相连的链路删除。当k>K为空时算法终止,该算法可以保证监测最小数量的交换机来获取网络所有链路的利用信息。Openflow网络中用唯一的标识号对交换机进行区分,每当网络拓扑发生变化时,算法都将重新执行更新所需要被轮询的交换机。

4 验证与测试

4.1 测试环境

采用网络控制器pox[13]和网络拓扑仿真软件mininet[14]来进行测试。测试环境网络拓扑采用K=4的fattree拓扑[15],如图2所示。控制器与底层的每个交换机相连(注:考虑到简洁性没有标出控制器)。

4.2 测量与分析

使用流量发生工具iperf,采用随机的流量方式,即各主机依次随机以相同的概率给其他主机发送UDP(User Datagram Protocol)流量[16],为了测量自适应OSPA算法的性能,我们使用另外一种算法period polling进行对比,即采用上文提到的周期性轮询算法进行对比,该方法不对轮询的对象进行选择,而是轮询底层全部的交换机。

启动pox控制器和mininet,轮询周期设置为T=2s,控制器将会依据自适应OSPA算法从底层网络中筛选出需要轮询的交换机,分别是dpid9~dpid16的8个交换机,这些交换机对于fattree拓扑中的汇聚层交换机。控制器每次只要轮询以上交换机即可计算全网链路的带宽利用信息。图3表示的是控制器的信息开销,我们定义控制器的信息开销为控制器发往底层网络的统计请求信息。在拓扑没有发生变化的情况下,period polling和自适应OSPA算法的信息开销都是固定的,取决于轮询的交换机的数量,每次轮询都向交换机发送一条轮询信息。图中的请求信息只在单一时刻出现,这是因为控制器轮询的时候在某一时刻向底层交换机注入请求信息。相较于period polling每次发送20条信息轮询底层网络所有的交换机,自适应OSPA极大的减少了需要轮询的数量只需要轮询dpid9~dpid16的8个交换机,发送8条信息即可。因此减少了ofp_port_stats_request信息的发送,从而降低了控制器的开销。

如图4所示监测结果是在自适应OSPA算法监测周期内某一时刻通过链路的数据量大小。本文采用了LLDP来发现底层链路,控制器最终能够绘制整个网络的拓扑。图中相邻两条链路实际上是同一链路,只是方向不同而已,因此在链路带宽上的利用情况是一样的。

5 结束语

Openflow协议 篇2

1 SDN架构

SDN核心思想是通过管控软件化、集中化,使网络变得更加开放、灵活、高效。其最主要的特征就是将网络的数据转发与控制功能解耦和,形成数据层面与控制层面,即将网络设备如路由器中的软件控制的功能剥离,使底层网络设备仅仅具有数据的转发功能,而将网络的各种控制工作全部交给控制层面。在控制层面中通过开发的API接口来开发各种应用。SDN的核心架构如图1所示[6]。

数据层面负责数据的转发工作,网络设备根据控制层下发的转发规则进行转发。控制层是SDN的核心层,一般表现为一个软件平台,其享有对数据层的网络设备的集中的控制权,其算法、逻辑、规则均可配置。通过控制层面开放的API可以开发用户所需要的各种功能。

作为一种概念,SDN并没有规定实现的途径,目前也没有一个统一的实现标准。而作为引出SDN概念的Open Flow技术,以其良好的灵活性、规范性已被看作SDN通信协议事实上的标准,类似于TCP/IP协议作为互联网的通信标准。该实现方案主要由OpenFlow交换机与控制器两部分组成。Open Flow交换机根据流表来转发数据流,代表着数据转发平面;控制器通过全网络视图来实现管控功能,其控制逻辑表示控制平面。

2 Open Flow技术

在当前所有SDN实现方式之中,Open Flow是应用广泛,技术上也是相对成熟的一种。Open Flow起源于斯坦福大学的Clean Slate[7]项目组。Open Flow当初被提出来是为了方便在校园网中进行网络创新实验活动[8]。

Open Flow架构包括控制器,Open Flow交换机与安全通道,如图2所示[9]。

Open Flow交换机负责数据转发功能,Open Flow的交换机包括一个流表,执行分组查找和转发,和到一个外部控制器的Open Flow通道。

安全通道是连接Open Flow交换机和控制器的接口,控制器通过这个接口,按照Open Flow协议规定的格式来配置和管理Open Flow交换机。

控制器使用Open Flow协议,通过安全通道,使用Open Flow协议定义的标准信息可以添加、更新和删除流表中的表项,主动或者被动响应数据包。在交换机中的每个流表中包含的一组流表项;每个流表项包含匹配字段,计数器和一组指令,用来匹配数据包。

流表是Open Flow交换机中的匹配规则,类似于路由器的路由表,每个流表由多条流表项组成,一个流表项包括一个头域,一个动作集与一组计数器,其结构如图3所示。

头域含12个字段,包括:进入接口,Ethernet源地址、目标地址、类型,vlan id,vlan优先级,IP源地址,目标地址,IP协议类型,IP To S位,TCP/UDP目标端口,源端口。通过这些字段Open Flow交换机可以匹配目前网络中的大部分数据包,从而Open Flow网络已经淡化了层的概念,相应的也淡化了路由器与交换机的概念,从链路层到传输层的各种数据包都可以正确地匹配转发,在Open Flow网络中转发设备统称为Open Flow交换机。

动作域包含了一系列动作,包括转发、修改、丢弃等,当进入交换机的数据包经过解析与头域中字段匹配成功后,便会执行动作字段指定的动作。如果没有动作,则默认为丢弃。多个行动的执行需要依照优先级顺序依次进行,但对包的发送不保证顺序,另外交换机可以对不支持的行动返回错误。

计数器可以针对交换机上每张流表(Per Table)、每个流(Per Flow)和每个端口(Per Port)以及每个队列(Per Queue)上个特殊信息进行维护,用于统计流量的部分信息,例如活动表项数、查找次数、发送报文数、接收报文数、出错报文数等。计数器为众多统计信息进行计数,并提供特定容量的计数器。特定的容量用不同长度的位数进行量化。

Openflow匹配流程为:当数据包进入Open Flow交换机后,交换机提取数据包头部字段,与流表中各流表项进行匹配,如果匹配成功,则根据后面的动作集执行相应操作;如果匹配失败,则交换机会将数据包的部分或者全部发送给控制器,由控制器决策。

3 仿真平台搭建与仿真分析

3.1 搭建仿真平台

研究SDN的环境通常由开源的软件包搭建[10,11,12,13,14,15],目前应用比较广泛的主要是Mininet这款轻量化的开源软件,搭载一个优良的控制器从而组成便于研究的SDN环境,本文选用POX控制器。在该环境中,Mininet软件负责生成需要研究的网络拓扑结构以及生成的网络结构中各个交换机、主机以及链路的相关参数的设定,如交换机的dpid、主机的Mac地址等,POX控制连接到Mininet生成的网络,通过POX上预留的API开发相应的组件以达到预期目的。

安装完成后,首先启动Mininet,通过启动参数设定控制器为远程控制器,Mininet会生成一个包含一台交换机与两台主机的网络拓扑,然后启动POX控制器,根据Mininet与POX界面打印出的信息可以得知Mininet与POX已经正确连接。

3.2 仿真分析

在仿真环境下,通过POX的开放接口,编写一个组件,以研究流表的生成与下发以及Open Flow网络的工作原理[15]。仿真分析用的拓扑结构如图4所示,该拓扑结构包含一台Open Flow交换机s1与两台主机H1与H2,H1与H2的IP与MAC设置如图4所示。

在POX中编写的组件定义的规则为:

启动POX与Wireshark,启动Mininet,待控制器与交换机经过3次握手建立稳定的TCP连接后,查看Wireshark界面,可以看到交换机与控制的定时的of_ehco_request与of_ehco_reply信息,该消息是为了保持交换机与控制器之间的连接。

这时候交换机与控制器建立连接,没有任何数据进入交换机,因此交换机内部的流表此时为空。

在Mininet界面内,令H1ping H2,查看Wireshark中的信息。

该操作的整个流程为:

(1)从H1执行ping操作,首先H1会查询自己的ARP表,发现没有没有目的地址H2即10.0.0.2的MAC地址,于是H1会先缓存ping数据,先向全网络广播一个ARP数据包以寻找H2的MAC地址,ARP数据包进入交换机,Open Flow模块会解析数据头域;此时交换机中无流表项,触发packet_in事件,即图5中403行,其详细信息如图6(a),可见这是一个广播的ARP请求包;

(2)控制器解析该数据包之后,判断为一个广播包,控制器根据提取出的文件包的源MAC,目的MAC,源IP地址与目的IP地址等,通过of.ofp_flow_mod()方法生成一个添加流的消息,其匹配规则就是数据包提取出的各项匹配字段,设置其软超时与硬超时均为0,表示该流表不会自动删除,定义其动作为泛洪,然后按照Open Flow协议封装该信息,通过packet_out事件发送往交换机,交换机将该条规则安装到自己的流表中,按照该条规则,泛洪广播包。即图5中的第404行的flow_add事件,详细信息如图6(b)所示;

(3)H2收到该广播包后发现自己的MAC地址符合要求,于是发送以H1地址00:00:00:00:00:01为目的地的ARP-reply的应答包,而此时交换机中没有对应的匹配条目,于是再次触发packet_in事件,而根据控制器中组件中的规则,判断出其目的地址为H1的MAC地址后,控制器下发流规则,更新流表,即再次触发flow_add事件;

(4)H1收到H2的ARP应答之后获得H2的MAC地址,添加H2的MAC地址后发送封装好的ICMP报文,同样进入交换机经过解析再次触发packet_in事件,在Wireshark中查看其详细信息,可以看到这是一个ICMP协议的ping请求;

(5)交换机再次将数据包发送到控制器,然后控制器添加流规则,下发流表,定义其转发到H2,H2收到ICMP报文后,也发送一个应答,同样经过packet_in与flow_add之后发送到H2,这时一个ping的通信流程已经完成。同时,交换机中增加了相应的流表。

在Mininet中再次进行H1ping H2,会发现此次所用的时间比第一次大幅度减少,这是因为交换机中已经存在对应的流表项,可以直接对数据进行处理而无需触发packet_in事件也无需控制器再下发流表,因此时间大幅缩短。

4 结束语

SDN架构以数据面与控制面分离为特征,是一种集中式的网络,具有更大的灵活性,作为当前SDN架构主要实现方式的Open Flow技术也成为了研究的热点。介绍了SDN架构与Open Flow技术,基于Mininet与POX搭建了研究Open Flow的仿真平台,研究了Open Flow中流表的生成与下发机制,以及控制器对底层网络的可控制编程操作,体现了网络的“软件定义”,从而为下一步的开发研究提供了参考。

摘要:随着网络设备支持协议的增多,变得日趋复杂,难以满足多元化网络服务的需求。软件定义网络(SDN)是一种新型网络架构,其以控制面与数据面分离为主要特征,简化了网络设备,并提供了编程接口,使得网络更加灵活、高效。文中在研究了SDN架构与其主要实现方式Open Flow技术的基础上,搭建了基于Mininet与POX的仿真平台,在该环境下研究Open Flow的流表产生与下发过程,分析其通信流程,验证了软件如何“定义网络”。

上一篇:颅脑外伤的急救与护理下一篇:运动自我效能感