• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 关于我们

17-OpenFlow配置指导

目录

01-OpenFlow配置

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

01-OpenFlow配置


1 OpenFlow

·     设备支持两种运行模式:独立运行模式和IRF模式,缺省情况为独立运行模式。有关IRF模式的介绍,请参见“虚拟化技术配置指导”中的“IRF”。

·     设备工作在标准模式或二层增强模式时,如果设备运行在IRF模式并开启IRF增强功能,则设备不支持OpenFlow功能。有关于设备工作模式的详细介绍请参见“基础配置指导”中的“设备管理”; 有关IRF增强功能的介绍,请参见“虚拟化技术配置指导”中的“IRF”。

1.1  OpenFlow简介

1.1.1  OpenFlow概述

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

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

OpenFlow网络由OpenFlow网络设备(Switch)和控制器(Controller)通过安全通道(OpenFlow channel)组成,如图1-1所示。Switch与Controller通过TLS或者TCP建立安全通道,进行OpenFlow消息交互,实现表项下发、查询以及状态上报等功能。下文如果没有特殊说明,交换机指的就是OpenFlow设备。

图1-1 OpenFlow网络组成

 

1.1.2  基本概念

1. Switch类型

OpenFlow Switch有下面两种:

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

·     OpenFlow-Hybrid Switch:既支持OpenFlow转发,也支持正常转发。S12500即属于OpenFlow-Hybrid Switch类型。

2. OpenFlow接口

OpenFlow接口有下面三类。

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

·     逻辑接口:比如二层聚合接口等。可以作为入接口和出接口。

·     保留接口:由转发动作定义的接口,实现OpenFlow转发功能。除Any接口外,其他接口仅可以作为出接口。具体类型请参见表1-1

表1-1 保留接口说明

 

1.1.3  OpenFlow实例

OpenFlow支持多实例,S12500在独立运行模式或IRF模式下都最多仅支持配置64个实例。每个OpenFlow实例可以单独连接控制器(一个OpenFlow实例最多可以连接64个控制器),相当于一台独立的OpenFlow设备,根据控制器下发的流表项指导流量转发。下文如果没有特殊说明,交换机指的就是一个OpenFlow实例。

说明

S12500在独立运行模式或IRF模式下允许的最大连接数为128,即一台整机上所有OpenFlow实例连接控制器个数总和的最大值不允许超过128。

 

1. 实例划分

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

2. 实例激活

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

在配置更改的情况下,需要重新激活实例使配置生效。激活配置后,OpenFlow实例会与所有控制器断开连接,然后重新进行连接。

3. 实例所属接口

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

对于通过VLAN划分作用范围的OpenFlow实例:

·     非Loosen模式:当且仅当接口所属VLAN完全包含了OpenFlow实例配置的映射VLAN后,该接口才是此OpenFlow实例的接口,可以被交换机上报给控制器。

·     Loosen模式:如果配置了loosen模式,只要接口所在VLAN与实例配置的映射VLAN存在交集,该接口就属于OpenFlow实例。

1.1.4  Flow Table

OpenFlow通过流表(Flow Table)来匹配和处理报文,每个流表由一个或多个流表项(Flow Entry)组成,在同一个流表中按流表项的优先级进行先后匹配。

流表分为两种类型:

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

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

需要注意的是,目前S12500的一个OpenFlow实例仅支持配置1Extensibility流表,MAC-IP流表暂不支持。

1. 流表项结构

一条OpenFlow流表项的结构如图1-2所示。

图1-2 流表项结构

 

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

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

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

说明

·     目前S12500的流表项是基于报文进行统计计数的,且上送控制器的报文不支持统计。

·     当流表项的动作指令集中包含Meter动作指令时,不支持对匹配该流表项的报文进行统计。

 

·     Instructions:动作指令集。定义匹配到该流表项的报文需要进行的处理。一个流表项的动作指令集可以包含表1-2中的一个或者多个动作指令,包含多个动作指令时按照表1-2从上到下的先后顺序执行。动作指令是对匹配该流表项的报文的动作集(Action Set)进行的操作,动作集是对报文进行操作的动作(如转发报文、修改报文等)的集合,一个动作集中可以包含多个动作,但每种动作仅能存在一个。

表1-2 动作指令集定义

·     Timeouts:超时时间。包括了idle time和hard time。

¡     idle time:在idle time时间内,如果没有报文匹配到该流表项,则在idle time超时后删除此流表项;如果有报文匹配到该流表项,则刷新idle time(上送控制器的报文即使匹配了流表项,也不会更新该表项的idle time)。

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

提示

·     为了更好的查询、下发流表,建议idle time时间配置为不小于60s的数值;当设备上OpenFlow流表总数较多时(比如大于>1k),建议idle time时间配置为300s或以上。具体如何设置idle time请参见《H3C VCF控制器联机帮助》。

·     您可以通过命令display openflow summary查看设备上的流表个数。

 

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

2. 流表处理流程

下文介绍的流表处理流程,仅针对1个OpenFlow实例而言,并非针对整台物理设备。由于目前在S12500上一个OpenFlow实例仅包含1个流表,因此不存在多个流表的处理过程。

如果一个OpenFlow实例内包含多个流表,那么报文匹配流表的处理流程如图1-3所示,报文进入交换机后,将从流表ID最小的流表开始,按照流表编号从小到大依次匹配,在同一流表中按流表项的优先级进行先后匹配,如果匹配表项成功,则根据流表项中的动作指令集进行相应操作(比如更改动作集中的动作、清除动作集中的动作等),同时更新计数器。当报文通过最后一个流表时,该报文对应动作集中的所有动作都将被执行(比如转发至某一端口、修改报文某一字段或丢弃报文等)。

图1-3 OpenFlow转发示意图

 

3. Table Miss表项

每个流表都包含一个Table Miss流表项,该表项用于定义在流表中没有匹配的报文的处理方式,该表项的匹配域为通配,即匹配任何报文,优先级为0,表项结构与普通表项相同,支持的动作指令集也和普通表项相同。

1.1.5  Group Table

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

图1-4 Group表项结构

 

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

·     Group Type:Group类型。

¡     All:执行所有动作桶,用于组播或者广播。

¡     Select:自动选择一个动作桶执行。

¡     Indirect:始终执行固定的动作桶。

¡     Fast failover:始终执行第一个活跃的动作桶。

·     Counters:当报文被Group处理时,更新计数器。目前S12500暂不支持组表的统计计数功能。

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

1.1.6  Meter Table

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

图1-5 Meter表项结构

 

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

·     Meter Band:定义了速率以及动作。当报文的速率超过了Meter Band,根据定义的动作进行处理。

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

图1-6 Meter Band结构

 

·     Band Type:Band类型,定义报文如何处理。超过Band定义速率的报文会被丢弃。

·     Rate:报文速率高于该速率,该Band将被应用。

·     Counters:当Band处理报文时,更新计数器。目前S12500的Meter Band是基于字节进行统计计数的。

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

1.1.7  协议规范

·     OpenFlow Switch Specification Version 1.3.1

1.2  OpenFlow配置任务简介

表1-3 OpenFlow配置任务简介

 

1.3  配置OpenFlow实例

1.3.1  创建OpenFlow实例

表1-4 创建OpenFlow实例

 

1.3.2  配置OpenFlow实例的基本能力

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

1. 配置OpenFlow实例作用域

OpenFlow实例通过配置的对应VLAN来隔离OpenFlow作用域,配置VLAN内的流量根据OpenFlow流表项转发,其它VLAN内的流量进行正常转发。

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

·     如果同一个接口所属VLAN被分配到不同OpenFlow实例,该接口上的配置以最后收到的控制器下发的接口状态修改消息为准。

·     在IRF模式下,如果为OpenFlow实例的对应VLAN创建了VLAN接口,为了确保IRF成员设备间的流量能够正常转发,请不要在该VLAN接口上配置BFD MAD检测功能。BFD MAD检测功能的相关内容请参见“虚拟化技术配置指导”中的“IRF”。

 

表1-5 配置OpenFlow实例作用域

 

2. 配置流表ID

表1-6 配置流表ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置流表ID

flow-table extensibility table-id

缺省情况下,实例包含了一个Extensibility流表,流表ID0

一个OpenFlow实例只支持配置一个Extensibility表,如果多次配置本命令,新配置将覆盖旧配置,重新激活实例后新配置生效

 

3. 配置控制器模式

OpenFlow实例支持两种模式与多个控制器建立连接。

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

·     Multiple模式:同一时刻,允许与多个控制器建立连接。交换机会连接配置的所有控制器,在与某个控制器连接失败或者断开连接后,在重连时间间隔后重新与之进行连接,直到连接成功。

表1-7 配置控制器模式

 

4. 配置Extensibility表的流表项的最大个数

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

表1-8 配置Extensibility表的流表项的最大个数

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置Extensibility表的流表项的最大个数

flow-entry max-limit limit-value

Extensibility流表项的上限跟单板型号及ACL硬件模式有关,缺省情况请以设备实际显示的取值范围的最大值为准。ACL硬件模式的相关内容请参见“ACL和QoS配置指导”中的“ACL”。

 

5. 配置带内管理VLAN

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

OpenFlow实例对应的VLAN内的流量进行的是OpenFlow转发,不能用于和控制器建立连接。缺省情况下,OpenFlow实例仅能通过非OpenFlow实例对应VLAN的接口尝试与控制器建立连接。如果用户想配置OpenFlow实例通过其对应VLAN的接口与控制器建立连接,可以将该对应VLAN配置成带内管理VLAN。

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

提示

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

 

表1-9 配置带内管理VLAN

 

6. 配置禁止MAC地址学习

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

提示

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

 

表1-10 配置禁止MAC地址学习

 

7. 配置Datapath ID

Datapath ID用来唯一标识交换机(OpenFlow实例),不同交换机(OpenFlow实例)的Datapath ID如果配置相同,则首先激活实例的配置生效,其它相同Datapath ID的实例激活失败。

表1-11 配置Datapath ID

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置Datapath ID

datapath-id id

缺省情况下,OpenFlow实例的Datapath ID由实例ID与设备桥MAC组成,其中前16个比特为实例ID,后48个比特为设备桥MAC

 

1.3.3  激活OpenFlow实例

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

注意

OpenFlow实例的基本能力配置修改并重新激活实例会导致流量中断,请谨慎使用。

 

表1-12 激活OpenFlow实例

 

1.4  配置连接控制器

1.4.1  配置主连接

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

表1-13 配置主连接

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置主连接

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

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

S12500最多可以支持和64个控制器分别建立主连接

 

1.4.2  配置连接中断模式

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

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

·     Standalone模式:连接断开后,交换机立即生成优先级为65536,出接口为Normal的流表项,数据匹配该流表项后进行普通转发。不主动删除控制器发的表项,而是等待表项超时后进行删除,一旦连接建立成功,未超时的表项依然存在。

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

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

操作

命令

说明

进入系统视图

system-view

-

进入OpenFlow实例视图

openflow instance instance-id

-

配置连接中断模式

fail-open mode { secure | standalone }

缺省情况下,OpenFlow实例建立时,缺省为Secure模式,且为该实例下发Table Miss表项(动作为drop)

 

1.5  配置OpenFlow定时器

控制器和交换机都会发送Echo request/reply报文,用于验证连接是否正常。

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

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

表1-15 配置OpenFlow定时器

 

1.6  OpenFlow显示和维护

在完成上述配置后,在任意视图下执行display命令可以显示配置后OpenFlow的运行情况。

表1-16 OpenFlow显示和维护

操作

命令

显示OpenFlow实例的详细信息

display openflow instance [ instance-id ]

显示OpenFlow实例的流表信息

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

显示OpenFlow实例的控制器信息

display openflow instance instance-id controller [ controller-id ]

显示OpenFlow实例的Group信息

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

显示OpenFlow实例的Meter信息

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

显示OpenFlow实例的概要信息

display openflow summary

清除控制器发送和接收报文的统计计数

reset openflow instance instance-id controller [ controller-id ] statistics

 

1.7  OpenFlow典型配置举例

1. 组网需求

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

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

·     配置OpenFlow实例1连接的控制器,用来控制Switch上的流量转发。

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

# 创建VLAN接口1并配置IP地址。

[Switch] interface vlan-interface 1

[Switch-Vlan-interface1] undo shutdown

[Switch-Vlan-interface1] ip address 192.168.49.1 24

[Switch-Vlan-interface1] quit

(2)     创建OpenFlow实例1并配置实例对应的VLAN

[Switch] openflow instance 1

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

(3)     配置控制器1的IP地址为192.168.49.49,并激活实例

[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: 8192

  Datapath ID: 0x00010000fc002500

  Default table-miss: Drop

  Forbidden port: None

Port information:

 GigabitEthernet3/0/1

Active channel information:

 Controller 1 IP address: 192.168.49.49 port: 6633

1.8  附录 A 应用限制

1.8.1  Flow Entry的限制

1. 匹配的限制

(1)     VLAN匹配

在使用VLAN划分OpenFlow实例的情况下,对VLAN的匹配存在一定的限制。

表1-17 VLAN匹配项列表

VLAN

MASK

匹配的报文

-

-

匹配在OpenFlow实例VLAN内的所有报文

0

-

匹配无VLAN tag的报文,但是入接口的PVID必须是在OpenFlow实例内

0

有值

不支持

有效VLAN

-/有值

不支持

0x1000

-/非0x1000的值

不支持

0x1000

0x1000

匹配有VLAN tag的报文,但是该VLAN tag必须在OpenFlow实例内

有效VLAN

| 0x1000

-/有值

根据VLAN+MASK进行匹配,前题是VLAN+MASK必须在OpenFlow实例内

其它

其它

不支持

 

(2)     协议报文的匹配

对于协议报文,一旦相关的协议配置使能后,协议报文不会进入OpenFlow转发处理,仍然由相关协议进行处理,但是对于LLDP报文比较特殊,对于LLDP报文的使用限制请参见1.8.4 

1.8.2  Packet Out的处理限制

1. 入接口限制

在Packet out消息中Output为Normal、Local、In port或To Controller时,入接口只能是设备上的物理接口或者逻辑接口,不能是OpenFlow保留口。

2. 报文ID和报文内容同时存在的处理

在Packet Out消息中如果同时存在报文ID和报文,OpenFlow Switch只会获取报文ID对应的缓存报文进行处理,忽略消息中携带的报文。

3. 无VLAN Tag报文的处理

·     如果Packet Out消息中的报文没有VLAN tag,则OpenFlow Switch将入接口的PVID做为报文所在的VLAN进行转发处理。

·     如果入接口不是设备上的接口,且Output是设备上的接口,则使用出接口的PVID发送。

·     如果入接口不是设备上的接口,且Output是保留口Flood和All,请参见4. 的处理。

4. 出接口限制

Packet Out中指定的Output为保留口的Flood和All时的处理机制

(1)     出接口为Flood的情况

·     Packet Out的报文携带VLAN tag,则报文在该VLAN内广播。

·     Packet Out的报文没有携带VLAN tag,但是入接口是OpenFlow Swtich上的接口,则报文在入接口的PVID内广播。

·     Packet Out的报文没有携带VLAN tag,并且入接口是Controller,则报文在所有OpenFlow接口发送一份。

(2)     出接口为All的情况

·     Packet Out的报文携带VLAN tag,则报文在该VLAN内广播。

·     Packet Out的报文没有携带VLAN tag,无论入接口是什么接口,报文都在所有OpenFlow接口发送一份。

1.8.3  Packet in的处理限制

1. 报文VLAN tag处理

对于Packet in消息中的报文:

·     上送时如果其VLAN tag与该报文入接口的PVID相同,那么该报文的VLAN tag会被删除。

·     上送时如果其VLAN tag与该报文入接口的PVID不同,那么该报文的VLAN tag不会被删除。

2. 报文缓存限制

·     对于上送原因是No Match的报文支持缓存,缓存大小是1K个报文。

·     对于其它上送原因的报文不支持缓存,整个报文都会被上送,并且Cookie是全F。

1.8.4  匹配LLDP报文的限制

OpenFlow网络可以通过LLDP发现拓扑,对于匹配LLDP报文存在如下限制:

·     设备上必须全局使能LLDP。

·     LLDP报文匹配后上送Controller不受实例限制,只要收到报文的接口在OpenFlow实例内,并且实例内有匹配LLDP报文并上送Controller的表项,则LLDP报文就会在该实例上送Controller。

1.8.5  Flow Mod的限制

1. Table Miss表项的添加、修改和删除

·     Switch在激活后会默认生成Table Miss表项,其动作是Drop,默认表项不能够被Controller通过Modify的动作修改,不能被Controller通过Mulipart消息查询到,仅能由Controller通过Add进行添加Table Miss的动作进行修改。

·     Table Miss表项仅能通过严格匹配进行修改和删除,在非严格匹配的情况下,即使匹配项是通配也不能够操作Table Miss表项。

·     Table Miss表项被删除后,会生成默认的Table Miss表项,其动作是Drop。

2. 普通表项的添加、修改和删除

·     在非严格匹配的情况下,不支持通过match域为通配修改所有普通流表项。

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

新华三官网
联系我们