1 实训概述
本次为期一周的实训旨在通过基于SDN架构的实现差分服务需求来提升我们的技能。我们在实训中广泛运用了一些重要的技术手段,包括Django、QOS、OpenDaylight和OpenvSwitch等。
在实训过程中,我们将重点放在SDN的基本操作上,通过实际操作和实践,我们能够更好地理解SDN架构的工作原理和应用场景。同时,我们也深入研究了与SDN和Qos等相关技术相关的知识,从而更好地掌握了如何在实际项目中应用这些技术。
通过这次实训,我们不仅能够通过实际操作来加深对SDN的理解,还能够积累实践经验,并且了解到了与SDN和Qos相关的最新技术和趋势。这不仅为我们今后在SDN领域的学习和工作奠定了良好的基础,而且也提升了我们解决实际问题的能力和技术水平。
2 系统描述
2.1 课题简介
本课题目标为基于SDN架构的框架上实现对服务质量的差分服务。在SDN架构的基础上,应用层利用Django项目通过SDN北向接口向由Java语言编写,基于OpenDaylight架构的控制器下发信息,ODL通过Openflow南向接口转发成flow表和meter表下发到交换机,并进行流量限速测试。
2.2 模块简介
启动控制器并设置交换机,成功对接后查看topo结构,启动Django服务并访问Django web服务,在qos可编程服务上面进行操作,调用接口进行odl与ovs连接,并下发流表和meter表,qos验证流量限速测试。
2.2.1 Django
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。
2.2.2 QOS
服务质量QoS(Quality of Service)用于评估服务方满足客户服务需求的能力。通过配置QoS,对企业的网络流量进行调控,避免并管理网络拥塞,减少报文的丢失率,同时也可以为企业用户提供专用带宽或者为不同的业务(语音、视频、数据等)提供差分服务。
2.2.3 Meter
Meter表即计量表,任意流表项可以在它的指令集中定义一个计量,以测量和控制相关流的速率,可以实现一些简单的Qos,并且可以结合端口队列来实现复杂的Qos框架。在此实验中主要用来做速率限制并被流表所引用。
2.2.4 OpenFlow
OpenFlow是第一个开放的南向接口协议,也是目前最流行的南向协议。它提出了控制与转发分离的架构,规定了SDN转发设备的基本组件和功能要求,以及与控制器通信的协议。
2.2.5 Open vSwitch
Open vSwitch简称OVS,OVS是一个支持多层数据转发的高质量虚拟交换机,主要部署在服务器上,相比传统交换机具有很好的编程扩展性,同时具备传统交换机实现的网络隔离和数据转发功能,运行在每个实现虚拟化的物理机器上,并提供远程管理。
2.2.6 Open Daylight
Open Daylight是一个高度可用、模块化、可扩展、支持多协议的控制器平台,可以作为SDN管理平面管理多厂商异构的SDN网络。它提供了一个模型驱动服务抽象层( MD-SAL),允许用户采用不同的南向协议在不同厂商的底层转发设备上部署网络应用。
3 主要模块的详细设计
3.1 分层技术选择
3.1.1 数据层模块
数据平面使用OpenvSwitch交换机,通过OpenFlow南向接口协议与控制器进行交互。
3.1.2 控制层模块
控制平面是由Java语言编写,基于OpenDaylight架构的控制器,通过OpenFlow南向接口协议及OVSDB与数据平面交互,通过HTTP REST API与应用层进行交互。
3.1.3 应用层模块
应用层是通过Python语言编写以及应用前后端Django架构,展现网络中的拓扑发现,下发Qos服务规则。
3.2 逻辑架构
应用层面使用相应的SDN APP进行操作,可以进行拓扑发现、链路监测、Qos服务规则设置等操作;应用层面的操作实现通过SDN控制器实现,在SDN控制器中部署拓扑管理、链路状态检测、流规则配置、Qos规则配置等功能,最终将Qos服务规则下发至数据平面。
其逻辑架构可表示如下图:
3.3 关键技术
3.3.1 OpenFlow协议
OpenFlow是一种网络通信协议,属于数据链路层,能够控制网上交换器或路由器的转发平面(forwarding plane),借此改变网络数据包所走的网络路径。整个OpenFlow协议架构由控制器(Controller)、OpenFlow交换机(OpenFlow Switch)、以及安全通道(Secure Channel)组成。控制器对网络进行集中控制,实现控制层的功能;OpenFlow交换机负责数据层的转发,与控制器之间通过安全通道进行消息交互,实现表项下发、状态上报等功能。
OpenFlow允许从远程控制网络交换器的数据包转送表,透过新增、修改与移除数据包控制规则与行动,来改变数据包转送的路径。比起用访问控制表(ACLs) 和路由协议,允许更复杂的流量管理。同时,OpenFlow允许不同供应商用一个简单,开源的协议去远程管理交换机(通常提供专有的接口和描述语言)。
OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。Controller-to-Switch信息由控制器发起并且直接用于检测交换机的状态。Asynchronous信息由交换机发起并通常用于更新控制器的网络事件和改变交换机的状态。Symmetric信息可以在没有请求的情况下由控制器或交换机发起。
3.1.2 sFlow技术(本次未使用)
采样流sFlow(Sampled Flow)是一种基于报文采样的网络流量监控技术,主要用于对网络流量进行统计分析。与数据包采样技术(如RMON)不同,sFlow是一种导出格式,它增加了关于被监视数据包的更多信息,并使用嵌入到网络设备中的sFlow代理转发被采样数据包,因此在功能和性能上都超越了当前使用的RMON、RMON II和NetFlow技术。
sFlow系统包含一个嵌入在设备中的sFlow Agent和远端的sFlow Collector。其中,sFlow Agent通过sFlow采样获取接口统计信息和数据信息,将信息封装成sFlow报文,当sFlow报文缓冲区满或是在sFlow报文缓存时间(缓存时间为1秒)超时后,sFlow Agent会将sFlow报文发送到指定的sFlow Collector。sFlow Collector对sFlow报文进行分析,并显示分析结果。
sFlow报文采用UDP封装,缺省目的端口号为知名端口6343。sFlow报文共有4种报文头格式,分别为Flow sample、Expanded Flow sample、Counter sample、Expanded Counter sample。其中Expanded Flow sample和Expanded Counter sample是sFlow version 5新增内容,是Flow sample和Counter sample的扩展,但不前向兼容。所有的Extended的采样内容必须使用Expanded采样报文头封装。
sFlow系统的示意图如下:
3.1.3 Meter计量表
Meter表主要用来进行网络限速,网络限速有很多种方式,比如网卡限速,队列限速,Meter表限速。其中Meter表限速是颇具代表性的限速方式。因为网卡限速和队列限速都是传统网络的限速方式,而Meter表是SDN架构下的限速方式。
Meter表即计量表,任意流表项可以在它的指令集中定义一个计量,以测量和控制相关流的速率,可以实现一些简单的Qos,并且可以结合端口队列来实现复杂的Qos框架。在此实验中主要用来做速率限制并被流表所引用。
3.4 控制层设计
3.4.1控制层结构
控制层由拓扑及链路状态检测、流规则配置以及Qos规则配置组成,均需通过控制器与上下层的报文交互实现。
3.4.2拓扑及链路状态检测
控制器与交换机之间建立稳定的OpenFlow连接,并利用控制器收集交换机的拓扑信息来实现;它可以详细、直观的表示出当前的拓扑状态,保证后续的路由计算、转发等更加稳定、高效。
当系统开始运行后,控制器将周期性的收集来自OpenFlow协议上报的各个交换机数据,并通过LLDP报文探测交换机间链路信息。控制器通过部署的sFlow collector收集交换机端口流量统计信息,并开放出接口提供给上层应用调用。
3.4.3 流规则配置
当交换机通过OpenFlow协议与控制器建立连接后,控制器下发基础流表至交换机,匹配ARP请求报文发送至控制器。控制器接收到ARP请求报文后进行广播操作,并通过端口-MAC对应关系学习主机位置信息,下发转发流表项匹配目的主机信息,转发至对应端口,从而实现基础的二层转发功能。
3.4.5 Qos规则配置
控制器提供接口下发Qos规则配置,先下发Meter表项,指定限制速率。Meter表项下发成功后,下发流表项匹配Qos对应交换机端口,实现主机间通信限速功能
3.5 应用层设计
3.5.1 应用层需求
应用层主要需要实现如下功能:
- 对控制层获取到的拓扑信息、链路状态信息、网络状态的展示。
- 通过APP界面对控制器下发Qos规则,并由控制器下发至转发设备。
3.5.2 Django框架
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性 [2] 。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:
- 用于创建模型的对象关系映射;
- 为最终用户设计较好的管理界面;
- URL 设计;
- 设计者友好的模板语言;
- 缓存系统。
Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not Repeat Yourself)原则。
4 程序运行与测试
4.1 Qos相关程序及运行
Step1: 启动控制器
- 进入sdn-qos目录,并执行tar-zxvf解压karaf压缩包
注:此为解压完成效果
- 进入bin目录并启动kara
Step2: 设置OVS参数
进入交换机查看名称
配置ovs用户态:
配置ovs的openflow版本并完成对接:
对接ovs和odl
验证ovs和odl是否对接成功
在ODL中查看拓扑结构
Step3: Django服务及配置
- 创建名为qos的python环境,并指向python 3.8
- 执行cd命令并进入项目
- 安装依赖
- 启动web服务,并对8080端口进行监听、映射
- 修改settings.py 文件中allowed_hosts改为【“*”】(允许所有设备)
- 查看网页结果
连接成功
调用接口进行ODL和OVS连接
1.代码如下:
运行结果如下:
2. 代码如下:
运行结果如下:
查看ODL和OVS的本地IP和浮动IP
编辑Django 的web代码
1.代码如下:
运行结果如下:
2. 代码如下:
运行结果如下:
- 查看ODL和OVS的本地IP和浮动IP
- 调用接口进行ODL和OVS连接
- 连接成功
- 查看openflow:id,并下发流表
- 下发成功
Step4:实验现象
- 在交换机上查看下发的流表
- 在host1上执行ethtool -k eth0 tx off
- 在host2上使用UDP协议、5M带宽、持续传输60秒并间隔十秒输出
5 实训总结
在这次为期一周的实训中,我们实践了基于SDN架构的差分服务需求,运用了Django、Qos、sflow、OpenDaylight、OpenvSwitch等技术工具。
首先,我们按照应用层-控制层-数据层的架构选择了SDN协议和主要模块。然后,我们深入学习和理解了每个模块,并根据控制层和应用层的需求进行了实际应用,最终成功实现了基于SDN架构的差分服务。
通过这次实训,我巩固了对SDN架构的认识,并学习了与Qos服务相关的技术,比如sflow和meter表。此外,这次实训还使我掌握了一些基础的SDN项目开发内容,为我今后在可编程化网络领域的学习、实践和工作奠定了基础。