OpenFlow1.0流表项由三个基本要素构成
头字段+计数器+行动 其中头字段描述何种数据包与流表项匹配,计数器记录匹配次数,行动描述了匹配的数据包所采取的操作(forward或者drop等)。 OpenFlow交换机可以有多个流表,各流表也可以包含多个流表项。 在1.0版本匹配的流表项只有一个,但是以后版本规范都已更新。但即使数据包可以与多个流表项匹配,最终匹配的流表项也只有一个。流表项
头字段可包含L1至L4之间的各层信息。流表匹配必须从流表0开始匹配,若编号为0流表中不存在,前进到下一流表。 任何流表都不匹配时(Table-miss),利用Packet-in转发给控制器或者丢弃。 OpenFlow1.1导入了可与多个流表项相匹配的流水线处理。 头字段解析优先顺序: 1.确认以太帧类型是否是0x8100,是就保存VLAN ID和PCP。 2.如果以太网类型是ARP,记录发送原地址、目标IPV4地址和OP代码等。 3.对于以太网类型为0x0800的IPv4数据包,IPv4头中包含字段也要纳入查找对象范围。计数器
计数器用来统计已处理的数据包数量等信息。OpenFlow1.0中有四种: 1.各流表Per Table计数器 2.物理端口Per Port计数器 3.流表项Per Flow计数器 4.队列的Per Queue计数器行动
OpenFlow1.0中有四种行动: forward(转发),drop(丢弃),enqueue,modify-field。
forward 指向特定断定端头发送数据包的行动。 2.Drop 丢弃 3.Enqueue(可选) 将数据包转发至现有已设定的队列中,在等待队列中添加数据包。 4.modify-field(可选) 可改写数据包内容。控制器与交换机交换的消息(64比特组成)
两者通过安全通道进行连接,连接方式可通过TLS或TCP明文实现。步骤: 1.交换机对控制器建立未加密的TCP连接 2.确定安全通道中要使用的OpenFlow版本(hello消息) 3.握手(features请求与响应,控制器获得交换机支持的行动、传输容量等信息) 4.其他(如set_config,get_config)
Flow-Mod消息 指由控制器对交换机设置流表项的消息。通过Flow-Mod消息可以对流表项进行添加、删除、变更等。
Packet-In消息 交换机发送给控制器
Packet-Out消息 控制器向交换机发送的消息
Port-Status消息 在交换机中添加、删除或修改物理端口时,需要发送Port-Status通知控制器。
Flow-Removed消息 当交换机中设置的流表项超时时,交换机要向控制器发送该消息。
Error消息 控制器和交换机都可以发送出现错误。
Barrier消息 不是每一个通过安全通道的消息都需要响应。Barrier消息掌握信息处理程度。
Echo消息 交换机与控制器通过Echo请求消息确认二者是否连接、检测通信延迟、测量通信带宽等。
参考书籍:图解OpenFlow