「SDN」- OpenFlow(SBI)

  CREATED BY JENKINSBOT

SDN 起源提出 OpenFlow 协议。随着技术的发展,OpenFlow 成为控制器与交换机之间的诸多南向接口协议的一种。

OpenFlow 是 Controller 与 Switch 之间的一种南向接口协议(还有其他接口协议)。

OpenFlow Message Type

其定义三种类型的消息:
1)Controller-to-Switch:该消息由 Controller 发送,用于 管理 Switch 和 查询 Switch 的相关信息。
2)Asynchronous:该消息由 Switch 发起。当 Switch 状态发生改变时,发送该消息告诉 Controller 状态变化。
3)Symmetric:该消息没有固定发起方,可由 Switch 或 Controller 发起。例如 Hello、Echo、Error 等等。

每种消息又包含更多的子类型。

Controller-to-Switch子类型:
1)Features消息:在SSL/TCP会话建立后,Controller给Switch发送Features请求Switch的相关信息。Switch必须应答自己支持的功能,包括接口名、接口MAC地址、接口支持的速率等等基本信息。
2)Configuration消息:Controller可以设置或查询Switch的状态。
3)Modify-State消息:Controller发送该消息给Switch,来管理Switch的状态,即增加/删除、更改流表,并设置Switch的端口属性。
4)Read-State消息:Controller用该消息收集Switch上的统计信息。
5)Send-Packet消息:Controller发送该消息到Switch的特定端口。

Asynchronous子类型:
1)Packet-in消息:当Flow Table中没有匹配的表项或者匹配“send to Controller”,Switch将给Controller发送packet-in消息。
2)Packet-out消息:从控制器回复的消息。
3)Flow-Removed消息:当给Switch增加一条表项时,会设定超时周期。当时间超时后,该条目就会被删除。这时Switch就会给Controller发送Flow-Removed消息;当流表中有条目要删除时,Switch也会给Controller发送该消息。
4)Port-status消息:当数据路径接口被添加、删除、修改的时候,此消息用于通知控制器。

OpenFlow Flow Table

OpenFlow Switch 基于流表(Flow Table)转发报文。
每个流表项由匹配字段、优先级、计数器、指令、超时、Cookie、Flags这七部分组成。

其中关于转发的关键的两个内容是:
1)匹配字段,是匹配规则,支持自定义。
2)指令,是用来描述匹配后的处理方式。

转发方式对比

经典的网络转发方式是网络设备通过查询路由表指导流量转发。
路由表的条目由网络设备之间运行路由协议而计算生成。
路由表是定长的。路由表通过最长匹配原则执行报文转发。一台网络设备只有一张路由表。
OpenFlow 是个网络协议。运行OpenFlow的交换机通过查询流表指导流量转发。
流表一般是由OF控制器统一计算,然后下发到交换机。
流表是变长的,拥有丰富的匹配规则和转发规则。一台网络设备有多张流表。