OpenFlow协议:
概念:OpenFlow是一个标准化的南向接口,用于控制器和网络设备之间的通信。控制器通过OpenFlow来控制网络设备,网络设备则通过OpenFlow把信息反馈到控制器中。
说明:
1)OpenFlow协议涉及两个网络元素:控制器和交换机(网络设备)。
2)OpenFlow规定了网络设备对报文的转发和编辑方式。
名词解释:
流(Flow):指在一段时间内,经过同一个网络的一系列具有相同属性且顺序发送的报文集合。在OpenFlow中,所有的数据都以流的形式进行处理。
流表(Flow Table):流表就是交换机中交换芯片上的转发表,每张流表都由多个流表项组成,类似于路由器中的路由表。
流表项(Flow Entry):流表项是流表的最小单位,每条流表项对应了网络中传输的一条流。流表项是OpenFlow中最核心的元素。
说明:
1)每条流表项由6个部分组成:Match Field(匹配字段)、Priority(优先级)、Counter(计数器)、Instruction(指令)、Timeout(超时)、Cookie(附属属性)
2)流表的查找:对进来的报文,用该流表指定的字段去匹配查找,如果匹配到了一条流表项,那就执行这条流表项所规定的指令。
3)一张流表有nK,就是说这张流表有nK条流表项。
动作(Action):是对一个报文的最小原子操作,宏观上可以分为两大类:报文编辑和报文转发。
OpenFlow协议中控制器和交换机的工作流程:
控制器通过一套标准的消息接口,告诉交换机,当报文从哪些端口进来时,该去查找哪张流表,匹配到一条流表项(Flow Entry)之后,就要去执行这条流表项所规定的指令,然后要么直接转发出去或者丢弃,要么继续去查找下一个指定的流表(由匹配到的这条流表项来指定),然后重复这个过程,直到报文被转发出去或被丢弃。
OpenFlow交换机转发面内部(即交换芯片)在逻辑上由两部分组成:端口(Port)和流表(Flow Table)
注:交换机与控制器通信的通道(Chanel)可以认为是一个特殊的端口(即逻辑端口)。
OpenFlow中的交换机:
1)交换机系统的初始化:交换机系统初始化的时候,一般都会有默认流表。默认流表里面有一条默认流表项,通常这条默认流表项的行为是丢弃所有报文或将所有报文都送到控制器中。
2)控制器维护交换机中的流表:交换机系统初始化完之后,根据业务需求,控制器开始往交换机下发流表项,或者修改已经存在的流表项属性,或者删除不需要的流表项。
3)报文在交换机中的转发:报文进到交换机之后,根据交换机(基于端口)的配置去查找指定的流表,匹配到之后,就执行相应的指令,这些指令中的Action最终会导致该报文被编辑、被丢弃、被计数、被测速、被转发等。
OpenFlow的伴侣协议:OF-Config
1)OpenFlow只负责和业务相关的事情,而管理业务所依赖的资源等非业务事情则是由OF-Config来负责。
2)任务:指定交换机要跟哪些控制器连接(配置控制器的地址),配置交换机的IP地址、掩码、网关等,管理Flow所需要的物理端口以及逻辑端口(Tunnel)的创建和状态改变(up/down)等。
OpenFlow还需完善的地方:
1)控制器的集中式控制,会遇到可扩展性的问题,如果采用分布式控制,则不容易把握分布式的规模。
2)流表配置的速度比较慢,当遇到大型网络时,要配置大量设备的流,速度会跟不上,有严重的性能问题。
3)没有稳定的安全机制,安全性还不能得到充分的保证。