OpenFlow交换机的实现总结

先粗略介绍,后续会逐渐完善。

OpenFlow交换机通过使用OpenFlow协议的安全通道与控制器进行通信。其具体实现如下示意图所示:

对于一个新到达的数据流,交换机通常的做法是,把该数据包发送给控制器,由控制器来决定数据包的下一步操作。至于已存在的,则会直接根据原有的发送路径,发往目的点。

根据上图,在实际中,交换机内部通常由两个表,一个是组表还有一个就是流表,组表目前只是初涉猎,暂不解释,后续补充。流表是由流条目构成,在交换机中,可以有许多流表,其结构可以抽象为下图:

也就是说,每个流表是由多个流条目组成的,而每个流条目对应的就是实际中的一种数据流(目前的理解),每个流表可以包含多种流条目,当数据流经过OpenFlow交换机的时候,交换机就会根据数据流所带的这些条目进行匹配,来决定对这些数据流的相应操作指示。因此,对于每个流条目,它也具有相应的报文结构,大致分为三个部分,如下所示:

一般而言为匹配字段、计数以及指示段三个部分组成。当一个流条目进入一个OpenFlow交换机后,会根据流表自身的优先级顺序决定匹配的先后次序,若匹配成功,则会执行相应的指示字段所对应的指示,对匹配成功的数据包进行下一步的操作;倘若匹配失败,则会基于交换机本身的配置,来处理流条目,比如发送给远程交换机,丢掉该数据包,或者继续发送给下一个流表,或者洪范广播等。

而对于流表之间的传递通道通常是以元数据的形式,将数据包发送给后续表(目前认为是优先级较低的表)来进行进一步处理,可以通过管道处理指令来实现。当与匹配流条目关联的指令集不指定下一个表的时候,传递途径就会被关闭。在这一点上,数据包通常被修改并转发。

 

posted @ 2017-08-31 12:40  守功  阅读(4507)  评论(0编辑  收藏  举报