☞Openflow消息总共分为三大类:
1、Controller‐to‐Switch 控制器至交换机消息此类消息由控制器主动发出 Features 用来获取交换机特性 Configuration 用来配置Openflow交换机 Modify‐State 用来修改交换机状态(修改流表) Read‐Stats 用来读取交换机状态 Send‐Packet 用来发送数据包 Barrier 阻塞消息 2、Asynchronous 异步消息此类消息由交换机主动发出 Packet‐in 用来告知控制器交换机接收到数据包 Flow‐Removed 用来告知控制器交换机流表被删除 Port‐Status 用来告知控制器交换机端口状态更新 Error 用来告知控制器交换机发生错误 3、Symmetric 对称消息,可以由控制器或交换机主动发起 Hello 用来建立Openflow连接 Echo 用来确认交换机与控制器之间的连接状态 Vendor 厂商自定义消息☞Openflow消息格式
Openflow协议数据包由Openflow Header和Openflow Message两部分组成
Openflow header的结构:
Openflow Message结构与具体消息类型有关:
Openflow消息类型:
☞Openflow Channel
openFlow Channel是指交换机跟Controller之间的连接通道,可以是外带管理通道(交换机面板上跟Console口在一起的那个单独的Ethernet端口,物理上跟业务端口分离),也可以是带内管理口(复用业务端口),现在常见的都是带外管理口,主要原因是简单,用带内口需要配置交换芯片和协议栈。
openFlow Channel连既可以是TCP连接,也可以是加密的TLS连接,由设备商或者用户自行决定用哪种。使用TCP/TLS连接主要是为了保证可靠性。如果交换机连接了多个Controller,那么会创建多条TCP/TLS连接。☞Controller角色和选举
一台openFlow交换机可以同时连接到多个Controller,这些Controller有三种角色,分别是Master、Slave和Equal。
Master----一台交换机连接到的所有Controller中,只有一个Master,它对交换机拥有完全的操作控制权。 Slave-----一台交换机所连接到的所有Controller中,可以有多个Slave,它们对交换机只有读取交换机状态和被动收取交换机消息的权限,不能对交换机进行配置,一旦Master宕掉,其中一台Slave就会被选举为Master。每个Slave可以接收不同的消息类型,从而在多个Slave之间进行负载分担。 Equal----又的网络中可能希望有多个Controller都能对交换机进行配置,以便进行负载分担。这种情况下这些Controller可以被配置为Equal角色,一台交换机允许同时连接到多个Equal角色的Controller,这些Controller对交换机拥有和Master一样的功能。 这些角色初始的时候都是管理员配置的。当Master出故障后,Slave可以通过选举的方式变为Master。交换机没有决定权。OpenFlow标准并没有定义如何进行选举。