1.OpenFlow 1.0
1.1流表
在OpenFlow 1.0中,OpenFlow交换机包含了一个以上的流表,每个流表包含了多个流表项。即
流表项(多个)-->流表(一个以上)-->OpenFlow交换机
用图表表示为
头字段 | 计数器 | 行动 |
---|---|---|
头字段内容 | 计数器内容 | 行动名称 |
...... | ..... | ..... |
以上三项在之后会详细介绍,且流表项的三个要素在之后的版本更迭中会出现变化。
1.2流表项
流表项主要由3部分构成,即
- 头字段
- 计数器
- 行动
1.2.1 头字段
头字段主要用于与数据包进行匹配,且在openflow1.0中,头字段中包含了L1至L4层之间各层的内容。其中头字段中主要要素如下表所示:
| ingress port | Ethernet source address | Ethernet destiation address|Ethernet type | VLAN id | VLAN Priority | IP source address | IP destination address | IP protocol | ToS | Transport source port/ICMP |type Transport destination prot/ICMP code |
主要内容及其含义如下:
内容 | 说明 |
---|---|
ingress port | 输入端口 |
Ethernet source address | 源以太网地址 |
Ethernet destination addresss | 目标以太网地址 |
Ethernet type | 以太网帧类型字段 |
VLAN ID | VLAN标签的ID |
VLAN Priority | 802.1Q的PCP |
IP source address | IPv4头中的发送源地址 |
IP destination address | IPv4头中目的地址 |
IP protocol | IPv4头中的协议字段 |
ToS | IPv4中的TOS字段 |
Transport source port/ICMP | TCP或UDP时为TCP/UDP的发送源端口号,ICMP时为ICMP类型 |
type Transport destination prot/ICMP code | TCP或UDP时为TCP/UDP的发送目的端口号,ICMP时为ICMP代码 |
-
流表的匹配
OpenFlow中可以存在多个流表,但匹配时必须从流表0开始匹配,当流表0中不存在与头字段相匹配的流表项时,并且其他流表存在时,则去下一个流表中进行匹配。(openflow中并未对下一流表进行说明)
注意:在openflow1.0中,只能与单一流表项匹配,即使可能与多个流表项匹配,最终匹配的流表项也只有一个,但在之后的版本更迭后,导入了可与多个流表项匹配的流水线处理
-
头字段解析
在openflow1.0中,头字段解析具有优先顺序,但在之后的版本中废除了该规范,此处不再赘述。
1.2.2 计数器
主要对每个表查找的次数,经过端口的流量,流表项匹配的数据包的数量进行计数,方便流量的监控。主要包括4中计数器:
- 流表的PerTable计数器
- 端口的Per Port计数器
- 流表项的Per Flow计数器
- 队列的Per Queue计数器
1.2.3 行动
- 必备行动
-
Forward
动作名称 说明 - Forward的基本功能,向指定端口发送数据包 ALL 向除接收端口之外的所有物理端口发送数据包 CONTROLLER 将OpenFlow的数据包封装,发送至控制器 LOCAL 将数据包发送至交换机本地的网络栈 TABLE 执行流表中的行动(仅在Pack-out消息中使用) IN_PORT 从数据包输入端口发出数据 Forward行动中必备动作
动作名称 说明 - Forward的基本功能,向指定端口发送数据包 ALL 向除接收端口之外的所有物理端口发送数据包 CONTROLLER 将OpenFlow的数据包封装,发送至控制器 LOCAL 将数据包发送至交换机本地的网络栈 TABLE 执行流表中的行动(仅在Pack-out消息中使用) IN_PORT 从数据包输入端口发出数据 Forward行动中的可选动作
动作名称 说明 NORMAL 根据传统的L2或L3的动作完成交换机动作 FLOOD 沿最小生成树发送数据包,不包括接收数据包的物理端口
-
Drop
Drop行动能丢弃与未指定Forward行动的流表项相匹配的数据包。
- 可选行动
-
Enqueue行动
将数据包发送至队列
注意:在openflow1.1中,Enqueue行动改名为Set—Queue行动
-
Modify-Field行动
Modify-Field行动主要包括
行动名称 | 内容 |
---|---|
Set VLAN ID | 存在VLAN ID时,使用指定的VLAN ID 进行覆盖。不存在时按照优先级0进行添加 |
Set VLAN priority | 存在VLAN ID时,使用指定的数值 进行覆盖。不存在时按照指定优先级进行添加 |
Strip VLAN header | 存在VLAN头时将其删除 |
Modify Ethernet source MACaddress | 使用新的数值覆盖以太网并发送以太网源地址 |
Modify Ethernet destination MACaddress | 使用新的数值覆盖以太网并发送以太网目的地址 |
Modify IPV4 source address | 使用新的IP覆盖源IP |
Modify IPV4 destination address | 使用新的IP覆盖目的IP |
Modify IPV4 ToS bits | 使用新数值覆盖TOS |
Modify transport source port | 覆盖TCP/UDP源端口 |
Modify transport destination port | 覆盖TCP/UDP目的端口 |
注意:在openflow1.1中,Modify-Field更名为Set-Field