openflow交换机mac自学习是打开的吗

Openflow交换机的应用模式探讨
斯坦福大学研究人员当初提出Openflow时有两个初衷,一是因为需要进行创新性网络研究,希望把网络设备控制层功能从物理设备中分离出来,以便根据需要通过编程方式控制和修改网络设备的行为;二是希望构建一个全新的通用的网络数据转发平面,以应对未来网络发展的要求,Openflow引入的流表转发模式完全脱离了传统网络的L2/L3数据转发方式,通过统一的&流表匹配/执行动作&方式处理网络数据包的转发。
  ,通过OF-config协议可以对网络中openflow属性进行配置和调整,包括配置与控制器的连接参数,配置物理端口属性,配置端口队列属性,配置逻辑端口属性(如IP-GRE,
热门标签:16 OpenFlow命令参考
01-OpenFlow命令
1.1 OpenFlow配置命令
1.1.1 active instance
1.1.2 classification vlan
1.1.3 controller address
1.1.4 controller connect interval
1.1.5 controller echo-request interval
1.1.6 controller mode
1.1.7 datapath-id
1.1.8 description
1.1.9 display openflow controller
1.1.10 display openflow flow-table
1.1.11 display openflow group
1.1.12 display openflow instance
1.1.13 display openflow meter
1.1.14 display openflow summary
1.1.15 fail-open mode
1.1.16 flow-entry max-limit
1.1.17 flow-table
1.1.18 in-band management vlan
1.1.19 mac-ip dynamic-mac aware
1.1.20 mac-learning forbidden
1.1.21 openflow instance
1 OpenFlow
1.1& OpenFlow配置命令
命令用来激活OpenFlow实例。
【缺省情况】
实例配置完成后,需要进行激活才能生效。
OpenFlow实例会重新与控制器建立连接。
激活OpenFlow实例1。
[Sysname] openflow instance 1
[Sysname-of-inst-1] active instance
命令用来配置OpenFlow实例对应的VLAN。
命令用来取消配置。
实例对应的VLAN。
:VLAN ID,取值范围为1~4094。与VLAN掩码共同生效。
:VLAN掩码,取值范围为0~4095,缺省值为4095。
:松散模式,用来指定OpenFlow实例与对应的VLAN为松散模式。
为实际生效VLAN区间。mask允许不连续,为0的比特位表示忽略。生效VLAN区间,可通过display openflow instance查看。
参数后,仅当OpenFlow实例对应的VLAN与端口允许通过的VLAN存在交集时,该端口属于OpenFlow接口。
参数时,仅当OpenFlow实例配置的VLAN为端口允许通过的VLAN的子集时,该端口属于OpenFlow接口。
配置OpenFlow实例对应的VLAN为255,掩码为7。
[Sysname] openflow instance 1
[Sysname-of-inst-1] classification
vlan 255 mask 7
命令用来配置主连接。
命令用来取消配置。
【缺省情况】
:控制器ID,取值范围为0~63。
ip-address:控制器的IPv4地址。
ipv6-address:控制器的IPv6地址。
port-number:控制器建立连接使用的端口号,取值范围为1~65535。缺省值为6633。
ssl-policy-name:安全连接的客户端安全策略,用于控制器认证交换机,每个控制器连接配置独立的安全策略。ssl-policy-name为1~31个字符的字符串,不区分大小写。
:指定控制器所属的VPN。vrf-name表示MPLS L3VPN的VRF实例名称,为1~31个字符的字符串,区分大小写。
配置实例1的控制器10的IP地址为1.1.1.1,端口号为6666。
[Sysname] openflow instance 1
[Sysname-of-inst-1] controller 10
address ip 1.1.1.1 port 6666
1.1.4& controller
connect interval
命令用来恢复缺省情况。
interval-value
【缺省情况】
实例与控制器重连的时间间隔为60秒。
:连接控制器的间隔时间,取值范围为10~120,单位为秒。
配置OpenFlow实例1与控制器重连的时间间隔为10秒。
[Sysname] openflow instance 1
[Sysname-of-inst-1] controller
connect interval 10
命令用来设置OpenFlow实例发送Echo request报文的时间间隔。
命令用来恢复缺省情况。
【缺省情况】
实例发送Echo request报文的时间间隔为5秒。
:发送Echo request报文的时间间隔,取值范围为1~10,单位为秒。
配置OpenFlow实例1发送Echo request报文的时间间隔为10秒。
[Sysname] openflow instance 1
[Sysname-of-inst-1] controller
echo-request interval 10
controller mode
命令用来配置OpenFlow实例与控制器的连接模式。
命令用来恢复缺省情况。
【缺省情况】
:OpenFlow实例与控制器的连接模式为多连接模式。
:OpenFlow实例与控制器的连接模式为单连接模式。
Single时,OpenFlow实例仅与一个控制器建立连接,其它控制器作为备份,仅当连接断开后,OpenFlow实例连接下一个控制器,直到连接成功。
Multiple时,OpenFlow可以同时连接所有控制器,当一个或者多个控制器失效或者连接断开时,仍然能保证OpenFlow交换机正常工作。
配置实例1的控制器连接模式为Single。
[Sysname] openflow instance 1
[Sysname-of-inst-1] controller mode
1.1.7& datapath-id
命令用来配置OpenFlow实例的Datapath ID。
命令用来恢复缺省值。
【缺省情况】
实例的Datapath ID由实例ID和设备桥MAC组成,前16位为实例ID,后48位为设备桥MAC。
:OpenFlow实例的Datapath ID,取值为16进制格式,取值范围为1~0xFFFFFFFFFFFFFFFF。
配置OpenFlow实例1的Datapath ID为0x123456。
[Sysname] openflow instance 1
[Sysname-of-inst-1] datapath-id
1.1.8& description
命令用来配置OpenFlow实例的描述信息。
命令用来恢复缺省情况。
【缺省情况】
实例的描述信息。
:OpenFlow实例的描述信息,为1~255个字符的字符串,不区分大小写,必须以英文字母a~z或A~Z开头。
配置实例1的描述信息为test-desc。
[Sysname] openflow instance 1
[Sysname-of-inst-1]description
命令用来显示OpenFlow实例的控制器信息。
:OpenFlow实例号,取值范围为1~4094。
:控制器的ID号,取值范围为0~63。如果未指定本参数,显示该实例下所有控制器的信息。
显示OpenFlow实例10的控制器信息。
OpenFlow instance ID: 10
&Reconnect interval :
60&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&Echo&&&&&
interval : 5
&Controller
ID&&&&&&&&&& : 1
&Controller IP address &&:
192.168.49.49
&Controller
port&&&&&& &&: 6633
&Controller
role&&&&&& &&: Equal
type&&&&&&&&& &&: TCP
state&&&&&&&& &&: Established
sent&&&&&&&&& &&: 9
received&&&&& &&: 9
policy&&&&&&&&&&& &&:
表1-1 display openflow controller命令显示描述表
实例下对应控制器的IP地址
·&&&&&--:未连接,未配置角色
·&&&&&Equal:控制器的角色是Equal
·&&&&&Master:控制器的角色是Master
·&&&&&Slave:控制器的角色是Slave
·&&&&&TCP:使用TCP连接控制器
·&&&&&SSL:使用SSL连接控制器
·&&&&&Idle:未建立连接
·&&&&&Established:成功建立连接
连接的SSL策略的名称
1.1.10& display openflow flow-table
命令用来显示OpenFlow实例的流表信息。
:OpenFlow实例号。取值范围为1~4094。
:流表ID,取值范围为0~254。如果未指定本参数,将显示所有流表的信息。
显示OpenFlow实例10的所有流表信息。
Instance 10 flow table information:
Table 0 information:
&Table type: MAC-IP, flow entry
count: 1, total flow entry count: 2
MissRule (default) Flow entry
information:
&cookie: 0x0, priority: 0, hard
time: 0, idle time: 0, flags: reset_counts
&|no_pkt_counts|no_byte_counts,
byte count: --, packet count: --
Match information: any
Instruction information:
&Write actions:
Flow entry 1 information:
&cookie: 0x0, priority: 1, hard
time: 0, idle time: 0, flags: none,
&byte count: --, packet count:
Match information:
&Ethernet destination MAC
address: 01
&Ethernet destination MAC
address mask: ffff-ffff-ffff
&VLAN ID: 100, mask: 0xfff
Instruction information:
&Write actions:
& Output interface: XGE1/0/4
&Write metadata/mask:
0x0001/0xffffffffffffffff
&Goto table: 1
Table 1 information:
&Table type: Extensibility, flow
entry count: 2, total flow entry count: 2
MissRule Flow entry information:
&cookie: 0x0, priority: 0, hard
time: 0, idle time: 0, flags: none,
&byte count: --, packet count:
Match information: any
Instruction information:
&Write actions:
Flow entry 1 information:
&cookie: 0x0, priority: 0, hard
time: 0, idle time: 0, flags: flow_send_rem
&|check_overlap, byte count: --,
packet count: 1
Match information:
&Input interface: XGE1/0/3
&Ethernet source MAC address:
&Ethernet source MAC address
mask: ffff-ffff-ffff
Instruction information:
&Set meter: 100
&Apply actions:
& Output interface: XGE1/0/4
&Write actions:
& Output interface: Controller,
send length: 128 bytes
表1-2 display openflow flow-table命令显示描述表
·&&&&&MAC-IP:MAC-IP流表
·&&&&&Extensibility:Extensibility流表
代表不超时
代表不超时
·&&&&&flow_send_rem:发送流表项删除消息
·&&&&&check_overlap:检查流表项重复
·&&&&&reset_counts:重置流表项统计信息
·&&&&&no_pkt_counts:不统计报文计数
·&&&&&no_byte_counts:不统计字节计数
·&&&&&none:无标志位
实例内部的不同流表间传递信息
匹配规则信息
(Differentiated Services Code Point,区分服务编码点)值
头的ECN(Explicit Congestion
Notification,显式拥塞通知)值
或IPv6协议号
源地址/掩码
目的地址/掩码
源端口/掩码
目的端口/掩码
源端口/掩码
目的端口/掩码
(Stream Control Transmission Protocol,流控制传输协议)源端口/掩码
目的端口/掩码
的操作类型
源IPv4地址/掩码
目标IPv4地址/掩码
源MAC地址/掩码
目的MAC地址/掩码
源地址/掩码
目的地址/掩码
流标签/掩码
邻居发现协议报文的目的IP地址
邻居发现协议报文的源MAC地址
邻居发现协议的目的MAC地址
第一个头部的标签
第一个头部的TC(Traffic
Class,流量等级)
扩展头/掩码
接口为控制器时,指定上送报文的字节长度
表处理报文
,当报文被转发到特定端口时,队列ID通常被用于基本QoS
头的TTL域值
拷贝到紧接最外层
拷贝到最外层
(端口名称)
包含物理口和逻辑口(如聚合口)
命令用来显示OpenFlow实例的Group表信息
:OpenFlow实例号,取值范围为1~4094。
:Group表项ID。取值范围为0~。如果未指定本参数,将显示实例所有Group表项的信息。
表项被流表项引用,使OpenFlow设备支持额外的报文转发功能(如组播和广播)。每个Group表中含有多个动作桶(Action Buckets),匹配Group表项的报文可以直接执行动作桶中的动作。
Group表项,需要在控制器中配置Group表项后,下发到OpenFlow设备。
显示OpenFlow实例10的Group表信息。
Instance 10 Group Table Information:
&group count: 2
Group entry 103 information:
&type: All, byte count: 55116,
packet count: 401
&bucket1: action count 1, byte
count 55116, packet count 401
& watch port: any
& watch group: any
& Output interface: BAGG100
&bucket2: action count 1, byte
count --, packet count --
& watch port: any
& watch group: any
& Output interface: Controller,
send length: 128 bytes
&reference
detail:&&&&&&&&&
& ref count: 3&
& table 0,
& rule: 1, 2, 3
表1-6 display openflow group命令显示描述表
实例中包含的Group表项的总数
表的类型,
·&&&&&All:表示执行所有动作桶。通常用于组播或者广播
·&&&&&Select:表示选取一个动作桶来执行
·&&&&&Indirect:表示执行Group中定义的一个动作桶
·&&&&&Fast failover:表示执行第一个有效的动作桶
表中包含的动作桶
”表示不支持
”表示不支持
表中包含的出端口
Group被流表项引用的信息
表项的流表项的总数
表项的流表项所在的流表ID
表项的流表项ID列表
命令用来显示OpenFlow实例的详细信息。
:OpenFlow实例号,取值范围为1~4094。
显示OpenFlow实例的详细信息。
Instance 10 verbose information:
Configuration information:
&Description&& : test-desc
&Active status : active
&Inactive configuration:
&&Classification VLAN,
total VLANs(1)
& Flow table:
&& Table ID(type): 0(MAC-IP)
&& Table ID(type): 1(Extensibility)
&Active configuration:
&&Classification VLAN, loosen
mode, total VLANs(1)
& In-band management VLAN, total
&& empty VLAN
& Connect mode: multiple
& Mac-address learning: Enabled
& Flow table:
&& Table ID(type): 0(MAC-IP),
& Flow-entry max-limit: 65535
& Datapath ID:
Port information:
&Ten-GigabitEthernet1/0/3
Active channel information:
&Controller 1 IP address:
192.168.49.49& port: 6633
&Controller 2 IP address:
192.168.43.49& port: 6633
表1-7 display openflow instance命令显示描述表
实例的描述信息
实例的激活状态
实例的VLAN列表,VLAN总数以及loosen模式
列表及VLAN数量,显示为empty VLAN时,表示没有配置带内管理VLAN
实例与控制器的连接模式:
:OpenFlow实例与控制器的连接模式为多连接模式
:OpenFlow实例与控制器的连接模式为单连接模式
实例对应的VLAN是否禁止MAC地址学习:
·&&&&&Enabled,表示OpenFlow实例对应的VLAN允许MAC地址学习
,表示OpenFlow实例对应的VLAN禁止MAC地址学习
表的流表项上限
实例的Datapath ID
实例的端口
·&&&&&MAC-IP:MAC-IP类型流表
·&&&&&Extensibility:Extensibility类型流表
:& port:
实例建立连接的控制器的概要信息(该信息仅在OpenFlow实例与控制器建立连接时显示)
实例与控制器连接断开时的运行模式(该信息仅在OpenFlow实例与控制器断开连接时显示):
·&&&&&secure:表示OpenFlow实例与控制器的连接断开后,交换机根据流表项转发
·&&&&&standalone:表示OpenFlow实例与控制器的连接断开后,交换机正常转发
命令用来显示OpenFlow实例的Meter表项信息。
:OpenFlow实例号,取值范围为1~4094。
:Meter表项ID,取值范围为0~。如果未指定本参数,将显示实例所有Meter表项的信息。
显示OpenFlow实例10的Meter表项信息。
Meter flags: KBPS& -- Rate value
in kb/s, PKTPS -- Rate value in packet/sec
&&&&&&&&&&&&
BURST -- Do burst size,&&&&& STATS -- Collect
statistics
Instance 10 meter table information:
&meter entry count: 2
Meter entry 100 information:
&Meter flags: KBPS
&Band 1 information
&Type: drop, rate: 1024, burst
size: 65536
&Byte count: --, packet count: 0
&Referencedinformation:
& Count: 3
& Flow table: 0
&&Flow entry: 1, 2, 3
Meter entry 200 information:
&Meter flags: KBPS
&Band 1 information
&Type: drop, rate: 10240, burst
size: 655360
&Byte count: --, packet count:
&Referenced information:
& Count: 0
表1-8 display openflow meter命令显示描述表
表项的总数
表项的所携带的flags:
·&&&&&KBPS:速率值以kbps为单位
·&&&&&PKTPS:速率值以packet/sec(包/秒)为单位
·&&&&&BURST:帧大小
·&&&&&STATS:收集统计信息
表项包含的band
·&&&&&drop:丢弃数据包
·&&&&&dscp_remark:修改数据包IP头部的dscp
的字节统计计数,“--”表示不支持
的报文统计计数,“--”表示不支持
Meter表项被流表项引用的信息
表项的流表项的总个数
表项的流表项所在的流表ID
表项的流表项ID列表
1.1.14& display openflow summary
命令用来显示OpenFlow实例的概要信息,包括OpenFlow实例ID、激活状态、Datapath
ID等信息。
显示OpenFlow实例的概要信息。
Fail Open mode: Se -- secure mode, Sa
-- standalone mode
Reactive flags: Y -- Need active instance,
&&&&&&&&&&&&&&&
N -- Needn't active instance
Datapath-ID&&&&&&&&
Channel&&& Table num& Port num& Reactive
active&&& 0x1221&
Connected&&&&&&
deactive&&&&&&&&&&
-&&&&&&&&&&&&
-&&&&&&&&&& &-&&&&&&&&
4094& active&&&
0x00000ffe& Fail(Sa)&&&&&&&
表1-9 display openflow summary命令显示描述表
实例的激活状态:
·&&&&&active:表示该OpenFlow实例已经激活
·&&&&&deactive:表示该OpenFlow实例未激活
实例的Datapath ID。未激活该OpenFlow实例时,显示为“-”
实例与控制器建立的安全通道的状态:
·&&&&&connected:OpenFlow实例与控制器已经建立安全通道
·&&&&&Fail(Se):安全通道断开,OpenFlow实例处于Secure模式
·&&&&&Fail(Sa):连接通道断开,OpenFlow实例处于Standalone模式
·&&&&&未激活该OpenFlow实例时,显示为“-”
实例中的流表数目。未激活该OpenFlow实例时,显示为“-”
实例的接口数目。未激活该OpenFlow实例时,显示为“-”
实例是否需要重新激活:
·&&&&&Y:表示该OpenFlow实例需要重新激活
·&&&&&N:表示该OpenFlow实例无需重新激活
·&&&&&未激活该OpenFlow实例时,显示为“-”
命令用来配置OpenFlow实例与控制器连接中断时的运行模式。
命令用来恢复缺省情况。
【缺省情况】
实例建立时,缺省为Secure模式,且为该实例下发Table Miss表项(动作为drop)。
:Secure模式,连接断开后,交换机根据流表项转发。
:Standalone模式,连接断开后,交换机正常转发。
配置交换机与控制器连接中断时的运行模式为Standalone模式。
[Sysname] openflow instance 1
[Sysname-of-inst-1] fail-open mode
standalone
命令用来配置Extensibility表的流表项上限。
命令用来恢复缺省情况。
【缺省情况】
流表项的上限为65535。
:流表项上限值。取值范围为1~65535。
配置Extensibility表的流表项上限为256。
[Sysname] openflow instance 1
[Sysname-of-inst-1] flow-entry
max-limit 256
命令用来配置OpenFlow实例下的流表类型和流表ID。
命令用来恢复缺省情况。
实例包含了流表ID为0的Extensibility流表。
:Extensibility流表ID,取值范围为0~254。
:MAC-IP流表ID,取值范围为0~254。
实例使用的流表类型以及与之对应的流表ID。
表和Extensibility表的ID不能相同,且MAC-IP表的ID值必须小于Extensibility表的ID值。
配置OpenFlow实例1使用流表类型为MAC-IP表ID为0,Extensibility表ID为1。
[Sysname] openflow instance 1
[Sysname-of-inst-1] flow-table mac-ip
0 extensibility 1
命令用来配置带内管理VLAN。
命令用来恢复缺省情况。
:VLAN ID列表,表示方式为vlan-list = { vlan-id1 [ to
vlan-id2 ] }&&1-10&。其中,vlan-id1和vlan-id2为指定VLAN的编号,取值范围为1~4094,&&1-10&表示前面的参数最多可以重复输入10次。
必须是OpenFlow实例对应VLAN的子集。
在OpenFlow实例1中配置带内管理VLAN为VLAN10。
[Sysname] openflow instance 1
[Sysname-of-inst-1] in-band
management vlan 10
1.1.19& mac-ip dynamic-mac aware
命令用来配置支持动态MAC地址。
命令用来恢复缺省情况。
地址,即忽略控制器下发的此类消息。
MAC-IP流表情况下,决定是否支持控制器在查询或者删除流表项时包含动态MAC地址(动态MAC表项变化不需要上报控制器)。
配置实例1支持动态MAC地址。
[Sysname] openflow instance 1
[Sysname-of-inst-1] mac-ip
dynamic-mac aware
命令用来配置在OpenFlow实例对应的VLAN禁止MAC地址学习。
命令用来恢复缺省情况
实例对应的VLAN允许MAC地址学习。
配置OpenFlow实例1对应的VLAN禁止MAC地址学习。
[Sysname] openflow instance 1
[Sysname-of-inst-1] mac-learning
1.1.21& openflow instance
命令用来创建OpenFlow实例,并进入OpenFlow实例视图。
命令用来删除指定的OpenFlow实例。
:OpenFlow实例号,取值范围为1~4094。
创建OpenFlow实例1,并进入OpenFlow实例视图。
[Sysname] openflow instance 1
[Sysname-of-inst-1]
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。 H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!
杭州华三通信技术有限公司。保留一切权利。一、openflow用来解决什么问题?
1.首先简单介绍一下什么是SDN,传统的网络是每个节点自己计算路由;
& &SDN是集中控制路由。在一个数据中心的网络中,只有一个控制器,下面可以连接多个交换机。控制器集中计算好路由后,将流表下发给交换机,交 & &换机根据流表进行转发。
& &跑在最上层是用户的APP(相当于计算机架构的应用软件),下一层是SDN控制层面(相当于操作系统),给APP提供接口,并负责集中 & &计算并控制所有 & &的路由;
& &最下面一层是进行转发的网络设备,控制器将流表下发给交换机,交换机根据流表进行转发。
2.openflow规定了控制器与交换机之间进行交互的协议。
二、openflow的机制是什么?
1.openflow交换机的包处理流程如下:
& &每个交换机都有一系列的表,规定了哪种报文头的报文,相应动作是什么,例如:
上图的就是流表类的一个实例,规定了目的IP为10.1.1.1的类型为0X800的报文进行某种动作。
& 收到一个报文,解析报文头中的信息,根据报文头(中的12元组)进行流表的匹配,匹配到了则进行相应操作。
& 通常action list中可以有转发、丢弃等动作,如果报文匹配到了流表,但action list为空,openflow规定默认丢弃报文;
& 但如果报文匹配不到流表,则会发往controller。
2.交换机与控制器的交互:
& &交换机与控制器建立TCP连接后,交换过hello报文后就可以进行通信了,通信内容有比如:
& &获取/设置配置信息,报文上送/发送,流表修改,端口状态获取/设置,错误信息等等。
3.控制器是如何获得所有交换机的组网情况的?
& &通过LLD报文。控制器与交换机建立连接,并获知该交换机的所有端口情况后,控制器往该交换机的所有端口都发送一个LLD报 & & & &文,对端连接的交换机收到该LLD报文后无法识别,上送给控制器,控制器就知道两个交换机是通过哪个端口连接的了。
4.控制器是如何往交换机中安装转发表项,并将数据正确转发的呢?
& &举个HostA与HostB相互ping同的例子:
& &HostA -- SwtA-- SwtB -- HostB
& &hostA要给HostB发送ICMP报文,首先需要发送ARP查询B的MAC地址。
& &SwtA收到A发送的ARP查询,通过Packet-in发送给控制器,控制器学习HostA地址,并将HostA的ARP查询报文发送给所有的边缘 & & & &Swt,边缘Swt对 & &边缘链路转发A的ARP查询。
& &HostB收到ARP查询后,也会回复ARP应答,同样的swtB将ARP应答发送给控制器,控制器学习B的MAC。
& &控制器将一一通知最短路径中的交换机安装转发表项,比如从端口1收到目的地址为MACB的报文,发往端口2。
& &交换机安装好表项后,ICMP报文就能按照转发表转发了。
以上是本人对openflow粗浅的了解,请高手多多指教:)
阅读(...) 评论()转载地址:/36.html
所谓流表,其实可被视作是OpenFlow对网络设备的数据转发功能的一种抽象。在传统网络设备中,交换机和路由器的数据转发需要依赖设备中保存的二层MAC地址转发表或者三层IP地址路由表,而OpenFlow交换机中使用的流表也是如此,不过在它的表项中整合了网络中各个层次的网络配置信息,从而在进行数据转发时可以使用更丰富的规则。流表中每个表项的结构如图2-3所示。
图2-3& OpenFlow流表项结构
如图2-3所示,OpenFlow流表的每个流表项都由3部分组成:用于数据包匹配的包头域(Header Fields),用于统计匹配数据包个数的计数器(Counters),用于展示匹配的数据包如何处理的动作(Actions)。
包头域:OpenFlow流表的包头域(OpenFlow v1.1之后被称作匹配域),用于对交换机接收到的数据包的包头内容进行匹配。在OpenFlow v1.0中,流表的包头域中包括了12个元组(Tuple),相关内容如图2-4所示。
图2-4& OpenFlow流表项包头域
如图2-4所示,包头域中用于和交换机接收到的数据包进行匹配的元组涵盖了ISO网络模型中第二至第四层的网络配置信息。每一个元组中的数值可以是一个确定的值或者是“ANY”以支持对任意值的匹配。另外,如果交换机能够在IP地址相关元组上支持子网掩码的话,将有助于实现更精确的匹配。
计数器:OpenFlow流表的计数器可以针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护,用于统计数据流量的相关信息。例如:针对每张流表,统计当前活动的表项数、数据包查询次数、数据包匹配次数等;针对每个数据流,统计接收到的数据包数、字节数、数据流持续时间等;针对每个设备端口,除统计接收到的数据包数、发送数据包数、接收字节数、发送字节数等指标之外,还可以对各种错误发生的次数进行统计;针对每个队列,统计发送的数据包数和字节数,还有发送时的溢出(Overrun)错误次数等。
动作:OpenFlow流表的动作用于指示交换机在收到匹配的数据包后应该如何对其进行处理。与传统交换机转发表只需要指明数据包的转发出端口不同,OpenFlow交换机因为缺少控制平面的能力,所以对匹配数据包的处理不仅仅是简单的转发操作,而需要用动作来详细说明交换机将要对数据包所做的处理。
OpenFlow交换机的每个流表项可以对应有零至多个动作,如果没有定义转发动作,那么与流表项包头域匹配的数据包将被默认丢弃。统一流表项中的多个动作的执行可以具有优先级,但是在数据包的发送上并不保证其顺序。另外,如果流表项中出现有OpenFlow交换机不支持的参数值,交换机将向控制器返回相应的出错信息。
动作分为必备动作(Required Actions)和可选动作(Optional Actions)两种类型。其中,必备动作是需要由所有的OpenFlow交换机默认支持的,而可选动作则需要由交换机告知控制器它所能支持的动作种类。OpenFlow流表动作的列表如表2-1所示。
表2-1 &OpenFlow流表动作列表
转发(Forward)
交换机必须支持将数据包转发给设备的物理端口及如下的一个或多个虚拟端口
ALL:转发给所有出端口,但不包括入端口
CONTROLLER:封装数据包并转发给控制器
LOCAL:转发给本地的网络栈
TABLE:对packet_out消息执行流表的动作
IN_PORT:从入端口发出
丢弃(Drop)
对没有明确指明处理动作的流表项,交换机将会对与其所匹配的所有数据包进行默认的丢弃处理
转发(Forward)
交换机可选支持将数据包转发给如下的虚拟端口
NORMAL:利用交换机所能支持的传统转发机制(例如二层的MAC、VLAN信息或者三层的IP信息)处理数据包
FLOOD:遵照最小生成树从设备出端口洪泛发出,但不包括入端口
排队(Enqueue)
交换机将数据包转发到某个出端口对应的转发队列中,便于提供QoS支持
修改域(Modify-Field)
交换机修改数据包的包头内容,具体可以包括:
— 设置VLAN ID、VLAN优先级,剥离VLAN头
— 修改源MAC地址、目的MAC地址
— 修改源IPv4地址、目的IPv4地址、ToS位
— 修改源TCP/IP端口、目的TCP/IP端口
&根据交换机的应用场景及其所能够支持的流表动作类型,OpenFlow交换机可以被分为“OpenFlow专用交换机(OpenFlow-only)”和“OpenFlow使能交换机(OpenFlow-enabled,在OpenFlow v1.1之后被称作OpenFlow-hybrid)”。其中,前者只支持OpenFlow协议,而后者则是考虑到了OpenFlow交换机与传统交换机混合时可能遇到的协议栈不兼容问题,能同时运行OpenFlow协议和传统的二层/三层协议栈。因此,后者可以支持OpenFlow可选转发动作中的NORMAL动作。
OpenFlow在接收到网络数据包后,对其开展的处理流程如图2-5所示。
图2-5& OpenFlow中的数据包处理流程
如图2-5所示,流程中对802.1d协议的处理是流程中的可选步骤(在OpenFlow v1.1之后已删除)。当OpenFlow交换机接收到一个数据包时,将按照优先级依次匹配其本地保存的流表中的表项,并以发生具有最高优先级的匹配表项作为匹配结果,并根据相应的动作对数据包进行操作。同时,一旦匹配成功,对应的计数器将更新;而如果没能找到匹配的表项,则将数据包转发给控制器。
OpenFlow交换机对数据包头的解析和匹配过程的细节操作如图2-6所示。
如图2-6所示,交换机中每一个表项的匹配首先按照接收到数据包的物理端口对入端口进行匹配,然后按照二层数据包头进行比较。如果以太网类型为0x8100,即数据包是VLAN包,则继续查询VLAN ID和PCP域。如果以太网类型为0x0806,则为ARP包,继续查询源IP地址和目的IP地址。如果以太网类型为0x0800,即为IP包,则继续查询IP包头的相关域。如果IP包是TCP/UDP包,则还需继续查询传输层端口。如果IP包是ICMP包,则继续查询ICMP包中的Type和Code。对于分段数据包的后续包,则将传输层端口设为0后继续查询。
图2-6& OpenFlow交换机中的数据包头解析和匹配流程
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1647次
排名:千里之外
转载:10篇}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信