以网络设备中内置了TCAM存储器为前提设计的,无需设计新硬件,更新其软件即可。
控制面和数据面的分离
OpenFlow控制器和OpenFlow交换机维持着经由OpenFlow通道的TCP连接。
两种模式:
流表描述数据包要进行何种处理。
OpenFlow交换机可拥有多个流表。
连接是从OpenFlow交换机向OpenFlow控制器建立的。
由控制器向交换机预先发送流表项的设置。
交换机Packet-in消息询问控制器如何处理。控制器发送指示消息或设置流表项。
有时也存在根据Packet-in消息,控制器给多台交换机添加流表的情况。
流表中流表项由3个基本要素构成:头字段,计数器,行动。
交换机中有多个流表,OpenFlow1.0中匹配的流表只有一个,而OpenFlow1.1以上,数据包可以在各流表中与流表项匹配。
任何一个流表项都不匹配的情况称为Table-miss,发生Table-miss时交换机发送Packet-in消息或丢弃数据包。
若数据包与多个流表匹配,按优先级匹配,有配相同根据交换机具体实现来执行。
有4种计数器:
OpenFlow中定义了4种行动:
必备行动。只有Drop能丢弃与未指定Forward行动的流表项相匹配的数据包。
将现有数据包转发至现有的已设定的队列中(入队)。
用于实现Qos等功能的队列支持。
OpenFlow1.1开始Enqueue改名为Set-Queue。
OpenFlow1.1开始Modify-Field改名为Set-Field。
OpenFlow规范中,安全通道通过TLS(安全传输层协议,位于TCP之上)来实现。有时也会通过TCP明文来建立。
在OpenFlow1.0.2之后,建立安全通道的TCP端口号默认使用6653。
OpenFlow头
OpenFlow版本,消息类型,该头包含8位字节数,分配给该数据包的事务id(请求和响应消息对应)
消息类型:22种。
交换机和控制器都将发送Hello消息,Hello消息仅由OpenFlow头构成。
安全通道建立后,控制器通过握手掌握交换机的相关消息。
控制器发送查询的Features请求,交换价返回Features响应。
各OpenFlow交换机称为datapath,datapath_id是唯一标识。
用于查询和设置OpenFlow交换机的设置状态。
控制器用于对流表项添加、删除、变更设置等操作。
Flow-Mod消息字段:OpenFlow头,数据包匹配信息,Cookie,行动内容。
两种情况发送Packet-In消息:
两种情况:
不存在通知控制器缓存已经删除的机制。
控制器向交换机发送含数据包发送命令的消息。
单一的Packet-Out消息中可包含多个行动。
在交换机中添加、删除或修改物理端口是,需要发送该消息通知控制器。
交换机流表项超时删除或是命令删除时,发送该消息通知控制器。
通知错误。
控制器和交换机均可发送。
用于掌握消息的处理进度。Barrier请求和响应。
用来确认控制器和交换机是否连接、检测通信延迟、测量通信带宽等。Echo请求和相应消息。
参考自《图解OpenFlow》
转载请注明出处