SDN南向接口中的OpenFlow协议消息类型:
OpenFlow南向接口就是指Controller和交换机之间的标准消息接口。
Controller和交换机之间的消息分为三大类,分别是Controller-to-Switch消息、Asynchronous(异步)消息(也就是Switch-to-Controller消息)、Symmetric(对称)消息。controller-to-swicth消息是由控制器发起的,用于管理和检查交换机状态;asychnomous消息是由交换机发起的,用于将网络事件和交换机状态改变信息更新到控制器;symmetric消息可以由任何一方发起。
1 Controller-to-Switch消息
-
Features: 控制器通过向交换机发送features消息,用于请求交换机身份和基本能力信息,且交换机必须对此类消息进行应答。features消息通常在安全通道建立时执行。
-
Configuration:Controller用这个消息类型去配置交换机或者查询交换机配置参数,交换机仅需要应答查询信息。
-
Modify-State:Controller用这个消息类型来操作流表(add/delete/modify)和group表,以及Port属性等。
-
Read-State:Controller用这个消息类型来获取交换机各种状态信息,包括配置、统计等信息,比如Counter。
-
Packet-out:Controller用这个消息类型通过指定的端口向外发送匹配某条流表项的数据报文。
-
Barrier:Controller用这个消息类型来保证一些其他消息之间的顺序,比如A和B两个消息有依赖关系,B依赖A。为了保证这个顺序,Controller先朝交换机发送消息A,然后再发送一个Barrier消息,交换机要等消息A被执行之后才发送一个对Barrier消息的回复,Controller收到回复之后,才会继续发送B。通过这种机制严格保证A和B在交换机上的执行顺序。
-
Role-Request:当交换机连了多个Controller的时候,Controller用这个消息向交换机通告自己的角色,设置或查询安全通道的角色信息。
-
Asynchronous-Configuration:当交换机连接到多个Controller的时候,它经常会主动朝Controller发布一些状态通告消息或者转发报文,但是并非所有的Controller都对所有的这些消息感兴趣,有的Controller可能只对部分消息感兴趣,Asynchronous-Configuration这个消息类型就是被Controller用来告诉交换机,它对哪些交换机发送过来的消息感兴趣的。
2. Asynchronous消息
-
Packet-in:当有报文匹配某条流表项,该流表项的action是output to Controller-Port的时候,这个报文就会被通过Packet-in的消息送到Controller。 或者交换机收到一个网络数据包,在流表中没有匹配项,发送Packet-In消息给控制器。如果交换机缓存足够多,网络数据包被临时存放在缓存中,网络数据包部分内容和在交换机缓存中的序号一同发给控制器;如果交换机缓存不足则将整个数据包发送给控制器。
-
Flow-removed:交换机中的流表因为超时或者修改等原因被删除掉,会触发flow-removed消息,来通告控制器删除动作的完成。
-
Port-status:当端口状态发生变化的时候,交换机用这个消息类型向Controller通告状态变化,比如link down/up。
-
Error:当交换机发生了一些错误时,用这个消息类型通知Controller。
3. Symmetric(对称)消息
-
Hello:Controller或者交换机启动的时候,互发Hello消息,通知对方。
-
Echo: 交换机和控制器均可发送echo消息,接收者需要回复echo reply。该消息用于测量延迟、带宽等。
-
Experimenter:很多标准都会定义一个这样的消息类型,用来让厂家进行私有扩展。