openflow协议相关
OpenFlow交换机是一个由远程控制器通过OpenFlow协议控制的交换机,其组件如下:
OpenFlow Pipeline处理决定了报文在各个Flow Table中如何相互作用,报文的pipeline处理流程如下:
报文进入一个Flow Table后:
1. 找到优先级最高的flow entry
2. 施行指示:
i. 修改报文&更新匹配域(施行动作指示)
ii. 更新action set(清空动作或者将动作写入action set)
iii. 更新metadata
3. 将匹配域以及action set送入下一个flow table
Flow entry组件如下:
march fields:包括ingress port,pacekt headers,metadata
instructions:主要与actions与pipeline处理相关,actions包括包转发,包修改以及将包送入group table处理
报文进入pipeline流程首先进入flow table[0],然后根据指示进行处理,但是报文不能进如比自己所在flow table数小的flow table,即报文在flow table中传递是单向的,报文在每个flow table中匹配且仅匹配一次优先级最高的flow entry,若在该flow table中任意一条flow entry都无法匹配报文,那么将进入table miss流程,table miss流程主要包括:将报文送至控制器,丢包,或者将报文送入后面的flow table。
flow entry的删除方式有两种:请求控制器主动删除,或者通过流超时机制idle_timeout&hard_timeout
前面讲到Group Table与Flow Table联系是通过flow entry中instructions字段中的actions,group可处理flooding,mutlipath,fast reroute,link aggregation
Group entry组件如下:
Group Type包括:
all:执行组中所有的“桶”(buckets)。使用这个组用来多播或者广播转发。
select:执行组中的一个“桶”。基于一个“switch-computed selection”算法(例如,对用户注册的一些“元祖(tuple)”进行hash或者是简单的“轮询”),数据包被“组”中唯一的一个桶处理。
indirect:执行组中定义的“桶”。允许多个“流表项”或“组”指向一个共同的组标识符,支持快速高效的收敛。(例如,IP下一跳转发)。
fast failover:执行第一个存活的(live)“桶”。
action buckets:是一个有序的action buckets,每一个bucket内的actions执行顺序由action set指定,每一个action bucket是一个action set及其参数的组合
Action Set是与每个数据包相关联的,初始时是一个空集合;一个Flow Entry可以通过Write-Actions或者Clear-Actions指令来修改Action Set,这个Action Set会在不同的Flow Table之间进行传递,当一个Flow Entry的Instructions里不包含Goto-Table指令时,那么整个Pipeline Processing就会在此Flow Entry停止,然后开始执行与该数据包关联的Action Set里所有的action(s)。