OpenFlow兼容的交换机有两种类型:OpenFlow-only和OpenFlow-hybrid。 OpenFlow-only交换机只支持OpenFlow操作,在这些交换机中的所有数据包都由OpenFlow流水线处理,否则不能被处理。
OpenFlow-hybrid交换机支持OpenFlow的操作和普通的以太网交换操作,即传统的L2以太网交换,VLAN隔离,L3路由(IPv4的路由,IPv6路由),ACL和QoS处理。这些交换机提供一个交换机外的分类机制,使流量路由到OpenFlow流水线或普通流水线。例如,某个交换机可以使用VLAN标签或数据包的输入端口,来决定是否使用一个流水线或其他流水线,或者它可指导所有数据包都到OpenFlow流水线进行处理。
每个OpenFlow交换机的流水线包含多个流表,每个流表包含多个流表项。 OpenFlow的流水线处理定义了数据包如何与那些流表进行交互。 OpenFlow交换机需要具有流表中的至少一个,并可以有更多的可选择的流表。只有一个单一的流表的OpenFlow交换机是有效的,而且在这种情况下流水线处理进程可以大大简化。
OpenFlow1.3与之前的协议进行对比一个很大的变化是多级流表的实现
多级流表的整个处理过程:
数据包第一个与流表0的流表项匹配。其他流表根据第一个表的匹配结果来调用。
根据某个流表进行处理时,将数据包与流表中的流表项进行匹配,从而选择流表项。如果匹配到了流表项,那么包括在该流表项的指令集被执行时,这些指令可能明确指导数据包传递到另一个流表(使用Goto指令),在那里同样的处理被重复执行。表项只能指导数据包到大于自己表号的流表,换句话说流水线处理,只能前进,而不能后退。显然,流水线的最后一个表项可以不包括GOTO指令。如果匹配的流表项并没有指导数据包到另一个流表,流水线处理将停止在该表中。当流水线处理停止,数据包被与之相关的行动集处理并通常被转发。
Table-Miss
每一个流表必须支持能处理table-miss的流表项。table-miss表项指定在流表中如何处理与其他流表项未匹配的数据包。比如数据包发送到控制器,丢弃数据包或直接将包扔到后续的表。
table-miss的流表项也有它的匹配字段和优先级,它通配所有匹配字段(所有领域省略),并具有最低的优先级(0)。table-miss流表项的匹配可能不属于正常范围内流表支持的匹配,例如精确匹配表可能不支持在其他流表项中使用通配符,但必须支持table-miss的通配符流表项。table-miss流表项可能没有与正常流表项相同的能力。交换机最好支持和OpenFlow的以前版本的处理能力相同的table-miss流表项:将数据包发送到控制器,丢弃数据包或直接包到后续的表。
table-miss表项的行为在许多方面像任何其他流表项:默认情况下,在流表中不存在table-miss表项。控制器可以在任何时候添加或删除它,而且它可能会超时失效。table-miss流表项可以匹配流表中其他表项中不能匹配的数据。当数据包与table-miss表项匹配时,table-miss表项指令就会执行。如果该table-miss表项直接将数据包通过CONTROLLER端口发送到控制器,那么报文中的信息必须与一个table-miss表项匹配。
如果该table-miss表项不存在,默认情况下,流表项无法的数据包将被丢弃(丢弃)。一个交换机的配置,例如使用OpenFlow的配置协议,可以覆盖此默认值,指定其他行为。
流表项删除
流表项的删除主要有两种方式:控制器的请求和交换机流超时机制。