openflow初学者入门笔记一(openflow 1.0 and openflow 1.3)

本文进行讨论的是openflow 1.0openflow 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.
Header Fields(包头域)的主要内容:  


包头域主要是不在分层
简单的说,就是除了进接口,传统2层到4层的寻址信息都出现在包头域中(MACIPPORT

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版本)

 openflow初学者入门笔记一(openflow 1.0 and openflow 1.3)_第1张图片

注释:1.1版本中引入了多级流表的概念

      流表匹配(table 0------->table n):

        匹配到:执行相应动作

        未匹配到:通过安全通道交付给控制器处理

 

 

Openflow1.3

1.流表项:


 
   匹配域                          优先级                  计数器                     指令                      超出时间              附属属性

    openflow使用多级流表,每张流表有独立的序号,从序号最小的流表开始匹配,每张流表由独立的处理和动作。

2.匹配域Match Fields是之前1.0的拓展,匹配的内容除了24层的寻址信息(MACIPPORT),多了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.流表匹配

 openflow初学者入门笔记一(openflow 1.0 and openflow 1.3)_第2张图片

注释:匹配到相应的流表后(table 0------>table n):

          1.更新计数器

          2.执行指令(更新行动集、更新匹配域、更新元数据)

      未匹配到table

           查看是否存在table-miss,没有则丢弃流表

       (table-miss 表项指定在流表中如何处 理与其他流表项未匹配的数据包。比如数据包发送到控制器,丢弃数据包或直接 将包扔到后续的表。)

你可能感兴趣的:(open,flow,sdn,OpenFlow入门,SDN入门)