基于SDN的链路负载均衡实验设计与实现
2024-09-04李向丽陈静
关键词:软件定义网络;OpenFlow;负载均衡;实验教学;Mininet;人才培养
0 引言
为了满足培养创新型人才的需要,专业课程实验教学正经历着从被动到主动、从单一到多层次的演变[1]。在高级计算机网络的实验教学中,迫切需要将课程内容与网络应用技术相结合,设计具有综合型和创新型的实验。尽管验证分析型实验在帮助学生理解网络工作原理方面发挥着重要作用,但缺少设计和创新,难以与实际网络应用有效衔接。综合设计型实验能将知识的连贯性和灵活多样性相结合,帮助学生由浅入深,系统地运用计算机网络知识和技术,有利于培养学生解决复杂工程问题的能力,满足培养创新型人才的需要[2]。但是,综合设计型实验面向不同应用,需要的设备多且网络规模较大,通信过程较为复杂。因为网络设备昂贵且更新快,实验室设备有限,难以支持学生完成复杂的综合设计型实验[3]。Mininet 作为一种轻量级的网络仿真平台[4],具有开源性,可以在已有模块基础上编程实现新功能。Mininet无须昂贵的硬件平台,在一台PC上就能够模拟一个完整的网络系统,为开设综合设计型网络实验提供了很好的支持。本文以基于SDN的链路负载均衡为例,介绍如何设计并实施这一综合设计型实验。该实验涵盖了路由技术、OpenFlow协议、SDN拓扑探测以及性能参数的测量和计算等多个方面的知识和技术,旨在全面提升学生的网络实践能力和创新意识。
1 相关技术
1.1 SDN 技术
SDN对传统网络架构进行重构,解耦网络控制与转发功能,使数据平面与控制平面分离,将分布式控制转换为集中控制[5]。SDN架构如图1所示。
SDN架构中,控制器是控制平面的核心组件,控制器通过南向接口获取和维护数据平面的网络状态信息,并向SDN交换机下发控制策略,对交换机的转发行为实施控制。控制器通过北向接口将相关信息提供给网络控制应用程序,从而实现不同SDN网络应用。
根据上层应用与业务的不同需求,控制器可以灵活定义数据平面SDN交换机的功能,实现对不同数据包的解析、路由策略匹配与转发调度。通过软件编程,在逻辑上使SDN交换机具有传统交换机、路由器和防火墙等网络设备的功能[6]。
1.2 OpenFlow 协议
OpenFlow是为SDN控制器和交换机之间信息交互而设计的南向接口协议[7]。交换机与控制器之间相互发送HELLO报文协商OpenFlow版本;通过FEATURE_REQUEST/REPLY 和MULTIPART_REQUEST/REPLY 报文的交互,控制器获取交换机特征和状态信息;交换机将不知如何处理的数据包封装在PACKET_IN报文中发送给控制器;控制器通过FLOW_MOD报文下发流表指示交换机进行处理;控制器可以发送PACKET-OUT报文指示交换机洪泛数据包;通过交互ECHO_REQUEST/REPLY报文进行保活,也可以进行时延测量。
OpenFlow将传统数据平面中的MAC地址表和路由表等都抽象成流表。流表是OpenFlow交换机的核心数据结构,是交换机处理数据包的依据。
1.3 链路负载均衡
负载均衡的目标是将流量均匀地分布在多条链路上,有效地利用网络资源,避免高负载流量导致的网络拥塞[8]。
传统网络中存在硬件设备成本高、架构复杂等问题,实施负载均衡不容易部署。SDN具有集中控制和可编程特点,使控制器能够动态收集全局网络状态信息,制定负载均衡策略,根据实时网络状态信息来优化路由选择,通过下发流表控制负载流量分布,使数据包沿着最佳路径传输。
2 实验设计
本实验设计旨在通过软件定义网络(SDN) 实现链路负载均衡。具体而言,实验涉及网络拓扑探测、性能参数计算以及路由计算3个核心环节。
2.1 探测网络拓扑
SDN控制器使用链路层发现协议(Link Layer Dis⁃covery Protocol,LLDP) 探测网络拓扑结构[9]。SDN 控制器将LLDP包封装在PACKET_OUT报文中发送给直连交换机A。A洪泛LLDP包,其邻居交换机B接收到LLDP包后,查找流表,根据匹配table-miss流表项(其动作是Output=CONTROLLER) 的指定动作将LLDP 包封装在PACKET_IN 报文中发送给控制器。控制器通过解析PACKET_IN中的LLDP包,即可获知一台交换机A与相邻交换机B之间的连接拓扑,并将拓扑信息保存起来。如此操作,控制器可以发现所有交换机的连接情况,从而获得全局网络拓扑,并将拓扑信息存储到有向图数据结构中。
2.2 性能参数计算
链路带宽和时延是路由计算的重要依据。
1) 带宽计算。SDN 控制器定期向交换机发送OpenFlow 的PORT_STATISTICS_REQUEST 报文请求交换机的端口信息。交换机将自己端口所接收和发送的数据包数量、端口接收和发送的字节数等信息封装在PORT_STATISTICS_REPLY报文中,作为对请求报文的应答发送给控制器。控制器根据端口信息即可计算链路带宽。
若用B(Pi,t)和B(Pi,t-Δt)分别表示出端口Pi在t 和t-Δt 时刻发送的总字节数,用Δt 表示时间间隔,那么pi在t 时刻的实时速率SP(Pi,t)可用公式(1)计算。根据出端口Pi最大可用带宽BW(Pi),可以计算pi在t 时刻的剩余带宽BW(Pi,t),如公式(1)所示。
2) 时延计算。为了获取交换机s1和s2之间的链路时延,控制器c 向交换机s1 发送带时间戳的PACKET_OUT报文,交换机s1转发报文到交换机s2,s2将该报文再发送给控制器,控制器即可计算c经过s1到s2再到c的时延tc_s1_s2_c。类似地,可以得到c经过s2到s1再到c的时延tc_s2_s1_c。为了获取交换机s1到s2 的时延,c向s1发送时间戳ECHO_REQUEST报文,s1 复制时间戳到ECHO_REPLY报文中,并发送给c。控制器即可计算c到s1的往返时延RTTc_s1。同样,可以获取c到s2的往返时延RTTc_s2,用RTTs1_s2表示s1到s2 的往返时延,时间关系用公式3表示。使用公式4计算交换机s1到s2的时延ts1_s2。
以上计算得到了交换机之间的一段链路性能参数,某一路由的剩余带宽和时延,还需要做进一步计算。一条路由中的最小链路剩余带宽即为该路由的剩余带宽;将路由中每段链路的时延相加即可得到该路由的时延。
2.3 路由计算
Dijkstra是加权有向图中计算单源最短路径的经典算法。在传统计算机网络中,把链路开销定义为图中边的权重,使用Dijkstra算法计算自源节点到所有其他节点的最低开销路径,从而构造一棵最短路径树。Dijkstra算法只是基于跳数计算最短路由,并没有考虑链路带宽、时延等网络状态信息。若网络拓扑不变,则计算的最佳路由将保持不变,这会导致网络负载极不平衡,负载量大的时候则可能产生网络拥塞。
K最短路径(K-Short-Path,KSP) 算法把求最短路径优化为求K条最短路径,基于Dijkstra算法计算最短路径、次短路径 …… 第K条最短路径。本实验方案使用KSP算法,选择时延或者带宽作为链路权重,从K 条最短路由中筛选满足负载均衡需求的最佳路由。
控制器将负载均衡转发策略转换为流表项,通过发送FLOW_MOD报文下发流表项给SDN交换机。
3 实验与结果分析
在虚拟机VMware® Workstation 12 Pro, V12.5.2上安装Ubuntu 16.04 LTS 操作系统。在虚拟仿真平台Mininet 2.3.0上进行实验测试与分析,使用开源控制器RYU v4.34进行集中化网络管理,采用OpenFlow作为南向接口协议。在实验过程中,要求学生思考分析遇到的问题,找出解决问题的方法,并独立完成实验。
3.1 实验拓扑
在Mininet 网络仿真平台上构建胖树拓扑结构如图2所示,对数据中心网络进行模拟。
该网络包含1个控制器(c0) 、10个交换机(s1~s10) 和8个主机(h1~h8) ,每个交换机下挂2台主机。交换机s3 到s5、s4 到s6、s7 到s8、s9 到s10、s1 到s3、s1 到s7、s2到s4、s2到s9以及所有交换机与主机的链路带宽设置为2Mb/s,时延设置为2ms。交换机s1到s4、s1 到s9、s2到s3、s2到s7、s3到s6、s7到s10的链路带宽为3Mb/s,时延为3ms。交换机s4到s5、s9到s8的链路带宽为4Mb/s,时延设置为4ms。主机h1的IP地址设置为10.0.0.1,主机h2的IP地址为10.0.0.2 …… 以此类推,主机h8的IP地址为10.0.0.8。
3.2 结果分析
运行命令“ryu-manager sf.py --observe-links --k-paths=2 --weight=bw”启动RYU控制器。其中,sf.py 为基于RYU开放源码编写的程序。
1) 最佳路由选择分析。使用ping命令进行连通性测试,分别选择带宽和时延作为链路权重时,分析最佳路由选择情况。
当选择带宽作为链路权重时,执行命令“h1 pingh4”,得到了主机h1到h4的最佳路由为[5, 4, 6]。由网络拓扑可知,主机h1到h4有[5, 3, 6]和[5, 4, 6]两条路由,区别在于交换机s3到s6之间的路由链路带宽为3Mb/s,交换机s5到s4之间的路由链路带宽为4Mb/s。显然,转发策略选择了链路带宽较大的一条路由作为最佳路由。
当选择时延为链路权重时,h1 ping h4得到主机h1到h4的最佳路由为[5, 3, 6]。由拓扑可知,主机h1 到主机h4的两条路由中,[5, 3, 6]路由上交换机s3到s6的链路时延为3ms,交换机s5到s4的链路时延为4ms。显然,转发策略选择了时延较小的路由作为最佳路由。
2) 链路负载均衡策略分析。指定主机h8为服务器端,两个客户端h1和h2主机使用iperf命令一前一后向服务器端打流,以此观察路由选择的变化,验证是否能根据链路的实际流量进行路由调整。
选择链路权重为带宽时,在服务器端h8中运行命令“iperf -s -p 6633 -i 1”,以服务器模式启动iperf,服务器使用端口6633,报告回显时间间隔为1s。在主机h1上运行命令“iperf -c 10.0.0.8 -p 6633 -t 20 -i 1”,以客户端模式启动iperf,报告回显时间间隔为1s。9 秒后,再运行主机h2的iperf命令。测试观察主机h1 到h8,以及主机h2到h8的最佳路由。刚开始,主机h1 运行iperf命令后,得到主机h1到h8的最佳路由为[5,4, 2, 7, 16]。9秒后,主机h2到主机h8的最佳路由为[5, 4, 2, 7, 16],两条最佳路由完全相同。负载集中势必造成链路拥塞,根据负载均衡策略,其中一条路由应该调整转发策略。主机h1到h8的路由根据实时网络状态信息调整为[5, 4, 1, 7, 16]。由网络拓扑可知,这也是最佳路由。
同时,观察服务器端主机h8的iperf运行情况。如图3所示,在前9个时间间隔(即9秒)内,只有h1发送数据;在第9个时间间隔后,由于h2执行iperf命令,h2 开始发送数据。在s10与主机h8之间的链路最大带宽为2Mb/s情况下,前9个时间间隔(interval) 的带宽近似为2Mb/s;第9个时间间隔后,二条路由的带宽之和近似为2Mb/s,例如,第一条路由在第12个时间间隔时带宽为1.39Mb/s,此时第二条路由在第3个时间间隔的带宽为429Kb/s,二者相加为1819Kb/s,近似为2Mb/s。
类似地,当链路权重选择为时延时,对主机h1、h2 一前一后向h8打流,主机h2向主机h8打流晚10秒钟。可以观察到,h1和h2到h8的路由均为[5, 3, 1, 7,16]。h1根据实时网络状态信息调整转发策略,到h8 的路由调整为[5, 3, 1, 9, 16]。这两条路由的时延相同,都是最佳路由。
实验过程和结果表明,实验方案是有效可行的,能够对链路的实时状态信息进行监测,并及时对转发策略做出适当调整,达到了负载均衡的目的。
4 结束语
以基于SDN的链路负载均衡实验为例,探讨了高级计算机网络课程中综合设计型实验的设计与实施方法。这种实验模式的尝试,提高了实验教学质量,促进了学生综合能力的提升,培养了学生的创新实践能力。同时,该模式契合了培养学生探索习惯和解决实际工程问题能力的教学目标。
在以后教学工作中,将继续深化和拓展SDN相关综合设计型实验内容,不断丰富和完善实验教学体系,进一步优化实验方案的设计,紧跟网络技术的最新发展,适应新的教学需求,以期培养更多具备实践技能和创新精神的计算机网络专业人才。