本文进行讨论的是openflow 1.0和openflow 1.3的基本知识
Overview:
Openflow 1.0:
安全通道+单张流表+ipv4
Openflow 1.3:
安全通道+多级流表(流水线pipeline)+组表+测量表+ipv6+.....
流(flow)
1.流由管理员定义,根据不同的流执行不同的策略
2.同一时间内,经过同一网络并且具有相同属性根据不同情况可以不同,例如我们可以规定访问同一个IP为一个流,也可以规定同一源目IP的数据为一个流或者同一个协议为一个流
3.所有数据都是以流为单位进行处理的。
流表(flow table)
1.流表最常用的动作:forward
discard(drop)
Next table
2.流表就是交换机里的一张转发表,类似交换机的MAC表和路由器的路由表。
3.每一个流表项都有各种动作
4.流表由一条条的流表项(路由条目)组成。
5.Openflow包含多个流表
6.流表由controller下发
流表项(flow entry):
Of1.0:Header Fields(包头域)+Counters+Actions
Of1.3:Match Fields(匹配字段)+Priority+Counters+Instructions+Timeouts+Cookie
Openflow1.0:
1.流表项:
包头域主要是不在分层简单的说,就是除了进接口,传统2层到4层的寻址信息都出现在包头域中(MAC,IP,PORT)
3.计数器Counters主要对每张表,每个端口,每个流等进行计数,方便流量监管(例如经过这个端口有多少流量?匹配这个流的数据包有多少了、这张表查找了多少次?)主要是将流量可视化
4.动作Actions即是对匹配到的流进行处理,传统网络中要不转发要不丢弃,没有第三种选择,openflow1.0规定了必备动作(Require Action)和可选动作(Optional Actions)
5.必备动作-----转发(Forward)
ALL 转发到所有出口(不包括入口)
CONTROLLER 封装并转发给控制器
LOCAL 转发给本地网络栈
TABLE 对要发出的包执行流表中的动作
IN_PORT 从入口发出
必备动作---丢弃(Dorp)
没有明确指明处理行动表项的,所匹配的所有分组默认丢弃
6.可选动作---转发
NORMAL 按照传统交换机的2层或者3层进行转发处理
FLOOD 通过最小生成树从出口泛洪发出,注意不包括入口
可选动作---入队(Enqueue)
将包转发到绑定到某个端口的队列中
可选动作----修改域(Modify-field)
修改包头内容
7 .Openflow与传统网络最大的区别:openflow可以对数据包头部进行修改
8.流表匹配(1.1版本):
注释:1.1版本中引入了多级流表的概念
流表匹配(table 0------->table n):
匹配到:执行相应动作
未匹配到:通过安全通道交付给控制器处理
Openflow1.3
1.流表项:
openflow使用多级流表,每张流表有独立的序号,从序号最小的流表开始匹配,每张流表由独立的处理和动作。
2.匹配域Match Fields是之前1.0的拓展,匹配的内容除了2到4层的寻址信息(MAC,IP,PORT),多了MPLS(城域网),IPV6,PBB,Tunnel ID等支持。1.0能匹配12个信息,1.3能匹配39个信息
3.优先级Priority用于标志流表匹配的优先顺序,优先顺序越高越早匹配,默认优先级为0
4.计数器Counters主要对每张表,每个端口,每个流等进行计数,方便流量监管,在原有1.0的基础上,加入了对每一个组,每一个动作集(队列)的计数
5.超时时间Timeout用于标志该流表项老化的时间,超过了时间限制就删除,节省了内存资源
6.附属信息Cookie由控制器选择的不透明数据值。控制器用来过滤流统计数据,流改变和流删除,但处理数据包时不能使用
7.指令Instructions:
Require Instructions:
Write-Actions action(s):将制定的行动添加到正在运行的行动集中
Goto-Table next-table-id:指定流水线处理进程中的下一张表中的ID(流水线pipeline定义:多级流表的匹配)
Apply-Actions action(s):立即执行指定的行动,而不改变指令集(。这个指令经常用来修改数据包,在两个表之间或者执行同类型的多个行动的时候)
Optional Instructions:
Merter merter id:直接将计流量包丢弃
Clear-Actions:在行动集中立刻清楚所有的动作
Write-Meterdata meterdata/mask:在元数据区域纪录元数据
动作Action:
Require Action:
Outport:报文输出到指定端口
Drop:丢弃
Group:用组表处理报文
Optional Action:
Set-Queue:设置报文的队列ID,为了QoS的需要
Push-Tag/Pop-Tag
Set-Field:设置报文包头的类型和和修改包头的值
Change-TTL:修改TTL的值
动作执行的顺序(动作集Action Set):
1. copy TTL inwards: apply copy TTL inward actions to the packet
2. pop: apply all tag pop actions to the packet
3. push-MPLS: apply MPLS tag push action to the packet
4. push-PBB: apply PBB tag push action to the packet
5. push-VLAN: apply VLAN tag push action to the packet
6. copy TTL outwards: apply copy TTL outwards action to the packet
7. decrement TTL: apply decrement TTL action to the packet
8. set: apply all set-field actions to the packet
9. qos: apply all QoS actions, such as set queue to the packet
10. group: 如果指定了组行动,那么按照这个序列中的顺序执行组行动存储段里的行动。
11. output: 如果没有指定组行动,报文就会按照 output 行动中指定的端口转发。
Output 行动最后执行。如果组行动和输出行动均存在,那么组行动优先级高。如果两者均 不存在,那么报文被丢弃。
一个流表项可以使用 Write-Action 指令或者 Clear-Action指令修改行动集。
行动集在表间被累加。
当一个表项的指令集没有包含 Goto-Table 指令时,流水线处理就停止了,然后报文的行动集就被执行。
行动集包含所有的行动,无论他们以什么顺序加入到行动集中,行动的顺序均按照下列顺序执行。
如果行动集包含组行动,那么组行动存储段中的行动也按照下列顺序执行。当然, 交换机也可以支持通过Apply-Actions指令修改行动执行顺序。
8.流表匹配:
注释:匹配到相应的流表后(table 0------>table n):
1.更新计数器
2.执行指令(更新行动集、更新匹配域、更新元数据)
未匹配到table:
查看是否存在table-miss,没有则丢弃流表
(table-miss 表项指定在流表中如何处 理与其他流表项未匹配的数据包。比如数据包发送到控制器,丢弃数据包或直接 将包扔到后续的表。)