OpenFlow Switch Specification 1.3.0 (一)

一、 介绍

        这个文档描述了 OpenFlow 交换机的设计需求。我们建议你在阅读此文档之前,先阅读《OpenFlow 白皮书》。 《OpenFlow 白皮书》可以通过  Open Networking Foundation website(https://www.opennetworking.org/standards/open-flow )获得。这个说明文档涵盖的内容有:
        1. 构成 OpenFlow 交换机的组件以及 OpenFlow 交换机的基本功能;
        2. OpenFlow 协议(连接OpenFlow交换机和远程控制器)



二、交换机组件

        一个 OpenFlow 交换机包含一个或多个流表(flow table)、一个组表(group table)以及一个 OpenFlow 安全通道。上述的两类表是用来做“包查询”与“转发”工作的。安全通道的作用则是借助 OpenFlow 协议,使交换机和控制器间进行通信、使控制器管理交换机。

        利用 OpenFlow 协议,控制器可以对流表(flow table)中的流表项 (flow entries 进行“增、删、改”的操作。对流表项的操作可以是响应式的(即对特定数据包的到来作出反馈),也可以是预安装式的(即提前把流表设置好)。交换机中的每一个流表会包含一些流表项;每一个流表项是由 (1) 匹配字段(match fields)、(2) 计数器(counters)、(3)一组指令(instructions)组成,其作用是用来匹配数据包的。

        匹配的过程是从第一个流表开始的,继而可能会有其它的流表参与匹配的过程(见5.1章节)。流表项(flow entries)以优先级的顺序进行排列。优先级越高,在流表中的位置就越靠前。数据包与流表中的流表项依次比较,直到首次与流表(flow table)中的一条流表项匹配,当匹配到一条流表项后,此流表项中的指令(instructions)就会被执行。如果没有匹配到流表项,执行情况根据“table-miss”流表项(flow entrie的配置情况而定。例如:数据包可能通过 OpenFlow 安全通道被发送到控制器、删除此数据包、或者继续由下一个流表(flow table)处理(见5.4章节)。

        每一个与流表项关联的指令(instructions)要么是包含着一些“动作”(actions),要么是用来修改“管线处理流程” pipeline processing )。指令中的“动作”用来描述数据包的转发、数据包的修改,以及组表处理流程(group table processing)。“管线处理流程”的指令的作用是:(1)允许数据包发送到下一个表中进一步处理;(2)允许各表(tables)间以元数据(metadata)的形式交换信息。“把数据包发送到下一个表处理”的“管线处理流程”的停止条件是:数据包匹配到一条流表,其关联的指令集不再指定下一个表(next table);此时,这个数据包通常被修改和转发(见5.10章节)。

        流表项(flow entries可能要求将数据包转发到一个端口(port)。这个端口通常是一个物理端口,但是也可能是一个由交换机定 义(switch-defined 的逻辑端口(logic port)或者是由本文档定义的保留端口(reserved port)。保留端口可以用来指定通用的转发行为(forwarding actions),例如:(1)发送到控制器、(2)洪范(flooding),或者(3)使用非 OpenFlow 方式(比如"普通的"交换机)来 转发 处理(见4.5章节),而交换机定义(switch-defined)的逻辑端口可能指定了“链路融合组”( link aggregation groups ),隧道(tunnels)或者环回接口(loopback interfaces)(见4.4章节)。

        流表项中的“动作”(actions)可能会将数据包指向一个组(group),这个组指定了附加的处理(见5.6章节)。组(groups)代表着与“洪范”(flooding)有关的动作集(sets of actions),同样也代表着复杂的转发语义(例如:多路径、快速重路由、链路融合)。组(groups)作为一个间接的通用的层,也可以使多个流表项转发到一个单独的“标识符”(identifier)。(例如,IP转发到一个共同的下一跳(hop))。这种抽象使有着共同输出的多个流表项的改变更加高效。

        组表(group table)包含着“组表项”(group entry);每一个组表项包含着一系列的特定语义的“动作桶”(action bucket),而语义依赖于组类型(group type)(见5.6.1章节)。当数据包发送给组,就会有一个或多个“动作桶”的“动作”(actions)施行到此数据包。

        交换机的设计者可以自由设计硬件的内部结构,只要保证正确的匹配(match)语义和指令(instruction)语义即可。例如,当一条流表项(flow entrie想使用所有的组(group)来转发给多个端口时,交换机的设计者可以将这个功能设计成只有一个掩位的硬件转发表。另一个例子是“匹配”的,由 OpenFlow 交换机提供的“管线”(pipeline)可以是由不同数量的硬件表(hardware tables)实现的。

三、术语

        这个部分描述了 OpenFlow说明文档中的关键术语:

*Byte:一个八位的二进制。

*Packet:数据包,即一个以太帧,包括信头和负载。

*Port:数据包进出 OpenFlow“ 管线”(pipeline)的位置。可以是物理端口,交换机定义的逻辑端口,或者 OpenFlow 协议
定义的保留端口。

*Pipeline:OpenFlow 交换机中,一些串联起来的流表,用来提供“匹配”,“转发”和“数据包修改”的功能。

*Flow Table:“管线”(pipeline)中的一个阶段,包含流表项。

*Flow Entry:流表中的一个元素,用来匹配和处理数据包。它包含一系列的“匹配字段”用来匹配包,“优先级”用来决定匹配的优先顺序,一些“计数器”用来记录数据包和一些“指令”用来执行。

*Match Field:一个用来匹配数据包的字段,可以匹配数据包的包头、数据包进入的端口、元数据(metadata)值。一个匹配字段可以是通配符(匹配任何的值),一些情况下是掩码。

*Metadata:一个可屏蔽的注册值 (register value ,用来在一个表和下一个表之间传递信息。

*Instruction:指令(instructions)与一个流表项关联,用来描述当一个数据包匹配到此流表项后的 OpenFlow 处理流程。一个指令用来修改“管线处理流程”,例如将数据包发送给另一个流表;或者包含一些“动作”用来补充“动作集”(action set),或者包含一系列的“动作”直接作用到数据包上。

*Action:一个动作,用来将数据包转发到一个端口或者修改数据包,例如减小 TTL 字段。“动作”(actions)可以是“流表项”中指令集的一部分,也可以是“组表项”中的一个“动作桶”(action bucket)。“动作”(actions)可以在对应数据包的“动作集”中积累,也可以对此数据包立即执行。

*Action Set:与某个正在处理的数据包相关的动作集合,动作集合随着数据包被每个表的处理而逐渐积累,也即每个表处理了数据包之后可能会向“动作集”中增加“动作”。当“指令集”命令数据包退出“处理管线”后执行此“动作集合”。

*Group:一系列的“动作桶”(action buckets)和选择其中一两个“桶”应用到每一个数据包的方法。

*Action Bucket:为“组”(group)定义的一些“动作”和相关参数。

*Tag:可以通过“push”和“pop”动作,向数据包中插入和删除的“信头”。

*Outermost Tag:出现在邻接数据包开头位置的标签(tag)。

*Controller:利用 OpenFlow协议 的一个与 OpenFlow 交换机通信的实体。

*Meter:“计量器”,一个交换机的成份,可以测量和控制数据包的速率。当通过某个“计量器”的数据包率或字节率超过了预先设定的极限值,“计量器”就会触发一个“计量器带宽”(meter band)。如果“计量器带宽”删除数据包,就称作“速率限制”(Rate Limiter)。

四、OpenFlow 端口

        这一个部分描述 OpenFlow 端口的抽象和各种 OpenFlow 所支持的 OpenFlow 端口类型。

4.1 OpenFlow 端口

         OpenFlow 端口是 OpenFlow 处理流程(OpenFlow processing)之间,及与其他网络部分传递数据包的网络接口。OpenFlow 交换机通过 OpenFlow 端口在逻辑上彼此相连。

        一个 OpenFlow 交换机对 OpenFlow 处理流程开放一些数量的 OpenFlow 端口。这些端口可能不同于交换机硬件所提供的网络接口(network interfaces),而一些网络接口可能会OpenFlow不开放,并且 OpenFlow 交换机也可能定义额外的 OpenFlow 端口。
        OpenFlow 数据包在交换机的“输入端口”(ingress port)被接收,并由“ OpenFlow 管线”( OpenFlow pipeline)处理(见5.1章节),然后,数据包可能被发送到交换机的“输出端口”(output port)。“packet ingress port”是数据包的一个属性,代表着数据包通过 了的“   OpenFlow 管线 ”是从哪个“输入端口”进入 交换机的。“输入端口”可以在匹配数据包的时候使用(见5.3章节)。通过使用“输出动作”(output action),“OpenFlow管线”可以决定将数据包发送到哪个“输出端口”(见5.12章节),这样就可以决定了数据包如何返回到网络。

        一个  OpenFlow 交换机必须支持三种类型的 OpenFlow 端口:物理端口,逻辑端口,保留端口。

4.2  标准端口

        OpenFlow 标准端口被定义为物理端口,逻辑端口;如果交换机支持的话还有 LOCAL 保留端口(除去其它的保留端口)。
        
        标准端口可以被用作输入输出端口,它们也可以在“组”中使用(见5.6章节),并且它们有端口计数器(见5.8章节)。

4.3  物理端口

        OpenFlow 硬件端口是交换机定义的端口,与交换机的硬件接口相关联。例如,一个以太网交换机,物理端口与以太网的硬件接口是一一对应的。

        在一些部署中, OpenFlow 交换机可能是由底层的硬件交换机虚拟化出来的。在这种情况下,一个OpenFlow 物理端口可能代表着相应的物理交换机的硬件接口的一部分。

4.4  逻辑端口

        逻辑端口是交换机定义的不直接与硬件接口相关的端口。逻辑端口是物理端口的高层抽象,其定义可能是非 OpenFlow 的方式(例如,链路聚合组(link aggregation groups),隧道,环回接口(loopback interfaces))。

        逻辑端口的数据包可能是被封装过的,可能映射到多个物理端口。逻辑端口的处理必须换转换成 OpenFlow 的处理,对那些端口的处理必须与 OpenFlow物理端口的处理一样。

        物理端口与逻辑端口的唯一不同是,与逻辑端口有关的数据包可能含有额外的元数据字段(metadata field),例如 Tunnel-ID(见 A.2.3.7),并且当逻辑端口受到陌生数据包,要发送给控制器时,它的逻辑端口和底层的物理端口都需要报告给控制器(见A.4.1)

4.5 保留端口

        OpenFlow 保留端口由本文档说明书定义。它们指定了通用的转发动作(actions)例如,发送到控制器,洪范(flooding),或者用 non-OpenFlow 的方式转发,例如 “普通(normal)”的交换机处理流程。

        并不是 所有的保留端口都强制要求 交换机去支持,只有那些标注了“必须”的才需要支持。

*必须: ALL :代表交换机的所有可用来转发指定数据包的端口。只可以被用作输出端口。在这种情况下,一个数据包的拷贝可以被发送到所有的标准端口,除去这个数据包的输入端口和被注册为 OFPPC_NO_FWD的端口。

*必须:CONTROLLER代表连接着 OpenFlow 控制器的控制器通道。可以被用作输入输出端口。当用作输出端口时,将数据包封装到 packet-in 消息中,然后利用 OpenFlow 协议发送除去(见A.4.1)。当用作输入端口的时候,用来识别来自控制器的数据包。

*必须:TABLE:代表着 OpenFlow 管线的开始。这个端口只有在 packet-out 消息的“输出动作”(output action)中才有效。其作用是把数据包提交给第一个流表,以便数据包可以被常规的 OpenFlow 管线处理。

*必须: IN_PORT:代表着数据包的输入端口。只能被用作输出端口,其作用是将数据包发回给数据包的输入端口。

*必须: ANY:当没有指定端口时(通过端口通配符(port   wildcarded)),它在一些 OpenFlow 命令中是一个特殊端口值。它既不能当输入端口,也不能当输出端口。

*可选:LOCAL:代表着交换机的本地网络栈和它的管理栈。可以被用作输入输出端口。本地端口(local port)允许远程实体通过 OpenFlow 网络与交换机交互,而不需要通过一个分离的控制网络。利用一些恰当的缺省流表项,就可以实施in-band controller连接。

*可选:NORMAL:代表着传统的 non-OpenFlow 交换机管线(见5.1章节)。只可以被用来作为输出端口,这种情况下使用普通的(normal)管线处理数据包。如果交换机不能将数据包从 OpenFlow 管线转发到普通的管线,那么说明这个交换机不支持这个“动作”。

*可选: FLOOD:代表着利用交换机的普通管线(normal pipeline,相对于openflow管线)的洪范(flooding)。只可以被用作输出端口,总得来说,其语义就是发送数据包到所有的标准端口上;但是不发送此数据包到数据包的输入端口和处于 OFPPS_BLOCKED 状态的端口。交换机可以利用数据包的 VLAN ID来选择向哪些端口“洪范”。

        OpenFlow-only交换机不支持 NORMAL 端口和 FLOOD 端口,OpenFlow-hybrid 交换机可以支持它们(见5.1章节)。转发数据包到 FLOOD 端口依赖于交换机的实现和配置,另外,利用类型为“all”的“组”(group)可以使交换机更灵活地实现洪范。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值