01-OpenFlow配置
本章节下载: 01-OpenFlow配置 (324.02 KB)
· 设备支持两种运行模式:独立运行模式和IRF模式,缺省情况为独立运行模式。有关IRF模式的介绍,请参见“虚拟化技术配置指导”中的“IRF”。
· 设备工作在标准模式或二层增强模式时,如果设备运行在IRF模式并开启IRF增强功能,则设备不支持OpenFlow功能。有关于设备工作模式的详细介绍请参见“基础配置指导”中的“设备管理”; 有关IRF增强功能的介绍,请参见“虚拟化技术配置指导”中的“IRF”。
OpenFlow是SDN(Software Defined Network,软件定义网络)架构中定义的一个控制器与转发层之间的通信接口标准。OpenFlow允许控制器直接访问和操作网络设备的转发平面,这些网络设备可能是物理上的,也可能是虚拟的。
OpenFlow的思想是分离控制平面和数据平面,二者之间使用标准的协议通信;数据平面采用基于流的方式进行转发。
OpenFlow网络由OpenFlow网络设备(Switch)和控制器(Controller)通过安全通道(OpenFlow channel)组成,如图1-1所示。Switch与Controller通过TLS或者TCP建立安全通道,进行OpenFlow消息交互,实现表项下发、查询以及状态上报等功能。下文如果没有特殊说明,交换机指的就是OpenFlow设备。
图1-1 OpenFlow网络组成
OpenFlow Switch有下面两种:
· OpenFlow-Only Switch:仅支持OpenFlow转发。
· OpenFlow-Hybrid Switch:既支持OpenFlow转发,也支持正常转发。S12500即属于OpenFlow-Hybrid Switch类型。
OpenFlow接口有下面三类。
· 物理接口:比如交换机的二层以太网接口等。可以作为入接口和出接口。
· 保留接口:由转发动作定义的接口,实现OpenFlow转发功能。除Any接口外,其他接口仅可以作为出接口。具体类型请参见表1-1。
OpenFlow支持多实例,S12500在独立运行模式或IRF模式下都最多仅支持配置64个实例。每个OpenFlow实例可以单独连接控制器(一个OpenFlow实例最多可以连接64个控制器),相当于一台独立的OpenFlow设备,根据控制器下发的流表项指导流量转发。下文如果没有特殊说明,交换机指的就是一个OpenFlow实例。
S12500在独立运行模式或IRF模式下允许的最大连接数为128,即一台整机上所有OpenFlow实例连接控制器个数总和的最大值不允许超过128。
划分实例的作用范围,在实例的作用范围内,流量转发遵循流表中定义的规则。
OpenFlow需要将设备的支持能力、当前的接口信息等设备信息上报给控制器后,控制器才能够下发流表项指导转发。
在配置更改的情况下,需要重新激活实例使配置生效。激活配置后,OpenFlow实例会与所有控制器断开连接,然后重新进行连接。
OpenFlow协议规定需要将接口信息上报给控制器,这些接口包括物理接口、逻辑接口以及保留接口中的Local。
对于通过VLAN划分作用范围的OpenFlow实例:
· 非Loosen模式:当且仅当接口所属VLAN完全包含了OpenFlow实例配置的映射VLAN后,该接口才是此OpenFlow实例的接口,可以被交换机上报给控制器。
· Loosen模式:如果配置了loosen模式,只要接口所在VLAN与实例配置的映射VLAN存在交集,该接口就属于OpenFlow实例。
OpenFlow通过流表(Flow Table)来匹配和处理报文,每个流表由一个或多个流表项(Flow Entry)组成,在同一个流表中按流表项的优先级进行先后匹配。
流表分为两种类型:
· MAC-IP流表:通过MAC地址表和FIB表实现。只能匹配目的MAC地址、VLAN以及目的IP地址,动作也仅支持修改目的MAC地址、源MAC地址、VLAN以及指定出接口。
· Extensibility流表:即扩展流表。可以匹配报文的源MAC地址、目的MAC地址、源IP地址、目的IP地址、报文优先级、TCP源端口、TCP目的端口等。
需要注意的是,目前S12500的一个OpenFlow实例仅支持配置1个Extensibility流表,MAC-IP流表暂不支持。
一条OpenFlow流表项的结构如图1-2所示。
· Match Fields:匹配规则。可以匹配入接口、报文头等字段。
· Priority:优先级。定义流表项之间的匹配顺序,优先级高的先匹配。
· Counters:统计计数。统计有多少个报文或字节匹配到该流表项。
· 目前S12500的流表项是基于报文进行统计计数的,且上送控制器的报文不支持统计。
· 当流表项的动作指令集中包含Meter动作指令时,不支持对匹配该流表项的报文进行统计。
· Instructions:动作指令集。定义匹配到该流表项的报文需要进行的处理。一个流表项的动作指令集可以包含表1-2中的一个或者多个动作指令,包含多个动作指令时按照表1-2从上到下的先后顺序执行。动作指令是对匹配该流表项的报文的动作集(Action Set)进行的操作,动作集是对报文进行操作的动作(如转发报文、修改报文等)的集合,一个动作集中可以包含多个动作,但每种动作仅能存在一个。
· 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:控制器下发的流表项的标识。
下文介绍的流表处理流程,仅针对1个OpenFlow实例而言,并非针对整台物理设备。由于目前在S12500上一个OpenFlow实例仅包含1个流表,因此不存在多个流表的处理过程。
如果一个OpenFlow实例内包含多个流表,那么报文匹配流表的处理流程如图1-3所示,报文进入交换机后,将从流表ID最小的流表开始,按照流表编号从小到大依次匹配,在同一流表中按流表项的优先级进行先后匹配,如果匹配表项成功,则根据流表项中的动作指令集进行相应操作(比如更改动作集中的动作、清除动作集中的动作等),同时更新计数器。当报文通过最后一个流表时,该报文对应动作集中的所有动作都将被执行(比如转发至某一端口、修改报文某一字段或丢弃报文等)。
图1-3 OpenFlow转发示意图
每个流表都包含一个Table Miss流表项,该表项用于定义在流表中没有匹配的报文的处理方式,该表项的匹配域为通配,即匹配任何报文,优先级为0,表项结构与普通表项相同,支持的动作指令集也和普通表项相同。
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:一个由动作桶组成的有序列表。每个动作桶由许多动作组成。
Meter Table由Meter表项组成,Meter表项被流表项所引用,为所有引用Meter表项的流表项提供报文限速的功能。
图1-5 Meter表项结构
· Meter Identifier:Meter ID,用于识别meter,32bits。
· Meter Band:定义了速率以及动作。当报文的速率超过了Meter Band,根据定义的动作进行处理。
· Counters:当报文被Meter处理时,更新计数器。
· Band Type:Band类型,定义报文如何处理。超过Band定义速率的报文会被丢弃。
· Rate:报文速率高于该速率,该Band将被应用。
· Counters:当Band处理报文时,更新计数器。目前S12500的Meter Band是基于字节进行统计计数的。
· Type Specific arguments:某些Band含有的特定参数。
· OpenFlow Switch Specification Version 1.3.1
表1-3 OpenFlow配置任务简介
配置OpenFlow实例的基本能力 |
||||
配置Extensibility表的流表项的最大个数 |
||||
配置禁止MAC地址学习 |
||||
配置OpenFlow定时器 |
创建OpenFlow实例,并进入OpenFlow实例视图 |
||
(可选)配置OpenFlow实例描述 |
缺省情况下,没有配置OpenFlow实例的描述信息 |
下面配置用于定义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实例作用域
进入OpenFlow实例视图 |
||
配置OpenFlow实例作用域 |
classification vlan vlan-id [ mask vlan-mask ] [ loosen ] |
缺省情况下,没有配置OpenFlow实例作用域 |
进入OpenFlow实例视图 |
||
缺省情况下,实例包含了一个Extensibility流表,流表ID为0 一个OpenFlow实例只支持配置一个Extensibility表,如果多次配置本命令,新配置将覆盖旧配置,重新激活实例后新配置生效 |
OpenFlow实例支持两种模式与多个控制器建立连接。
· Single模式:同一时刻,仅与一个控制器建立连接,配置的多个控制器之间互为备份。当且仅当当前的连接断开后,交换机会连接下一个控制器,直到连接成功。
· Multiple模式:同一时刻,允许与多个控制器建立连接。交换机会连接配置的所有控制器,在与某个控制器连接失败或者断开连接后,在重连时间间隔后重新与之进行连接,直到连接成功。
进入OpenFlow实例视图 |
||
配置实例内的多个控制器的连接模式 |
在OpenFlow实例中允许定义Extensibility流表支持的表项最大值,当控制器下发的流表表项个数超过最大值的时候,向控制器返回失败。
表1-8 配置Extensibility表的流表项的最大个数
进入OpenFlow实例视图 |
||
配置Extensibility表的流表项的最大个数 |
Extensibility流表项的上限跟单板型号及ACL硬件模式有关,缺省情况请以设备实际显示的取值范围的最大值为准。ACL硬件模式的相关内容请参见“ACL和QoS配置指导”中的“ACL”。 |
带内管理VLAN是OpenFlow实例对应的VLAN中的一个或多个VLAN,可以用于在OpenFlow实例内建立该实例与控制器的连接。
OpenFlow实例对应的VLAN内的流量进行的是OpenFlow转发,不能用于和控制器建立连接。缺省情况下,OpenFlow实例仅能通过非OpenFlow实例对应VLAN的接口尝试与控制器建立连接。如果用户想配置OpenFlow实例通过其对应VLAN的接口与控制器建立连接,可以将该对应VLAN配置成带内管理VLAN。
配置带内管理VLAN后,带内管理VLAN中的数据报文不再进行OpenFlow转发,并且仅在带内管理VLAN中的端口不再属于OpenFlow接口。因此,进行该功能的配置前,请用户做好网络规划。
带内管理VLAN中配置的VLAN必须是OpenFlow实例对应的VLAN的子集。
进入OpenFlow实例视图 |
||
配置该功能后,OpenFlow实例对应的VLAN的MAC地址学习的功能被禁止。
带内管理VLAN不受该功能限制。
表1-10 配置禁止MAC地址学习
进入OpenFlow实例视图 |
||
配置禁止MAC地址学习 |
缺省情况下,实例配置的VLAN上允许MAC地址学习 |
Datapath ID用来唯一标识交换机(OpenFlow实例),不同交换机(OpenFlow实例)的Datapath ID如果配置相同,则首先激活实例的配置生效,其它相同Datapath ID的实例激活失败。
进入OpenFlow实例视图 |
||
datapath-id id |
缺省情况下,OpenFlow实例的Datapath ID由实例ID与设备桥MAC组成,其中前16个比特为实例ID,后48个比特为设备桥MAC |
此功能用于激活实例。如果实例已经与控制器建立了连接,此时修改了实例基本能力配置并重新激活,交换机会断开与所有控制器的连接,清除已经下发的流表,根据当前的配置更新OpenFlow实例的能力集,重新与控制器建立连接。
OpenFlow实例的基本能力配置修改并重新激活实例会导致流量中断,请谨慎使用。
进入OpenFlow实例视图 |
||
一个OpenFlow实例可以连接多个控制器,但仅允许与每个控制器建立一个主连接,一般用于控制消息的处理(下发流表项、获取数据、信息上报等),需要使用TCP/SSL保持可靠的连接。
进入OpenFlow实例视图 |
||
controller controller-id address { ip ip-address | ipv6 ipv6-address } [ port port-number ] [ ssl ssl-policy-name ] [ vrf vrf-name ] |
S12500最多可以支持和64个控制器分别建立主连接 |
一旦交换机与所有控制器断开连接,则交换机必须进入连接中断模式,模式分为两种:
· Secure模式:连接断开后,交换机根据流表项转发。不主动删除控制器下发的表项,而是等待表项超时后进行删除,一旦连接建立成功,未超时的表项依然存在。
· Standalone模式:连接断开后,交换机立即生成优先级为65536,出接口为Normal的流表项,数据匹配该流表项后进行普通转发。不主动删除控制器发的表项,而是等待表项超时后进行删除,一旦连接建立成功,未超时的表项依然存在。
如果交换机与控制器重新连接成功,则继续作为OpenFlow设备根据流表项进行转发。
进入OpenFlow实例视图 |
||
fail-open mode { secure | standalone } |
缺省情况下,OpenFlow实例建立时,缺省为Secure模式,且为该实例下发Table Miss表项(动作为drop) |
控制器和交换机都会发送Echo request/reply报文,用于验证连接是否正常。
连接检测定时器用来定义发送Echo request报文时间间隔,当超过三次Echo request报文发送并且没有收到Echo reply报文,则交换机与控制器的连接断开。
重连定时器用来定义OpenFlow实例与控制器断开连接后下次开始重新连接的时间。
进入OpenFlow实例视图 |
||
缺省情况下,发送Echo request报文的时间间隔为5秒 |
||
controller connect interval interval-value |
缺省情况下,OpenFlow实例与控制器重连尝试的时间间隔为60秒 |
在完成上述配置后,在任意视图下执行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 |
· 创建OpenFlow实例1,把VLAN 4092和4094映射到OpenFlow实例中1,并激活实例。
· 使用VLAN 1作为OpenFlow与控制器通信的VLAN。
· 配置OpenFlow实例1连接的控制器,用来控制Switch上的流量转发。
图1-7 OpenFlow配置组网图
# 创建VLAN 4092和4094。
[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-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
# 显示实例详细信息。
[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) VLAN匹配
在使用VLAN划分OpenFlow实例的情况下,对VLAN的匹配存在一定的限制。
表1-17 VLAN匹配项列表
匹配在OpenFlow实例VLAN内的所有报文 |
||
匹配无VLAN tag的报文,但是入接口的PVID必须是在OpenFlow实例内 |
||
-/有值 |
||
-/非0x1000的值 |
||
匹配有VLAN tag的报文,但是该VLAN tag必须在OpenFlow实例内 |
||
-/有值 |
根据VLAN+MASK进行匹配,前题是VLAN+MASK必须在OpenFlow实例内 |
|
对于协议报文,一旦相关的协议配置使能后,协议报文不会进入OpenFlow转发处理,仍然由相关协议进行处理,但是对于LLDP报文比较特殊,对于LLDP报文的使用限制请参见1.8.4 。
在Packet out消息中Output为Normal、Local、In port或To Controller时,入接口只能是设备上的物理接口或者逻辑接口,不能是OpenFlow保留口。
在Packet Out消息中如果同时存在报文ID和报文,OpenFlow Switch只会获取报文ID对应的缓存报文进行处理,忽略消息中携带的报文。
· 如果Packet Out消息中的报文没有VLAN tag,则OpenFlow Switch将入接口的PVID做为报文所在的VLAN进行转发处理。
· 如果入接口不是设备上的接口,且Output是设备上的接口,则使用出接口的PVID发送。
· 如果入接口不是设备上的接口,且Output是保留口Flood和All,请参见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接口发送一份。
对于Packet in消息中的报文:
· 上送时如果其VLAN tag与该报文入接口的PVID相同,那么该报文的VLAN tag会被删除。
· 上送时如果其VLAN tag与该报文入接口的PVID不同,那么该报文的VLAN tag不会被删除。
· 对于上送原因是No Match的报文支持缓存,缓存大小是1K个报文。
· 对于其它上送原因的报文不支持缓存,整个报文都会被上送,并且Cookie是全F。
OpenFlow网络可以通过LLDP发现拓扑,对于匹配LLDP报文存在如下限制:
· 设备上必须全局使能LLDP。
· LLDP报文匹配后上送Controller不受实例限制,只要收到报文的接口在OpenFlow实例内,并且实例内有匹配LLDP报文并上送Controller的表项,则LLDP报文就会在该实例上送Controller。
· Switch在激活后会默认生成Table Miss表项,其动作是Drop,默认表项不能够被Controller通过Modify的动作修改,不能被Controller通过Mulipart消息查询到,仅能由Controller通过Add进行添加Table Miss的动作进行修改。
· Table Miss表项仅能通过严格匹配进行修改和删除,在非严格匹配的情况下,即使匹配项是通配也不能够操作Table Miss表项。
· Table Miss表项被删除后,会生成默认的Table Miss表项,其动作是Drop。
· 在非严格匹配的情况下,不支持通过match域为通配修改所有普通流表项。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!