• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

12-OpenFlow配置指导

目录

01-OpenFlow配置

本章节下载 01-OpenFlow配置  (290.27 KB)

01-OpenFlow配置


1 OpenFlow

1.1  OpenFlow概述

1.1.1  OpenFlow背景

随着虚拟化技术的大规模应用,传统的网络架构和网络设备的不足越来越多的被暴露出来,如控制平面与转发平面相集成,扩展性低,不易定制,技术更新周期长,过于依赖网络设备商。而虚拟化技术要求设备操作简单灵活、扩展性能高、不需要用专门的芯片来进行转发控制。传统的网络设备已经无法满足虚拟化技术以及数据中心网络的需求。而SDN(Software Defined Network,软件定义网络)技术可以分离控制平面和网络转发平面,解决数据中心网络中所面临的问题。

1.1.2  OpenFlow介绍

OpenFlow是SDN(Software Defined Network,软件定义网络)架构中定义的一个控制器与转发器之间的通信接口标准。OpenFlow允许控制器直接访问和操作网络设备的转发平面,这些网络设备可能是物理上的,也可能是虚拟的路由器或者交换机。

OpenFlow的思想:分离控制平面和数据平面,二者之间使用标准的协议通信;数据平面采用基于流的方式进行转发。

OpenFlow网络由OpenFlow网络设备(Switch)和控制器(Controller)通过安全通道(Secure channel)组成,如图1-1所示。

图1-1 OpenFlow网络组成

 

1.1.3  基本概念

1. Switch类型

OpenFlow Switch有下面两种:

·     OpenFlow-Only Switch:仅支持OpenFlow转发。

·     OpenFlow-Hybrid Switch:既支持OpenFlow转发,也支持正常转发。本系列交换机即为OpenFlow-Hybrid Switch。

2. OpenFlow接口

OpenFlow接口有下面三类。

·     物理接口:比如交换机的以太网口等。可以作为匹配的入接口和出接口。

·     逻辑接口:比如聚合接口等。可以作为匹配的入接口和出接口。

说明

设备匹配逻辑接口时,设备不支持Tunnel接口和LoopBack接口。

 

·     保留接口:由转发动作定义的接口,实现OpenFlow转发功能。仅可以作为匹配的出接口。

表1-1 保留接口说明

类型

说明

ALL

报文从所有接口发送

Controller

报文上送控制器

Table

报文重新进入流表进行匹配

In_Port

报文从入接口转发

Any

接口通配描述,不能作为入接口以及出接口

Local

报文上送本地CPU

Normal

报文正常转发

Flood

报文广播发送

 

3. OpenFlow流表

(1)     流表项组成

OpenFlow通过用户定义的流表(Flow Table)来匹配和处理报文,在同一个流表中按规则的优先级进行先后匹配。一台OpenFlow交换机可以包含一个或者多个流表,流表项结构如图1-2所示。

图1-2 流表项结构

 

 

·     Match Fields:报文匹配规则。可以匹配入接口、物理入接口、二层报文头、三层报文头等字段。

·     Priority:优先级。定义流表项之间的匹配顺序,优先级高的先匹配。

·     Counters:统计计数。统计有多少个报文和字节匹配到该流表项。

·     Instructions:动作指令集。定义匹配到该流表项的报文需要进行的处理。流表项动作指令集是对动作进行操作,流表项的动作有两种执行类型:

¡     动作集(Action Set):一系列动作的组合,设备不会立刻修改报文内容,直到报文不再需要进入下一级流表,动作集里每种动作仅有一个,并且按照一定的顺序统一执行。

¡     动作序列(Action List):需要立即执行的一系列动作,其动作内容与动作集相同,此时立即修改报文的内容,并且执行顺序按照下发的顺序执行。

表1-2 动作指令集定义

指令

描述

Meter

对匹配到流表项的报文进行限速

Apply-Actions

立即执行动作序列中的动作

Clear-Actions

清除动作集中的所有动作

Write-Actions

更改动作集中的所有动作

Write-Metadata

更改流表间数据,在支持多级流表时使用

Goto-Table

进入下一级流表

 

·     Timeouts:超时时间。包括了Idle time和Hard time。

¡     Idle time:在该时间超时后如果没有报文匹配到该流表项,则此流表项被删除。

¡     Hard time,在该时间超时后,无论是否有报文匹配到该流表项,此流表项都会被删除

·     Cookie:控制器下发的流表项的标识。

(2)     流表处理流程

图1-3所示,报文进入设备后,设备先解析报文,然后从第一个流表开始,按照流表编号从小到大依次匹配,当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数),然后根据规则中的指令进行相应操作(比如转下一个流表继续处理、修改或者立即执行该数据包对应的动作等)。当数据包处于最后一个流表时,其对应的动作将被执行(比如转发至某一端口、修改数据包某一字段或丢弃数据包等)。

图1-3 OpenFlow转发示意图

 

流表分为两种类型:

·     MAC-IP流表:通过MAC地址表和FIB表实现。只能匹配报文的目的MAC地址、VLAN以及目的IP地址,动作也仅支持修改报文的目的MAC地址、源MAC地址、VLAN以及指定出接口。

·     Extensibility流表:即扩展流表,可以匹配报文的源MAC地址、目的MAC地址、源IP地址、目的IP地址、报文优先级、TCP源端口、TCP目的端口等。

4. Table Miss表项

每个流表都包含一个Table Miss流表项,该表项用于定义在流表中没有匹配的报文的处理方式,该表项匹配任何报文,优先级为0,动作指令与正常表项相同。

5. Group Table

Group Table由Group表项组成,Group表项被流表项所引用,提供额外的报文转发功能。

图1-4 Group表项结构

 

 

·     Group Identifier:Group ID,用于识别Group,32bits。

·     Group Type:Group类型。

·     Counters:当报文被Group处理时,计数器更新。

·     Action Buckets:一个由动作桶组成的有序列表。每个动作桶由许多动作组成。

6. Meter Table

Meter Table由Meter表项组成,Meter表项被流表项所引用,为所有引用Meter表项的流表项提供报文限速的功能。

图1-5 Meter表项结构

 

·     Meter Identifier:Meter ID,用于识别Meter,32bits。

·     Meter Bands:一个Meter表项可以包含一个或者多个Meter Bands,每个Meter Band定义了速率以及动作。当报文的速率超过了某些Meter Band,根据这些Meter Band中速率最大的那个定义的动作进行处理。

·     Counters:当报文被Meter处理时,计数器更新。

图1-6 Meter Bands结构

 

·     Band Type:Band类型,定义报文如何处理。为可选,可使用丢弃(drop),即报文高于该速率会被丢弃;以及重新标记DSCP(dscp remark)。

·     Rate:Meter用于选择Band的最低速率,即报文速率高于该速率并最接近该速率,该Band将被应用。

·     Counters:当Band处理报文时,计数器更新。

·     Type Specific arguments:某些Band含有的特定参数。

1.1.4  OpenFlow实例

OpenFlow支持多实例。每个OpenFlow实例可以单独连接控制器,下发流表项指导流量的转发,相当于一台独立的OpenFlow设备。

1. 实例划分

划分实例的作用范围,在实例的作用范围内,流量转发遵循流表中定义的规则。

2. 实例激活

OpenFlow实例配置完成后,需要进行激活才能生效。

OpenFlow需要将设备的支持能力、当前的接口信息等设备信息上报给控制器后,控制器才能够下发流表项指导转发。

一个OpenFlow实例相当于一台独立的OpenFlow设备,它根据VLAN划分作用域,以及可以配置接口上报的能力,这些都会影响OpenFlow实例的能力,因此在这些配置更改的情况下,需要重新激活实例,使配置生效。

在激活配置时,OpenFlow实例会与所有控制器断开连接,然后重新进行连接。

3. 实例所属接口

OpenFlow协议规定OpenFlow实例需要将接口信息上报给控制器,这些接口包括物理接口、逻辑接口以及保留接口中的Local。

对于通过VLAN划分作用范围的OpenFlow实例,当且仅当接口所属VLAN完全包含了OpenFlow对应的VLAN后,该接口才是该OpenFlow实例的接口,可以被上报到控制器。如果配置了loosen模式,只要接口所在VLAN与实例配置VLAN存在交集,接口就属于OpenFlow实例。

1.1.5  协议规范

OpenFlow Switch Specification Version1.3.1

1.2  OpenFlow配置任务简介

表1-3 OpenFlow配置任务简介

配置任务

说明

详细配置

配置OpenFlow实例

创建OpenFlow实例

必选

1.3.1 

配置OpenFlow实例的基本能力

配置OpenFlow实例对应的VLAN

必选

1.3.2  1.

配置流表ID

可选

1.3.2  2.  

配置OpenFlow实例与控制器的连接模式

可选

1.3.2  3.

配置Extensibility流表项的上限

可选

1.3.2  4.

配置带内管理VLAN

可选

1.3.2  5.

配置OpenFlow实例对应的VLAN禁止MAC地址学习

可选

1.3.2  6.

配置OpenFlow实例的Datapath ID

可选

1.3.2  7.

激活OpenFlow实例

必选

1.3.2  5.

配置连接控制器

配置主连接

必选

1.4.1 

配置连接中断模式

可选

1.4.2 

配置OpenFlow定时器

可选

1.5 

配置支持动态MAC地址

可选

1.6 

 

1.3  配置OpenFlow实例

说明

·     当端口退出OpenFlow实例对应的VLAN或Group表以后,控制器下发到端口上的流表项不会自动删除,请在端口退出OpenFlow实例前,先把对应端口上的流表项删除。

·     删除MAC-IP流表项对应的VLAN虚接口后,控制器重新下发流表项前需要重新创建对应的VLAN虚接口,否则控制器无法下发流表项。

·     不同型号设备支持的ARP和路由表项数量不同,通过控制器向设备下发ARP和路由表项后,实际生效的表项,通过执行display arpdisplay ip routing-table命令查看。

·     对于同一种业务,同时通过控制器和CLI配置时,可能导致转发冲突,此时,请根据实际情况通过CLI配置或者通过控制器下发流表项来保证业务正常转发。

 

1.3.1  创建OpenFlow实例

表1-4 创建OpenFlow实例

操作

命令

说明

进入系统视图

system-view

-

创建OpenFlow实例,并进入OpenFlow实例视图

openflow instance instance-id

缺省情况下,没有配置OpenFlow实例

(可选)配置OpenFlow实例描述

description text

缺省情况下,未配置OpenFlow实例的描述信息

 

1.3.2  配置OpenFlow实例的基本能力

下面配置用于定义OpenFlow实例的基本能力,设备与控制器建立连接后,会向控制器上报这些基本能力,控制器根据这些能力下发表项。

1. 配置OpenFlow实例对应的VLAN

配置OpenFlow实例对应的VLAN后,对应VLAN内的流量根据OpenFlow流表项转发,其它VLAN内的流量进行正常转发。

注意

·     不能将同一个VLAN映射到多个实例中,否则,流量无法正确处理。

·     如果OpenFlow实例对应的VLAN不存在,在激活实例后,不存在的VLAN会自动创建。在实例激活后,请不要删除OpenFlow实例对应的VLAN。

·     OpenFlow实例对应的VLAN中不能包含LoopBack接口。

 

表1-5 配置OpenFlow实例对应的VLAN

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例对应的VLAN

classification vlan vlan-id [ mask vlan-mask ] [ loosen ]

缺省情况下,没有配置OpenFlow实例对应的VLAN

 

2. 配置流表ID

表1-6 配置流表ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例下的流表类型和流表ID

flow-table { extensibility table-id | mac-ip table-id }*

缺省情况下,Extensibility流表ID0,没有配置MAC-IP流表ID

一个OpenFlow实例只支持配置一个MAC-IP表和一个Extensibility表,如果多次执行该命令,后面的配置将会覆盖前面的配置

MAC-IP表和Extensibility表的ID不能相同,且MAC-IP表的ID值必须小于Extensibility表的ID

 

3. 配置OpenFlow实例与控制器的连接模式

OpenFlow实例与控制器连接时,支持以下两种模式:

·     Single模式:同一时刻,OpenFlow实例仅与一个控制器建立连接,配置的多个控制器之间互为备份,当且仅当当前的连接断开后,OpenFlow实例连接下一个控制器,直到连接成功。

·     Multiple模式:同一时刻,OpenFlow实例可以与多个控制器建立连接,在与某个控制器连接失败或者断开连接后,在重连时间间隔后继续与之进行连接,直到连接成功。

表1-7 配置OpenFlow实例与控制器的连接模式

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例与控制器的连接模式

controller mode { multiple | single }

缺省情况下,OpenFlow实例与控制器的连接模式为multiple

 

4. 配置Extensibility流表项的上限

在OpenFlow实例中允许定义Extensibility流表支持的表项最大值,当控制器下发的流表表项个数超过最大值的时候,向控制器返回失败。

表1-8 配置Extensibility流表项的上限

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置Extensibility流表项的上限

flow-entry max-limit limit-value

·     对于S5500-28SC-HI和S5500-52SC-HI,缺省情况下,Extensibility流表项的上限为1024

·     对于其它机型,缺省情况下,Extensibility流表项的上限为3072

 

5. 配置带内管理VLAN

带内管理VLAN是OpenFlow实例对应的VLAN中的一个或多个VLAN,专门用于在OpenFlow实例内建立该实例与控制器的连接。

配置带内管理VLAN后,带内管理VLAN中的数据报文不再进行OpenFlow转发,并且仅在带内管理VLAN中的端口不再属于OpenFlow接口。因此,进行该功能的配置前,请用户做好网络规划。

带内管理VLAN必须是OpenFlow实例对应的VLAN的子集。

 

表1-9 配置带内管理VLAN

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置带内管理VLAN

in-band management vlan vlan-list

缺省情况下,没有配置带内管理VLAN

 

6. 配置OpenFlow实例对应的VLAN禁止MAC地址学习

配置该功能后,OpenFlow实例对应的VLAN的MAC地址学习功能被禁止。

带内管理VLAN不受该功能限制。

 

表1-10 配置OpenFlow实例对应的VLAN禁止MAC地址学习

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例对应的VLAN禁止MAC地址学习

mac-learning forbidden

缺省情况下,OpenFlow实例对应的VLAN允许MAC地址学习

 

7. 配置OpenFlow实例的Datapath ID

OpenFlow网络中,每个OpenFlow实例都使用唯一的Datapath ID来标识本实例。缺省情况下,OpenFlow实例的Datapath ID由实例ID和设备桥MAC组成,用户可以配置Datapath ID。

表1-11 配置OpenFlow实例的Datapath ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置OpenFlow实例的Datapath ID

datapath-id datapath-id

缺省情况下,OpenFlow实例的Datapath ID由实例ID和设备桥MAC组成,前16位为实例ID,后48位为设备桥MAC

 

1.3.3  激活OpenFlow实例

此功能用于激活实例。如果实例已经与控制器建立了连接,修改OpenFlow实例的基本配置后,需要重新激活该OpenFlow实例,此时,OpenFlow实例会断开与所有控制器的连接,清除已经下发的流表,根据当前的配置更新OpenFlow实例的能力集,重新与控制器建立连接。

注意

重新激活OpenFlow实例会导致流量中断,请谨慎使用。

 

表1-12 激活OpenFlow实例

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

激活OpenFlow实例

active instance

缺省情况下,未激活OpenFlow实例

 

1.4  配置连接控制器

1.4.1  配置主连接

一个OpenFlow实例可以连接多个控制器,但仅允许与一个控制器建立主连接,用于控制消息的处理(下发流表项、获取数据、信息上报等),需要使用TCP/SSL保持可靠的连接。

表1-13 配置主连接

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置主连接

controller id address { ip ip-address | ipv6 ipv6-address } [ port port-number ] [ ssl ssl-policy-name ]

缺省情况下,没有配置主连接

最多支持配置8个控制器

 

1.4.2  配置连接中断模式

一旦OpenFlow实例与所有控制器断开连接,则OpenFlow实例必须进入连接中断模式,模式分为两种:

·     Secure模式:连接断开后,交换机根据流表项转发。不主动删除控制器下发的表项,而是等待表项超时后进行删除,一旦连接建立成功,未超时的表项依然存在。

·     Standalone模式:连接断开后,交换机正常转发。

如果交换机与控制器重新连接成功,则继续作为OpenFlow设备根据流表项进行转发。

表1-14 配置连接中断模式

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置连接中断模式

fail-open mode { secure | standalone }

缺省情况下,连接中断模式为Secure模式

 

1.5  配置OpenFlow定时器

连接检测定时器用于定义发送Echo request报文时间间隔,当超过三次Echo request报文发送并且没有收到Echo reply报文,则OpenFlow实例与控制器的连接断开。

OpenFlow实例与控制器重连的时间间隔定义OpenFlow实例与控制器断开连接后再次开始重新连接的时间间隔。

表1-15 配置OpenFlow定时器

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置发送Echo request报文的时间间隔

controller echo-request interval  interval-value

缺省情况下,发送Echo request报文的时间间隔为5秒

设备CPU负担较大的情况下,请配置较大的发送Echo request报文的时间间隔

配置OpenFlow实例与控制器重连的时间间隔

controller connect interval interval-value

缺省情况下,OpenFlow实例与控制器重连的时间间隔为60秒

 

1.6  配置支持动态MAC地址

此功能仅在支持MAC-IP流表情况下,决定是否支持控制器在查询或者删除流表项时包含动态MAC地址。

表1-16 配置支持动态MAC地址

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置支持动态MAC地址

mac-ip dynamic-mac aware

缺省情况,不支持动态MAC地址

 

1.7  OpenFlow显示和维护

在完成上述配置后,在任意视图下执行display命令可以显示配置后OpenFlow的运行情况,以及控制器下发的流表项。

表1-17 OpenFlow显示和维护

操作

命令

显示OpenFlow实例的详细信息

display openflow instance [ instance-id ]

显示OpenFlow实例的流表信息

display openflow instance instance-id flow-table [ table-id ]

显示OpenFlow实例的控制器信息

display openflow instance instance-id controller

显示OpenFlow实例的Group表信息

display openflow instance instance-id group [ group-id ]

显示OpenFlow实例的Meter表信息

display openflow instance instance-id meter [ meter-id ]

显示OpenFlow实例的概要信息

display openflow summary

 

1.8  OpenFlow典型配置举例

1. 组网需求

·     创建OpenFlow实例1,把VLAN 4092和4094映射到OpenFlow实例中1,并激活实例。

·     使用VLAN 1作为OpenFlow实例1与控制器通信的VLAN。

·     配置控制器的IP地址,连接控制器。使控制器能够控制OpenFlow实例1上的流量转发。

2. 组网图

图1-7 OpenFlow配置组网图

 

3. 配置步骤

(1)     配置VLAN

# 创建VLAN 4092和4094。

<Switch> system-view

[Switch] vlan 4092

[Switch-vlan4092] quit

[Switch] vlan 4094

[Switch-vlan4094] quit

(2)     创建实例并映射VLAN

[Switch] openflow instance 1

[Switch-of-inst-1] classification vlan 4092 mask 4093

(3)     配置控制器并激活实例

[Switch-of-inst-1] controller 1 address ip 192.168.49.49

[Switch-of-inst-1] active instance

(4)     验证配置

# 显示实例详细信息。

[Switch-of-inst-1] display openflow instance 1

Instance 1 information:                                                

                                                                                

Configuration information:                                                     

 Description   : --                                                            

 Active status : active                                                         

 Inactive configuration:                                                       

  none                                                                         

 Active configuration:                                                         

  Classification VLAN, total VLANs(2)                                          

   4092, 4094                                                                  

  In-band management VLAN, total VLANs(0)                                      

   empty VLAN                                                                  

  Connect mode: multiple                                                       

  Mac address learning: Enabled                                                 

  Flow table:                                                                   

   Table ID(type): 0(Extensibility), count: 0                                  

  Flow-entry max-limit: 3072                                                  

  Datapath ID: 0x00010cda415e232e                                               

Port information:                                                              

 none                                                                          

Active channel information:                                                     

 Failopen mode: secure

 

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们