3-OpenFlow通用抽象-下
OpenFlow通用抽象(下)
Instructions - 流表项指令
分为两类
- 修改或操作动作集(Action Set)
- 修改多级流表处理. (表之间的跳转)
指令和动作的区别
- 指令(Instruction): 处理流程控制. 可以操作动作集.
- 动作(Action):对数据包的处理.
流表项指令
Aciton - 动作
Action Set
- 每个包进入pipeline端口会分配一个Action Set. 初始这个集合为空.
- 通过匹配后, 指令会在这个集合中添加一系列动作.
- 最后,包离开流水线的时候, 会执行这个动作集合.
- 如果不定义Action List, 执行顺序是默认顺序, 即从上往下执行.
- 如果定义了, Action List, 执行顺序就是按照Action List来.
Table Miss
能匹配任意数据包, 优先级最低.
- 所以, 在包与所有其他流表项都无法匹配时, 才会与Table Miss
- 在Table Miss 中的指令集中可以自定义一下操作, 如把数据包交给控制器.
计数器
Counter
- 计数的, 比如该流表项匹配了多少数据包, 字节数, 等等.
失效时间-TimeOut
- 在这个timeout 这个时间内没有数据包匹配到这个流表项时. 会采取一定的策略:
- 删除这个流表项
- 或者降低这个流表项的优先级
- 其他
- 因为这个流表项很可能已经多余了.
Flow Table 详细处理流程
数据包先进入流表端口0
- 数据包进入流表端口
- 抽取包头域, 匹配查找, 搜索优先级最高的匹配表项
- 执行相应的指令, 有很多种:
- 直接对包执行动作
- 不直接执行, 而是添加Action Set
- 流表间的跳转
metadata
还有对Metadata的处理
- 在流表0的Metadata 只包含一个输入端口信息
- metadata也可以和包头组成一个匹配域与白头进行匹配查找
- 如果有goto table 指令, 会将对应的metadata传递给相应的表
Group Table - 组表
- 定义一组端口去做特定操作. 比如组播, 负载均衡等等.
- 组表项:
- 组表项ID. 32位无符号整数
- 组表项类型: 定义了一组对端口的操作.
- 计数器: 记录组表项处理的报文数目
- 指令: 动作桶
组表项类型
Meter Table - 计量表
- 计量表项:
- 计量带:
- 可选类型: