《SDN核心技术剖析和实战指南》2.2OpenFlow交换机规范小结
这节的内容相当多,主要是介绍OpenFlow标准特别是流表的相关特性。
典型的OpenFlow标准由三部分组成:安全通道,流表和OpenFlow协议。注意这个标准是一份设备标准,并不单指OpenFlow协议。后来引入了流水线式的多流表以及组表(Group Tabel)。
(图摘自SDNAP的文章)
安全通道是交换机与控制器进行通讯的接口,在实现上推荐使用(在缺省情况下就是)TLS用来保证认证性和数据隐私。而OpenFlow协议是用来描述控制器和交换机之间交互信息的接口标准。OpenFlow协议支持三种类型的信息:controller-to-switch(控制器到交换机)、asynchronous(异步,实质上这更应该命名为switch-to-controller交换机到控制器)和symmetric(对称)。具体来说每种类型都包含了不少类型的信息,这里就不说了。
流表是可以看作是普通协议格式的一种抽象。在OpenFlow v1.3中,流表结构由匹配域、优先级、计数器、指令(改名前叫动作)、超时定时器和Cookie。(1)匹配域包含的内容非常多,而且还在不断地扩展,典型的有源MAC地址、目的MAC地址、源IP地址、目的IP地址以及端口等,反正这包括各种各样已知的协议所用到的域。而OpenFlow就是希望做到可以对任意域进行匹配。(2)优先级是指流表项在该流表的匹配相对匹配次序。值得注意的是,流表和流表之间也有优先级的概念,这指的是流水线上的相对匹配次序。另外,这个优先级并不是好像编程中优先队列那样的优先级,而是硬性的如插入排序那样优先级。指定了一个优先级,就硬性插入到该位置。这对于表项和表从概念上都是一样的。(3)计数器是指匹配这个流表项的数据包累计数目。(4)指令表示如何处理匹配这个流表项的数据包。这个指令有可能是对其动作集作出修改并传到下一个流表进行匹配,也有可能是立刻执行动作集的动作。动作集可以理解为经过多个流表后每个流表指定要做的动作的集合。(5)超时定时器是指这个流表项的最长有效时间。当超过有效时间后,OpenFlow交换机会删除该流表项并向控制器发送消息使其知道此情况。(6)Cookie在数据转发上不会用到,它是控制器用来操纵流的工具。
组表其实就是将多个流编成一个组,然后执行相同的操作集。这可以用于实现广播或组播,或者对某些流执行一些特别的操作。
在OpenFlow v1.2后提出了Openflow端口的概念。OpenFlow交换机支持三种类型的端口:物理端口、逻辑端口和保留端口。物理端口就是指交换机的硬件端口,而逻辑端口是指具有抽象意义的端口,例如全部物理端口,某些物理端口等,我认为这主要是为了一些转发行为的方便。保留端口是为了扩展的方便,例如使用非OpenFlow的方法转发等。这三种端口都统称为OpenFlow端口,在使用上一般不区分。
(图摘自SDNAP的文章)
最后说说数据包的匹配过程。当一个数据包从输入端口进入OpenFlow交换机后,会先在表0进行匹配,根据匹配的流表项执行下一步的操作,有可能是直接执行动作集或丢弃数据包,也可能是将动作加入动作集然后转到后续流表匹配。值得注意的是,在OpenFlow v1.3中增加了table-miss流表项,用于指示当整个流表都不匹配的时候执行的动作。这非常有利于定义缺省动作。另外,流表的操作顺序只能按优先级从前到后,不能转回前面,但应该可以跳到后面的某个表,这应该是加入某些值然后使后面的表都只将其传递直到目标。这个我还不肯定。
当然,这一节还包含很多其他的内容。但我认为以上是主干知识。