OpenFlow是一种交换技术,刚开始它是2008年斯坦福大学的一个研究项目,但现在它已经引起了网络设备供应商和大型交换网络管理员的广泛关注。使用OpenFlow协议建立软件定义网络,可以将网络作为一个整体而不是无数的独立设备进行管理。
传统交换机使用生成树协议或其他一些新标准(如多链路透明互连,TRILL)来确定数据包转发路径。而OpenFlow将转发决策从各个交换机转移到控制器上,这一般是服务器或工作站。
管理应用程序执行控制器,负责与所有网络交换机进行交互,配置数据转发路径,从而提高带宽利用率。这个应用程序与云管理软件进行交互,保证有足够的带宽支持负载的创建和变化。
OpenFlow协议操作
OpenFlow标准定义了控制器与交换机之间的交互协议,以及一组交换机操作。这个控制器—交换机协议运行在安全传输层协议(TLS)或无保护TCP连接之上。控制器向交换机发送指令,控制数据包的转发方式,以及配置参数,如VLAN优先级。交换机会在链路中断或出现未指定转发指令的数据包时,发送消息通知控制器。
转发指令基于流,这个流由所有数据包共享的通用特性组成。定义流需要指定许多参数,其中可能包括:数据包到达的交换机端口、来源以太网端口、来源IP端口、VLAN标签、目标以太网或IP端口及许多其他数据包特性。控制器会在交换机上设置一组参数,用于定义各个流,以及匹配流的数据包处理方式。
每一个交换机都维护着许多路由表,而每一个表又包含多个路由记录。每一条路由记录包含一个匹配域,它定义了流、计数器和指令集。匹配域中记录的项目可能包含一个与到达数据包相对应的比较参数值,或者一个表示流的参数集中不存在此记录的指示值。
路由表的编号从0开始,到达的数据包对表0的记录进行比较。如果匹配,路由计数会增加,然后执行指定的指令集。如果到达的数据包不匹配任何路由表记录,那么必须创建一个新流。有的交换机可能直接丢弃未定义的流,但是大多数情况下,数据包都会转发到控制器上。然后,控制器为该数据包定义一个新流,并且创建一个或多个路由表记录。然后,它会将记录发送到交换机上,并增加路由表。最后,数据包会被送回交换机,使用新创建的路由记录进行处理。
路由表指令会修改每一个数据包所设置的操作。一开始,数据包会使用空操作集进行处理。这些操作可能要求数据包通过指定的端口进行转发,或者需要修改数据包TTL、VLAN、MPLS标签或数据包QoS。
第一个路由表的指令可能会对数据包执行操作,或者增加一些将来执行的操作。这些指令会将数据包与其他路由表记录进行比较,控制数据包的后续处理。后续路由表的记录的指令可能会进一步增加操作,删除或修改之前添加的操作,或者执行其他一些操作。
在将数据包发送到下一路由表之前,指令也可能会给数据包增加一个元素数据值。这个值就成为额外参数,它会与下一个路由表的记录的元数据值进行匹配。数据包会逐个表地进行处理,直到所有指令都处理完,并且数据包成功转发。
指令可能会指定一个组标识符。组是一种为数据包指定在多个流中执行相同操作集的高效方法。组操作定义在交换机的组表记录。每一个记录都包括标识符值、组类型、计数器和操作集。组类型规定是否所有操作集都会执行,这很适合用于实现广播或多播,或者规定只执行某些特定的操作集。#p#
OpenFlow协议消息传送
协议由三种消息组成:控制器-交换机消息、异步消息和对称消息。
控制器-交换机消息由控制器发送,可以:
指定、修改或删除流定义
请求交换机功能信息
查询交换机信息,如计数器
在新流创建之后,将数据包发送回交换机
异步消息由交换机发送,可以:
向控制器发送与现有流不匹配的数据包
在流的存活参数时间已到或静止计时器过期时,通知控制器流已经删除
通知控制器端口状态变化或交换机出现错误
对称消息可以由交换机或控制器双方发出,可用于:
在控制器和交换机之间启动时发送握手消息
发送回波消息,测试控制器与交换机之间的连接延迟,确定控制器与交换机的连接是否仍然有效
发送试验消息,作为将来OpenFlow技术的扩展方法
OpenFlow协议发展:前景看好
2011年,开放网络基金会成立,旨在推广OpenFlow和实现标准化。其成员包括思科、Facebook、谷歌、惠普、IBM和Juniper。当前版本的OpenFlow标准(1.1.0)包含了许多可选特性,可以支持进一步的试验,并且1.2版标准也正在制定中。
虽然思科仍未发布支持OpenFlow的交换机,但是其他交换机供应商已经在现有产品中实现了OpenFlow,如IBM与NEC的合作和惠普,他们将继续推进开发这些产品。随着供应商和网络运营商对这项技术进一步熟悉,OpenFlow必将会对网络的管理和运营产生重大影响。
【编辑推荐】