Openflow协议和SDN控制器工作流程举例

以具体的例子描述OpenFlow交换机在工作时,收到一个未知数据包后与控制器交互的过程。网络拓扑如图所示;若主机1需要与主机2进行通信,需要进行如下五个步骤:

(1) 主机1向OpenFlow交换机1发送数据包;
(2) OpenFlow交换机1查询流表,无法找到与数据流相匹配的转发规则;将来自主机1的数据包封装在Packet-In消息中上发给控制器;
(3) 控制器收到Packet-In消息后,根据使用的路由算法,计算得到该数据流的转发策略,并通过Packet-Out消息下发相应流规则给OpenFlow交换机1和2;
(4) OpenFlow交换机1执行控制器下发的转发策略,按照策略将数据包转发给交换机2;
(5) OpenFlow交换机2查询流表,若存在与数据流匹配的流规则(即刚刚安装的流规则还未过期),则按照流规则的规则进行转发;否则执行步骤(2)-(4);最终将来自主机1的数据包转发给主机2。


从上面OpenFlow交换机转发数据包的过程中,可以看出,对于未知数据包,交换机会将其上发给控制器,由控制器根据自身的策略制定转发规则。若该数据流从未在网络中出现过,则对于转发路径中的所有交换机都需要与控制器进行通信来获取转发所需的流规则。

在以上步骤中,Packet-In消息和Packet-Out消息起到了重要作用。在OpenFlow协中,Packet-In消息的功能是将到达OpenFlow交换机的数据包发送给OpenFlow控制器。根据OpenFlow协议,有两种情况可能在网络中产生Packet-In消息。第一种是数据流与流表中的所有匹配规则都不一致;另一种是匹配的流表规则执行的行为是发送到OpenFlow控制器。OpenFlow交换机将数据包发送到控制器时,可以选择缓存或者不缓存数据包两种方式。

 

SDN控制器的工作流程如下:

20150302SDN控制器的工作流程

 

1)控制器与交换机建立ofchannel通道,控制器通过ofchannel控制和管理交换机。

2)当交换机收到一个数据包且流表中没有匹配条目,交换机会将数据包封装在packet_in消息发送给控制器,此时数据包会缓存在交换机中等待处理。

3)控制器收到packet_in消息后,可以发送flow_mod消息向交换机写一个流表项,并且将flow_mod消息中buffer_id字段设置为packet_in消息中的buffer_id值。从而控制器向交换机写入了一条与数据包相关的流表项,并且指定该数据包按照该流表项的action列表处理。

     但是并不是所有的数据包都需要向交换机中添加一条流表项来匹配处理,网络中还存在多种数据包,它出现的数量很少(如ARP,IGMP等),以至于没有必要通过流表项来指定这一类数据包的处理法,此时控制器可以使用packet_out消息,告诉交换机某一个数据包如何处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章