OpenFlow的基本思想为:分离控制平面和数据平面之间使用标准的协议通信。数据平面采用基于流的方式进行转发。
OpenFlow的体系结构由控制器、OpenFlow交换模块及OpenFlow协议三部分组成。
OpenFlow控制器:OpenFlow协议的控制平面服务器,完成流表的创建与维护。
OpenFlow交换模块主要有两种:专用交换模块以及兼容型交换模块。
对于一个标准的OpenFlow设备,专用交换模块仅支持OpenFlow转发。而兼容型交换模块则支持OpenFlow转发,也支持正常二三层转发。
OpenFlow交换模块上负责OpenFlow协议管理的部件为OpenFlow Agent,通常与控制器建立OpenFlow连接,上报OpenFlow交换模块的端口信息,解析控制器下发的流表表项信息。
转发数据库通常是控制器将部分数量大、变化频繁的协议计算收集得到的,并且通过OpenFlow协议下发到设备,以辅助设备增加计算能力。
控制器通过Flow_Mod将流表下发给OpenFlow交换模块。该流表是由用户在控制器上创建的,用于指导报文转发。设备根据该流表来匹配报文并对匹配成功的报文进行处理,在同一级流表中按照流表项规定的优先级进行先后配置。目前设备仅包含一级流表,流表中可包含多个流表项。设备支持的流表项包含: Match Fields, Priority,Instructions和Fail Action。
- Match Fields:报文匹配规则。包含报文协议类型、源IP地址、目的IP地址、源端口号、目的端口号和DSCP优先级。
- Priority:优先级。数值越大的优先级越高,优先级高的流表项先进行匹配。
- Instructions:动作指令集。定义匹配到该流表项的报文需要进行的操作。
- Fail Action:匹配成功的报文按照动作指令集中的动作转发失败后的操作,包括以下两种:
– forward:按照传统路由表中的路由进行转发。
– discard:直接丢弃该报文。
如果控制器下发的流表中不带有Fail Action,那么设备会默认该流表的Fail Action为forward。