目 录

1 OpenFlow.. 1

1.1 功能介绍... 1

1.1.1 OpenFlow概述... 1

1.1.2 工作原理... 1

1.1.3 协议规范... 4

1.2 配置限制和指导... 4

1.3 配置任务概览... 4

1.4 配置OpenFlow.. 4

1.4.1 功能简介... 4

1.4.2 配置OpenFlow.. 4

1.4.3 配置OpenFlow多控制器模式... 5

1.4.4 配置OpenFlow送控制器报文的vlan标签... 5

1.4.5 配置OpenFlow报文处理模式... 6

1.4.6 配置OpenFlowIP. 6

1.5 监视与维护... 6

1.6 典型配置举例... 7

1.6.1 集中控制配置举例... 7

 


1 OpenFlow

1.1   功能介绍

1.1.1  OpenFlow概述

OpenFlowSDN(Software Defined Network,软件定义网络)架构中定义的一个控制器与转发层之间的网络传输协议OpenFlow允许控制器直接访问和操作网络设备的转发面,这些设备可能是物理上的,也可能是虚拟的。

OpenFlow通过标准的通信协议将设备的控制面和转发面相分离,让网络设备专注于转发行为,而整网的控制行为集中在一台控制器上。设备与控制器建立OpenFlow连接,由控制器生成转发规则并通过OpenFlow连接以流表的形式下发给网络设备,从而实现网络控制面的集中管理,降低维护管理成本。

1.1.2  工作原理

1.    基本概念

l  流表

流表是设备进行转发策略控制的核心数据结构,设备根据流表来决策对进入设备的网络流量采取对应的行为。

一台设备可以包含一个或者多个流表,当前设备只支持一个流表。一个流表由多个流表项构成。

OpenFlow协议中,流表项由三个部分组成:headercounteraction

*        header定义了流表项的索引,通常由报文的各个字段组成,比如源MAC地址、目的MAC地址、以太网协议类型域、源IP、目的IPIP协议类型域、源端口、目的端口等各个字段,用于匹配报文,报文命中流表项的Header字段,则表明报文匹配到该流表项。

*        counter:统计计数.用于统计有多少个报文和字节匹配到该流表项。

*        action:报文匹配后的动作,用于定义对匹配到流表项的报文的转发行为,如丢弃、广播、转发等。

l  消息

OpenFlow协议支持三种消息类型:controller-to-switchasynchronoussymmetric,每一类消息又有多个子消息类型。各消息的简单描述如下:

*        controller-to-switch由控制器发起,用来管理以及获取网络设备状态。消息子类型说明见1-1

*        asynchronous:由网络设备发起,用来将网络事件或网络设备状态变化(最常见的是网络接口的link up/down变化)更新到控制器。子消息类型说明见1-2

*        symmetric:可由设备或控制器任一端发起,主要用于协议初始的握手以及连接状态探测。子消息类型说明见1-3

表1-1     controller-to-switch消息子类型说明表

子类型

描述

Features

用于控制器发送Features请求来了解设备的能力,设备应答

Configuration

用于控制器查询设备的配置,设备在收到查询时应答

Modify-State

用于管理设备的状态,如流表项和端口状态,该消息主要用于增加、删除、修改设备内的流表表项、组表表项和设备端口属性

Multipart

用于控制器请求设备各方面信息,如当前配置、统计信息

Packet-Out

用于控制器向设备发送报文

Barrier

用于确认Barrier消息之前的动作是否成功。控制器发送Barrier请求消息,当设备确认之前的动作都已成功时回应答Brarrier应答消息

Role-Request

用于设备请求控制器的角色

Asynchronous-Configuration

控制器使用该消息设置异步消息过滤器,用于接收只希望接收到的异步消息报文,或向设备查询该过滤器

 

表1-2     asynchronous消息子类型说明表

子类型

描述

Packet-in

用于设备发送报文到控制器

Flow-Removed

通告控制器将某个流表项从流表中移除

Port-Status

通告控制器设备端口状态或配置发生改变

Error

通告控制器设备出的问题或错误

 

表1-3     symmetric消息子类型说明表

子类型

描述

Hello

建立OpenFlow连接时设备和控制器发送Hello交互

Echo

保活消息,控制器和设备都会发送Echo request/reply消息

Experimenter

为将来新加入的特性预留的消息

 

2.    控制器角色

表1-4     控制器角色说明表

角色

权限

Master

该角色的控制器拥有控制设备的全部权限,可以下发流表\查询统计信息,接收设备上报的状态信息。在控制器集群部署时,只能有一台控制器是Master

Equal

该角色控制器同样拥有全部权限,相比于Master角色,集群时可有多个控制器处于Equal

Slave

该角色控制器有部分权限,部分权限被限制,如不能下发流表项、group表项、Meter表项。不允许修订设备配置、不允许进行Packet Out操作

 

3.    控制转发分离

OpenFlow实现了网络控制面的集中管理,使得整个网络能够轻易(相对于现有网络状况而言)地实现集中管理,进而简化了维护管理成本。

控制器向网络设备发送流表信息,用于控制网络数据包的转发方式以及一些配置参数。而网络设备会在链路中断或出现未指定转发行为的数据包时,发送消息通知控制器。进而形成二者的互动,最终控制整个网络的传输行为。

控制器和网络设备之间开始时需要完成相互发现的过程,其具体的行为如下1-1所示:

图1-1     控制器和网络设备交互原理图

 

控制器和网络设备相互发送OpenFlow定义的Hello报文进行握手。握手成功后,控制器将请求设备的具体信息例如设备的端口数量、各端口的能力等(如1-1中的Feature Request/Reply),随后控制器将下发用户配置到具体的网络设备上(1-1中的Set Config)。当连接建立后,控制器定义各个流以及匹配流的处理方式并通过流表下发到设备。每个数据包在进入设备后将按照控制器预先设定的流表规则匹配流表并执行对应的动作(动作包括:转发、丢弃、修改报文内容),同时对应的计数器将更新;如果没能找到匹配的表项,则转发给控制器。

网络设备会在本地维护控制器下发的流表,如果要转发的数据包在流表中已有定义,则直接在网络设备上完成转发行为;若在流表中未能查找到,则数据包就会被发送到控制器进行传输路径的确认(可以理解为进行控制面解析,进而生成流表),再根据控制器下发的流表进行转发。

1.1.3  协议规范

l  OpenFlow Switch SpecicationVersion 1.0.0

l  OpenFlow Switch SpecicationVersion 1.3.0

1.2   配置限制和指导

l  流表限制:不支持多个流表,只支持Table 0流表。

l  连接控制器数量限制:最多只支持连接3台控制器。

1.3   配置任务概览

OpenFlow配置任务如下:

(1)   配置OpenFlow

(2)   (可选)配置OpenFlow多控制器模式

(3)   (可选)配置OpenFlow送控制器报文的vlan标签

(4)   (可选)配置OpenFlow报文处理模式

(5)   (可选)配置OpenFlowIP

1.4   配置OpenFlow

1.4.1  功能简介

OpenFlow是一种网络传输协议,运行在安全传输层协议(TLS)或无保护TCP连接之上,定义了控制器与网络设备之间的交互行为。

1.4.2  配置OpenFlow

1.    功能简介

配置设备为OpenFlow转发模式,当设备开启OpenFlow功能时,对报文的转发控制策略由控制器生成并下发。

2.    配置限制与指导

l  当要切换控制器的地址时,应先关闭OpenFlow功能,再开启OpenFlow功能。

l  开启OpenFlow功能时,需要将设备本身的LLDP功能关闭,否则控制器下发的LLDP报文无法发出。

3.    配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   开启OpenFlow功能。

of controller-ip ipv4-address [ port port-number ] [ aux ] interface interface-type interface-number

缺省情况下,OpenFlow功能处于关闭状态。

1.4.3  配置OpenFlow多控制器模式

1.    功能简介

配置设备多控制器模式,可以同时连接多个控制器。

2.    配置限制与指导

配置设备多控制器模式时,需要先关闭OpenFlow功能,再配置为多控制器模式,再开启OpenFlow功能后才生效。

3.    配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   设置OpenFlow设备连接控制器模式。

of mode { single | multiple }

缺省情况下,OpenFlow设备处于多控制器模式。

(4)   (可选)配置OpenFlow重连控制器的时间间隔。

of connect-interval interval

缺省情况下,OpenFlow重连控制器的时间间隔为6秒。

(5)   (可选)配置OpenFlow发送echo request的时间间隔。

of echo-interval interval

缺省情况下,OpenFlow发送echo request的时间间隔为5秒。

1.4.4  配置OpenFlow送控制器报文的vlan标签

1.    功能简介

设置设备送控制器的报文是否携带vlan标签。缺省情况下设备送控制器的报文携带vlan标签。

2.    配置限制与指导

配置完成后立刻生效。

3.    配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   配置OpenFlow设备送控制器报文是否携带标签。

of packet vlantag

缺省情况下,OpenFlow设备送控制器的报文携带vlan标签。

1.4.5  配置OpenFlow报文处理模式

1.    功能简介

设置设备收到的报文是否进行查表。缺省情况下,设备收到报文后先进行查表,根据命中的表项处理报文,如果未命中表项则报文被丢弃。

2.    配置限制与指导

配置完成后立刻生效。

3.    配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   设置OpenFlow设备连接控制器模式。

of packet table-lookup { enable | disable }

缺省情况下,设备报文的处理模式为查表模式。

1.4.6  配置OpenFlowIP

1.    功能简介

设置设备连接控制器时的源IP。默认不配置,使用连接端口的IP

2.    配置限制与指导

配置完成后立刻生效,设备和控制器会断开,使用源IP重新进行连接。

3.    配置步骤

(1)   进入特权模式。

enable

(2)   进入全局配置模式。

configure terminal

(3)   配置OpenFlow连接控制器的源IP

of source-ip ipv4-address

缺省情况下,不配置源IP,默认以连接接口的IP为源IP连接控制器。

1.5   监视与维护

可以通过show命令行查看功能配置后的运行情况以验证配置效果。

表1-5     OpenFlow监视与维护

作用

命令

查看当前OpenFlow设备与控制器连接情况

show of

查看当前OpenFlow设备的端口状态

show of port

查看当前OpenFlow设备的流表

show of flowtable

查看当前OpenFlow设备的组表

show of group

查看当前OpenFlow设备的meter

show of meter

查看当前OpenFlow设备的合并流表项

show of mergedflow

 

1.6   典型配置举例

1.6.1  集中控制配置举例

1.    组网需求

OpenFlow可以实现接入设备认证的集中管理。以1-2为例,在接入交换设备上部署控制器完成对接入设备的认证控制,使得原先需要运行在接入设备上的认证功能(控制面)移交到控制器上完成。

2.    组网图

图1-2     集中控制配置组网图

 

3.    配置要点

l  设备开启OpenFlow功能,与控制器建立OpenFlow管理通道。

l  在接入设备上运行OpenFlow Client,实现与控制器互联。

l  控制器要求接入设备将认证报文通过OpenFlow协议发送到控制器上。

l  由控制器完成认证过程并将认证结果通过OpenFlow协议下发到具体的接入设备上,完成终端用户的准入控制。

4.    配置步骤

# 配置设备端开启OpenFlow功能,指定控制器的IP地址为172.18.2.36/24,端口号为65535,同时关闭设备lldp功能。

Device> enable

Device# configure terminal

Device(config)# no lldp enable

Device(config)# interface mgmt 0

Device(config-if)# ip address 172.18.2.36 255.255.255.0

Device(config-if)# exit

Device(config)# of controller-ip 172.18.2.35 port 65535 interface mgmt 0

# 配置设备为单控制器模式。

Device(config)# of mode single

# 配置送控制器的报文不携带vlan标签。

Device(config)# no of packet vlantag

# 配置设备为查表模式。

Device(config)# ofpacket table-lookup enable

# 配置设备的OpenFlowIP192.168.197.25

Device(config)# of source-ip 192.168.197.25

5.    验证配置结果

# 查看OpenFlow的连接状态信息

Device# show of

[0] Controller ID=0 Info=tcp:172.18.2.35 port=6653 interface Mgmt 0, Main is Connected, Aux is Disabled

# 查看OpenFlow的端口状态。

Device# show of port

ID  IFX  INTERFACE      SPEED   LINK  DUPLEX   TX_PKT    RX_PKT    CONFIG

1   1   GigabitEthernet 0/1 Unknown  DOWN  Unknown  0      0      NA 

2   2   GigabitEthernet 0/2 Unknown  DOWN  Unknown  0      0      NA 

# 查看OpenFlow的流表状态。

Device# show of flowtable

/***************** openflow flow table[0]---flow number[2] *******************/

 

{table="0", duration_sec="5222", priority="0", flags ="0x1",idle_timeout="0", hard_timeout="0", cookie="0x0", packet_count="0", byte_count="0". match=oxm{all match} instructions=[apply{acts=[output{port="controller", max_len="3333"}] }] }

xid=472, sync_flag=0x0, ss_index=0x7b6

 

{table="0", duration_sec="5222", priority="66", flags ="0x1",idle_timeout="0", hard_timeout="0", cookie="0x0", packet_count="0", byte_count="0". match=oxm{eth_dst="00:25:64:c4:54:e4", eth_type="0x800", ipv4_dst="1.1.0.0", ipv4_dst_mask="255.255.240.0"} instructions=[apply{acts=[output{port="controller", max_len="65535"}] }] }

xid=473, sync_flag=0x0, ss_index=0x7b1

 

/****************************** openflow flow table end ****************************************/

flow total number = 2

# 配置设备为单控制器模式,只能连接一个控制器,超过一个时会有错误提示。

Device(config)# no of controller-ip

Device(config)# of mode single

Device(config)# of controller-ip 172.18.122.24 interface gigabitEthernet 0/1

Device(config)# of controller-ip 172.18.122.25 interface gigabitEthernet 0/1

Controller Mode is Single, can't connected

# 通过show of命令查看当前模式为查表模式,源IP192.168.197.25

Device# show of

version:openflow1.3, controller[0]:tcp:172.18.105.11 port 6653 interface GigabitEthernet 1/0/7, main is connected, aux is disable, role is master.

Current controller mode : multiple.

Current packet process mode : Lookup all flow.

Datapath id = 897516188948

Source IP = 192.168.197.25

6.    配置文件

hostname Device

alias exec sv show version

!

no lldp enable

!

of source-ip 192.168.197.25

of controller-ip 172.18.2.35 port 65535 interface Mgmt 0

no of packet vlantag

!

interface Mgmt 0

 ip address 172.18.2.36 255.255.255.0

 gateway 172.18.2.1

7.    常见错误

l  控制器IP地址配置错误。

l  控制器TCP端口号配置错误。

l  忘记配置本机的管理通道IP地址。