1.表
在OpenFlow1.1版本中,添加了组的概念,用于将多个端口作为组进行处理。相应的在OpenFlow交换机中,存在一个组表和多个流表。
1.1组表
组ID | 组类型 | 计数器 | 动作桶 |
---|
OpenFlow1.1中增加的组表概念,在后续版本中一直沿用,组是OpenFlow为数据包指定在多个流中执行相同操作集的高效方法,组标的结构如图:
组ID | 组类型 | 计数器 | 动作桶 |
---|
类型 | 实现 | 内容 |
---|---|---|
all | required | 执行组的所有行动桶 |
select | optional | 执行组内的一个行动桶动作,可用于多路径 |
indirect | required | 执行组内的一个确定的行动桶 |
fast failover | optional | 执行一个激活的行动桶 |
每一条OpenFlow组表记录称为组表项,每个组表项都包括:组ID,组类型,计数器和动作桶。通过组表,每个数据流可以被划分到相应的组中,动作指令的执行可以针对属于同一个组ID的所有数据包,适用于实现广播和多播,或者执行某些特定的操作集,且组定义了四种组类型,即:
类型 | 实现 | 内容 |
---|---|---|
all | required | 执行组的所有行动桶 |
select | optional | 执行组内的一个行动桶动作,可用于多路径 |
indirect | required | 执行组内的一个确定的行动桶 |
fast failover | optional | 执行一个激活的行动桶 |
1.2流表
在openflow1.0中,每个数据包只能匹配一个流表项,有时也只能实现在openflow交换机中设置一个流表。但从OpenFlow1.1开始,OpenFlow交换机可以设置多个流表并为一个数据包匹配多个流表项。对于多个流表,OpenFlow1.1将多流表处理为流水线,各个流表依次对每个数据包进行匹配。
1.2.1流表项
头字段域 | 计数器 | 行动 |
---|
在OpenFlow1.0中流表项的构成要素为:
头字段域 | 计数器 | 行动 |
---|
匹配字段 | 计数器 | 指令 |
---|
在OpenFlow1.1中流表项的构成要素为:
匹配字段 | 计数器 | 指令 |
---|
即将头字段域更名为匹配字段,用指令代替行动,但行动仍存在与协议中。
- 匹配字段
内容 | 说明 |
---|---|
Ingress port | 输入端口 |
Metadata | 元数据(新加字段) |
Ethernet source address | 以太网帧的发送源以太网地址 |
Ethernet destination address | 以太网帧的发送目的以太网地址 |
Ethernet type | 以太网的类型字段 |
VLAN ID | VLAN的ID |
VLAN priority | IEEE802.1Q的PCP |
MPLS label | MPLS的标签(新加字段) |
MPLS traffic class | MPLS的流量类别(新加字段) |
IP source address | IPV4的发送源地址 |
IP destination address | IPV4的发送目的地址 |
IP protocol/ARP opcode | IPV4头的协议字段或ARP头的操作字段 |
Tos | IPV4头的Tos字段 |
TCP/UDP/SCTP source port/ICMP type | TCP、UDP、SCTP的发送源端口号,ICMP的头类型 |
TCP/UDP/SCTP destination port/ICMP type | TCP、UDP、SCTP的发送目的端口号,ICMP的头代码 |
相比较OpenFlow1.0,1.1版本中的匹配字段中新添加了MPLS标签、MPLS流量、元数据3个字段。并且从OpenFlow1.1中,添加了SCTP(流控制传输协议)。SCTP使用了移动通信技术3GPP和LTE。
-
计数器
相对于OpenFlow1.0,计数器并未发生太大变化,主要还是进行对每个表查找的次数,经过端口的流量,流表项匹配的数据包的数量进行计数,方便流量的监控。
-
指令
指令 内容 Apply-Actions 不变更行动集,仅执行指定的行动列表 Clear-Actions 清除行动集中的所有行动 Write-Actions 将制定的多个行动合并到当前的行动集中已存在的进行覆盖,不存在的进行添加。 Write-Metadata 写入元数据中 Goto-Table Goto语句,移动到流水线后方连接的流表中 指令是对与流表项匹配的数据包所执行的命令,提供了执行行动、在之后批量执行的行动集中添加及删除行动、写入元数据等功能。是实现流水线处理的基础。
指令 内容 Apply-Actions 不变更行动集,仅执行指定的行动列表 Clear-Actions 清除行动集中的所有行动 Write-Actions 将制定的多个行动合并到当前的行动集中已存在的进行覆盖,不存在的进行添加。 Write-Metadata 写入元数据中 Goto-Table Goto语句,移动到流水线后方连接的流表中 -
动作 内容 Output 向指定端口转发 Drop 丢弃数据包 Set-Field Set-Queue 将数据包发送至队列 Push-Tag/Pop-Tag Group 处理与指定的组相关的数据包 Experimenter 实验人员使用的行动 行动
动作 内容 Output 向指定端口转发 Drop 丢弃数据包 Set-Field Set-Queue 将数据包发送至队列 Push-Tag/Pop-Tag Group 处理与指定的组相关的数据包 Experimenter 实验人员使用的行动
1.3流水线处理
数据包到达OpenFlow交换机后,在流表0中进行匹配
- 检索优先级最高的流表项
- 据此更新字段,行动集,元数据
- 将匹配字段和行动集发送给下一流表
之后根据需要在多个流表中进行匹配,并在各个流表中执行1-3步骤。