数据平面是执行网络数据包处理的实体. 网络可编程能力取决于数据平面的可编程能力
4.2 通用可编程转发模型
传统的路由器都是协议相关
openflow将数据转发处理抽象成通用的match-action模型
特征:
- 转发行为由控制平面决定
- 由基础转发原语组成
- 高性能/低功耗
- 避免厂商锁定
4.2.1 通用硬件模型
处理流程: 从某个端口进去->协议解析模块完成解析->交给对应的流表->匹配到了流表的某一项->用这个规则去处理//(当没有匹配成功)->丢弃/交给控制器
控制平面的三种指令:
匹配域
和输入端口,包头标识域,metadata比较
instrction
指定flow中数据包的跳转动作,执行操作指令集的操作
计数器
统计各种细信息
优先级
好多匹配成功的表,先执行谁?
失效时间
超过了固定生存时间/一段时间内没有匹配到->流表项的内容就被清空
组表
由多个组表项组成
group Idetifier
唯一标识这个表项
Group Type
-
全选择类型(All)
执行所有的动作集的动作,实现组播和广播功能 -
选择类型(Select)
只执行一个动作集,如果这个动作集选择的端口被物理断开,那么就转发给其他的可选择端口,而不是丢弃(减小的网络故障的可能) -
间接类型
只支持一个动作集,快速高效汇聚简单 -
快速恢复类型
只执行第一个激活的动作集,让转发模型自己调整,不要每次都请求控制器(多用于容灾备份场合)
Meter 表
实现了测量的功能 控制盒测量某个flow数据包的传输速率
Meter Band
每个Meter Band指定一个网络数据流的传输速率阈值
BandType定义了超出阈值的处理方式:丢弃或者修改DSCP的Remark(实现了一个简单的DiffServ)
接下来讨论另一种抽象模型:计数器
计数器广泛存在于流表,流表项,端口,队列,Group,Group Bucket,Meter 和计量带中,按照纳秒进行高精度统计
是状态信息表在openflow中的具体实现
另一种抽象模型:端口
-
物理端口和真实端口一一对应
-
逻辑端口是一种抽象概念
-
保留端口,如下:
4.2.2 通用处理指令
三部分: 网络处理控制指令Instruction; 网络数据操作指令Actions; 专用网络处理指令
网络处理控制指令
对flow数据包的操作指令集写入,应用,删除*(做一个新的流表项)*
或者指令flow数据包在多个表中跳转
每个流表项可以含有多个控制指令,组合成一个指令集和
操作指令
对数据包执行操作丢弃,赋值,转发,修改
专用指令
代表:Table-miss表:最低优先级