SDN和Openflow详解+mininet与opendaylight环境搭建与测试

基于OpenFlow的SDN技术

1.SDN与OpenFlow技术简介

SDN指的是软件定义网络。你可以这样去理解SDN:如果将网络中所有的网络设备视为被管理的资源,那么参考操作系统的原理,可以抽象出一个网络操作系统(NetworkOS)的概念—这个网络操作系统一方面抽象了底层网络设备的具体细节,同时还为上层应用提供了统一的管理视图和编程接口。这样,基于网络操作系统这个平台,用户可以开发各种应用程序,通过软件来定义逻辑上的网络拓扑,以满足对网络资源的不同需求,而无需关心底层网络的物理拓扑结构。

云计算的发展,是以虚拟化技术为基础的。云计算服务商以按需分配为原则,为客户提供具有高可用性、高扩展性的计算、存储和网络等IT资源。虚拟化技术将各种物理资源抽象为逻辑上的资源,隐藏了各种物理上的限制,为在更细粒度上对其进行管理和应用提供了可能性。近些年,计算的虚拟化技术(主要指x86平台的虚拟化)取得了长足的发展;相比较而言,尽管存储和网络的虚拟化也得到了诸多发展,但是还有很多问题亟需解决,在云计算环境中尤其如此。OpenFlow和SDN尽管不是专门为网络虚拟化而生,但是它们带来的标准化和灵活性却给网络虚拟化的发展带来无限可能。

SDN的最重要特征:将传统网络设备的数据转发(dataplane)和路由控制

(controlplane)两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。

OpenFlow是实现SDN最常用的的一种协议,OpenFlow的原理和基本架构如下图。其实,这张图还很好地表明了OpenFlowSwitch规范所定义的范围—从图上可以看出,OpenFlowSwitch规范主要定义了Switch的功能模块以及其与Controller之间的通信信道等方面。

OpenFlow几大应用场景,包括:1)校园网络中对实验性通讯协议的支持(如其标题所示);2)网络管理和访问控制;3)网络隔离和VLAN;4)基于WiFi的移动网络;5)非IP网络;6)基于网络包的处理。 2.OpenFlow协议

Openflow规范主要分为如下四大部分 1.?OpenFlow的端口(Port)

OpenFlow规范将Switch上的端口分为3种类别: a)?物理端口,即设备上物理可见的端口;

b)?逻辑端口,在物理端口基础上由Switch设备抽象出来的逻辑端口,如为tunnel或者聚合等功能而实现的逻辑端口;

c)?OpenFlow定义的端口。OpenFlow目前总共定义了ALL、CONTROLLER、TABLE、

IN_PORT、ANY、LOCAL、NORMAL和FLOOD等8种端口,其中后3种为非必需的端口,只在混合型的OpenFlowSwitch(OpenFlow-hybridSwitch,即同时支持传统网络协议栈和OpenFlow协议的Switch设备,相对于OpenFlow-onlySwitch而言)中存在。 2.?OpenFlow的FlowTable(流表)

OpenFlow通过用户定义的或者预设的规则来匹配和处理网络包。一条OpenFlow的规则由匹配域(MatchFields)、优先级(Priority)、处理指令(Instructions)和统计数据(如Counters)等字段组成,如下图所示。

在一条规则中,可以根据网络包在L2、L3或者L4等网络报文头的任意字段进行匹配,比如以太网帧的源MAC地址,IP包的协议类型和IP地址,或者TCP/UDP的端口号等。

目前OpenFlow的规范中还规定了Switch设备厂商可以选择性地支持通配符进行匹配。据说,OpenFlow在未来还计划支持对整个数据包的任意字段进行匹配。

所有OpenFlow的规则都被组织在不同的FlowTable中,在同一个FlowTable中按规则的优先级进行先后匹配。一个OpenFlow的Switch可以包含一个或者多个FlowTable,从0依次编号排列。OpenFlow规范中定义了流水线式的处理流程,如下图所示。当数据包进入Switch后,必须从FlowTable0开始依次匹配;FlowTable可以按次序从小到大越级跳转,但不能从某一FlowTable向前跳转至编号更小的FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作–比如跳转至后续某一

FlowTable继续处理,修改或者立即执行该数据包对应的ActionSet等。当数据包已经处于最后一个FlowTable时,其对应的ActionSet中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。OpenFlow规范中对目前所支持的Instructions和Actions进行了完整详细的说明和定义。

另外,OpenFlow规范中还定义了很多其他功能和行为,比如OpenFlow对于QoS的支持(即MeterTable和MeterBands的定义等),对于GroupTable的定义,以及规则的超时处理等。

3.?OpenFlow的通信通道

这一节中,OpenFlow规范定义了一个OpenFlowSwitch如何与Controller建立连接、通讯以及相关消息类型等。

OpenFlow规范中定义了三种消息类型:

a)Controller/Switch消息,是指由Controller发起、Switch接收并处理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。这些消息主要由Controller用来对Switch进行状态查询和修改配置等操作。

b)异步(Asynchronous)消息,是由Switch发送给Controller、用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,当某一条规则因为超时而被删除时,Switch将自动发送一条Flow-Removed消息通知Controller,以方便Controller作出相应的操作,如重新设置相关规则等。 c)对称(Symmetric)消息,顾名思义,这些都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括Hello、Echo和Experimenter三种消息。

下图展示了OpenFlow和Switch之间一次典型的消息交换过程,出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为Controller和Switch之间的信道加密、如何建立多连接等(主连接和辅助连接)。 3.Opendaylight与Mininet环境搭建

控制器使用OpenDaylight(以下简写为ODL),是现在主流的控制器项目,功能比较完善。模拟OpenFlow设备使用Mininet,远比基于KVM的虚拟机应用更高效、更简洁,且更容易理解。 1环境准备

主要的最简单的环境准备是:一台PC及安装VMwarestation(或VirtualBox)工作站用来承载VM。

2ODL获取安装

可直接通过地址链接下载ODL的VM镜像:

,下载此镜像后,可用VMwarestation或者virtualbox直接打开此VM,使用并启动ODL。

打开VM后,先进入OpenDaylight目录:

cdopendaylight/opendaylight/distribution/opendaylight/ 再进入OpenDaylight启动目录:

cdtarget/distribution.opendaylight-package/opendaylight 执行: run.sh

在浏览器中(VM环境或本地环境)输入可转到如下登录界面,其中[VM_IP]替换为控制器IP。登录用户名:admin,密码:admin,登录进入ODL的Web界面查看并可对ODL操作。如下图: 3Mininet获取安装

Mininet主要是虚拟出OpenFlow交换机以及host主机节点,并且能通过自定义来构造用户想要的拓扑。虚拟OpenFlow交换机主要是使用基于OpenvSwitch的应用。 从下载Mininet的VM镜像,打开此镜像后,用户名为mininet,密码为mininet。登录进入Mininet虚拟机,之后即可通过mn命令来创建拓扑。 4.环境测试和openflow协议分析

这个section是继环境搭建完成以后,在此基础上熟悉平台操作,以及通过wireshark抓包工具分析OpenFlow(以下简写为OF)协议。 1.打开wireshark并创建拓扑

按照章节一搭建平台,启动ODL,并打开wireshark。进入装有Mininet的VM,通过mn命令指定网络拓扑及指定此ODL控制器。

Mininet创建网络拓扑命令:

1

此命令通过Mininet模拟创建一个含有两个交换机(Open 2.查看网络

在Mininet中通过操作网络命令,可以查看OVS间及OVS与主机间的连接关系,也可以查看Mininet是否远程连接控制器。

例如,通过nodes命令可以查看网络中所有的节点。

通过net命令可以查看并确认网络连接关系是否与预期一致以及节点信息,且可以了解具体的连接端口信息。

通过下面的dump命令可以看出,交换机通过远程方式连接到控制器,且能看到控制器的IP和PORT。 3.抓包并分析协议

通过wireshark抓包可以直接看到控制器与OVS交换机的通信过程,下面分析该流程中的OF消息。此专题应用的是直接支持OpenFlow协议的wireshark官网Stable?Release? 3.1建立连接

控制器与交换机之间的OpenFlow协议是应用于TCP传输层上,所以解析应用层。他们首先发送hello消息,建立初始化连接,协商使用的OpenFlow协议版本。由下图可知,ODL与Mininet之间应用的是OpenFlow1.0版本协议(其他1.2、1.3协议会在协议OpenFlow后面标识)。 3.2能力请求响应

该消息主要响应能力请求featurerequest消息,回复连接此控制器的交换机的一些基本设置信息,包括交换机的能力以及它的一些端口的信息等。 3.3config请求回应

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4