目录
一、网络可编程续
1.1 主动网络的可编程
1.2 SDN可编程
1.2.1 SDN北向接口
1.2.2 SDN南向接口
1.2.3 SDN控制平面
1.2.3 SDN相对于主动网络的优势
二、OpenFlow协议
2.1 流的概念
2.2过渡
2.3 OpenFlow v1.0协议
2.3.1 Openflow流表
2.3.2 OpenFlow安全通道
2.3.3 openflow协议消息
主动网络包含网络可编程,但是有一点激进(为什么说它激进呢?)
主动网络的基本思想,打破传统网络只能被动传输信息的模式,允许网络中的节点再用户数据上执行用户所需的计算。例如主动网络的用户可以向网络中的主动节点(如路由器)发送一个定制化的压缩程序,并要求该节点收到相应的包时都执行这个压缩程序。DARPA主动网络架构可以划分为三个主要层次:主动应用AA,执行环境EE和节点操作系统Node OS。
主动应用是一个协议的程序代码,它通过主动分组加载到主动节点中,并在主动节点中对分组进行转发和计算来完成某种通信功能。执行环境EE是在NODE OS上的一个用户级操作系统,可以同时支持多个A的执行,并负AA之间的胡香格里。EEAA提供了一个可调用的编程接口。一个主动网络节点可以具有多个执行环境,每一种执行环境完成一种特定的功能。节点操作系统类似于一般操作系统的内核,位于主动网络节点最底层的功能层次,管理和控制对主动网络节点硬件资源的使用。
EEE在Node OS中可一并发的支持多个EE,协调EE对节点中可利用资源(内存区域、CPU周期、链路贷款等)的使用。
一般来说,主动望楼包括两种主要的数据模型:
(1)封装模型:节点的可执行代码被封装在数据分组内,为in-band方式。这种模型利用数据分组 携带代码从而在网络中添加洗呢功能,同时使用缓存来改善代码分发的效率,而可编程路由器根据数据分组的分组头由管理器定义一系列的操作。报文到达交换机或路由器后,报文中的代码就会被分发到每个交换机的可执行环境中。然后控制交换机的行为或者修改报文。
(2)可编程路由器/交换机模型:节点的可执行代码和数据分组分离,网络中分为传统节点和主动网络节点,主动网络节点可以根据用户定义的行为对数据报文进行计算和发送,这是把具体代码下发到交换设备?(QUESTION)。
像防火墙、代理这些需要对数据分组进行计算、分析的服务也是主动网络的应用。加快新标准和新技术的实现,简单了。
SDN的编程接口主要体现在北向接口上,北向接口提供大量API,开发阿哲可以在此基础上设计自己的应用而不必关心底层寄存驱动等硬件细节。
SDN南向接口用于控制器和转发设备建立双向会话,通过不同的南向接口协议,SDN控制器就可以兼容不同的硬件设备,同时可以在设备中实现上层应用的逻辑。
SDN的东西向接口主要用于控制器集群内部控制器之前的通信,用于增强整个控制平面的可靠性和可拓展性。
SDN北向接口是上层一能用域控制器交互的接口,可以使基于控制器本身提供的各种接口API函数,也可以是现在最为流行的REST(表征状态转移)API。北向接口设计要密切考虑业务应用那个的需求,为业务提供底层网络的逻辑抽象和模型。
南向接口已有OPENFLOW等诸多标准,但是北向接口方面还缺少一个业界公认的标准。
SDN南向接口协议是集中式的控制平面和分布式的转发设备之间进行交互的接口协议,用于实现控制器对底层设备的管控。
SDN交换机需要与控制平面进行协同后才能工作,而与之相关的消息 都是通过南向接口协议传达的。
当前,SDN中最为成熟的南向接口协议是ONF组织倡导的OPENFLOW协议。openflow协议让控制平面可以完全控制数据平面的转发行为,同时ONF还提出了OF-CONFIG协议,用于对SDN交换机进行远程配置和管理,其目标都是为了更好地对分散不熟的SDN交换机进行集中化管控。XMPP,PCEP,I2RS,LISP等厂商协议。
它可以是分布式的,因此需要一种接口协议来负责控制器之间的通信。SDN东西向接口主要解决了控制器之间物理资源共享、身份认证、授权数据库间协作以及保持控制逻辑一致性等问题,实现多域间控制信息交互,从而实现底层基础设施透明化的多控制器组网策略。目前在SDN的东西向接口的研究方面,产业界还没有形成统一的标准。
控制平面全局网络视图构建是SDN东西向接口设计必须考虑的关键问题。控制平面能够对全网资源进行统一管理,利用控制平面的这个特性可以动态创建并微黄罗全局视图,将网络以最直观的形式呈现给网络管理者,极大地提高网关效率,简化故障定位,降低网管的复杂度,有利于网络管理者基于全局视图进行资源抽象,从而对业务适配层提供虚拟化的网络资源。
Ethane作为SDN技术的雏形。
(1)SDN应用多集中在对控制平面的编程上,上层应用通过北向接口与控制器交互,然后控制器再通过南向接口与底层硬件交互,这样降低了程序与硬件的耦合程度,只需要实现不同的南向协议就可以在不同的硬件环境上执行相同的功能。
而主动网络很多早起应用思路集中在中间件、防火墙、代理上,这些应用都需要分开部署,每个都有各自的编程模型。主动网络主要是在数据平面上增加可编程性,程序和数据平面耦合性较高,试图直接控制数据平面来实现这些功能。
(2)SDN有一些明确的应用场景,如在数据中心和网络试验床中。主动网络的应用主要在中间件和对数据平面的控制上,总体来说主动网络的应用场景相对狭窄。
(3)SDN出现时硬件技术能基本支撑它的发展。
(4)SDN的发展方向更为明确,SDN将目标放在为网络管理者和应用开发者提供强大的编程能力上,真正做到了为开发者提供一整套编程接口,让网络有强大的可编程能力 ,从而让开发者能在网络中加入自己新的服务,专注于编程与服务。
OPENFLOW在现有的协议基础上提供编程能力做得很好,它只是在现有的硬件的基础上进行改进,提供了一套方便的管理协议 ,而不是大规模的革新现有网络数据平面中的,这时的网路有一个相对平缓的演进。主动网络过分关注编程语言以及数据分组中怎样更加安全的携带代码。且主动用户主要是为端用户提供服务 ,而不是网络的管理者。
问题在于SDN强大的可编程性需要数据平面的转发设备来支撑,只有转发设备提供了丰富的功能,SDN才能真正提供强大的编程能力。但是目前主流的设备厂商都有自己的交换芯片,转发设备数据模型的设计也各不相同,这就导致了SDN功能实现起来复杂度较高。
openflow v1.3协议中规定的多级流表,许多硬件厂商受到自己设备原始设计的限制,很难提供足够的支持,目前普遍支持的只有能力受限的两级流表。也就是说,SDN所定义的一些基本能力转发设备可以很好地满足,但是很多高级的能力还不成。
这就需要设备能即使把自己的能力和所提供的操作及时上报给控制器,如所支持的流表大小、分组头匹配范围等,是控制器可以根据转发设备不同的能力来调整开放部分的变鞥能力,优化底层实现的效率。
OpenFlow是由NICK McKeown推入大众视野的。
OpenFlow是基于网络中“流”的概念设计的一种SDN南向接口协议。
IP 网络是一种基于数据分组转发的分组交换网络,一次网络通信会产生大量的数据分组,虽然数据分组之间存在联系,但是传统网络设备对他们的处理却是独立的,这大大降低了处理的效率。如果能通过提取出这次通信产生的数据分组的共同特征(如MAC地址、IP地址等),把他们抽象成一个“流”,让网络设备统一看待这些数据分组,将能很好的解决效率低的问题。
SDN核心思想史数据是控制分离,在OPENFLOW引入了“流”的概念后,控制器可以依据某次通信中流的第一个数据分组的特征,使用openflow协议提供的接口对数据平面设备(openflow交换机,简称OPF交换机)部署策略——openflow称之为流表。
而这次通信的后续流量则按照相应流表在硬件层次上进行匹配、转发,从而实现了灵活而网络转发平面策略,网络设备不再受固定协议的约束,即软件与硬件“解耦”,体现了SDN控制与数据分离的核心思想。
OF交换机利用基于安全连接的openflow协议与控制器互相通信。在这个版本协议中,流表、安全通道与openflow协议是最为核心的概念。
流表是一些针对特定“流”的策略表现的集合没负责数据分组的查询和转发。
OF交换机通过安全通道与控制器相连,安全通道传输的就是openflow协议消息,负责控制器与交换机间的交互。
很好,安全通道没有提及(QUESTION)。
openflow控制器通过部署流表来指导数据平面流量。openflow v1.0中每台OF交换机只有一张流标,这张流表中存储着许多的表现,每一个表现都表征了一个流机器对应的处理方法——动作表(action),一个数据分组进入OF交换机后需要先匹配流表,若符合其中某条表象的特征,则按照响应的动作进行转发,否则封装为packet-in消息通过安全通道交给控制器,再由控制器决定如何处理,例如是否封装flow-mod消息下发新的流表项。另外,每条刘彪都存在一个有效期,过期之后流表会自动删除。
本小节分析流表的结构与数据分组进入OF交换机后的匹配过程提到的具体的openflow消息累心请参考2.3.3节内容。
(1)流表项的结构
分别是应用于数据分组匹配的分组头域(head field),用于统计流表匹配情况的计数器(counter),还有匹配表项后需要对数据分组执行的动作表。
(2)分组头域
分组头域是数据分组匹配流表项时参照的依据,作用类似于传统交换机进行二层交换式匹配数据分组的MAC地址、路由器进行三层路由是匹配的IP地址。
在Openflow v1.0中,流表项的分组头与包括了12个字段,协议称其为12元组,它提供了一到四层的网络控制信息,包括入端口,以太网原地址、以太网目的地址。以太网帧类型、Vlan标识、vlan优先级、源IP地址、目的IP地址、破数据分组类型、服务类型TOS、传输层源端口号/ICMP类型,传输层目的端口号?ICMP码值。
每个元组都有其对应的适用场景,数值的长度不尽相同,可以是一个确定的值,也可以为“any” 匹配任意值,其中的IP地址还可以指定子网掩码以便完成更为精确的匹配。需要指出的是,入端口(ingress port)不属于二~四层的概念,它是数据分组进入OF交换机的物理端口的标识,可看做数据分组在一层的标识。
(3)计数器,流表项中的计数器用来统计相关“流”的一些信息,例如查找次数、收发组数、生存时间等。另外,openflow针对每张表、每个流表项、每个端口、每个队列也都会维护他们相应的计数器,具体信息如下:
(4)动作表
动作表指定了OF交换机处理和“流”的行为。相比于传统网络设备对数据分组只能进行较为单一的转发操作,流表项根据指定动作字段来指导OF交换机如何处理“流”。
动作表可以包含0个或多个从动作,交换机会按照这些都能做的先后顺序依次执行,如果其中不包含转发送做的话,数据分组就会被丢弃调。但是openflow v1.0无法保证不同的数据分组的发送顺序。动作可以分为两个类型:必选动作和可选动作,必选动作是默认支持而,二交换机需要通知控制器它支持额可选动作。另外,当流表项中存在IF交换机不支持的动作时将想控制器返回错误消息。
根据支持的动作类型的不同,openflow的交换机分为两类,一类是openflow专用交换机,另一类是支持openflow的交换机,前者不支持使用normal端口对数据分组按照传统二、三层策略转发,后者则可以运行传统的二、三层协议对特定的“流”进行处理。
类型 | 名称 | 说明 | |||||||
必选动作 | 转发 | 交换机必须支持将数据分组转发给设备的物理端口及下面的虚拟端口。 | |||||||
ALL:数据分组复制为多份转发到所有端口(不包括入口,不考虑最小生成树); | |||||||||
CONTROLLER:将数据分组封装为packet-in消息并转发给控制器。 | |||||||||
LOCAL:转发给本地网络栈; | |||||||||
TABLE:对控制器packet-out数据分组执行刘表的匹配; | |||||||||
IN_PORT:把数据分组从它的入端口发回去。 | |||||||||
丢弃 | 没有明确指明处理行动的表项,所匹配的所有网分组默认被丢弃。 | ||||||||
可选动作 | 转发 | NORMAL:按照OF交换机所支持的传统交换机的二层或三层策略进行转发; | |||||||
FLOOD:通过最小生成树从出口翻红发出,但不包括入口。 | |||||||||
入队 | 将分组转发到某个端口上已配置好的队列中,队列的配置openflow无法实现。 | ||||||||
修改域 | 交换机将修改数据分组的分组头,可以为12元组中的任意字段。 |
(5)流表的匹配
当接收一个数据分组后,为了避免交换机互联可能导致的广播风暴,一些OF交换机会选择支持生成树协议(STP)QUESTION,这样的话,所有的经由物理端口进入交换机的分组,在分组头解析之前首先都会进行传统的生成树处理,然后再进行分组头解析。
分组头解析是为了得到所受到的数据分组的12元组,这个流程是复杂的。如下图所示,OF交换机首先根据收到的数据分组解析出它的输入端口、以太网原地址、目的地址和协议类型,根据以太网类型得到vlan或三层IP的信息,再根据IP分组头中的协议类型得到ICMP信息或四层的源、目的端口号;得到了数据分组的12元组,就可以用它与流表项中的分组头域进行匹配。
在初始化分组头时,设置输入端口,以太网源地址、目的地址以及类型,将其他字段值设为0。
openflow v1.0中OF交换机一个只有一张流表。
该协议规定只要数据分组匹配上一条表项,就立即跳出匹配流程执行相应动作表,因此OF交换机要对控制下发的流表项的匹配顺序进行优化,分组头域中确定的字段啊越多,就代表精度越高,应该优先进行匹配。例如,流表项A匹配目的IP地址1.0.0.1的数据分组,另一条流表项B匹配的目的IP地址为1.0.0.1同时TCP目的端口号为80的数据分组,那么去往1.0.0.1的80端口的数据分组会优先被表项B处理,因为相比于A来说B的精度更高,尽管两条表象都是默认优先级。
所有表N设定为个表象的分组头域精度不同产生的不同匹配优先级。
表0 包括精准匹配(即有设置匹配掩码位。关于掩码,openflow消息类型小结中对flow-mod的介绍)的表项,匹配时它们具有最高优先级。如果所有的流表项都无法与该数据分组匹配,则会被封装为packet-因消息上交给控制器,封装时一般只携带原始数据分组的分组头控制信息,而其中的数据被存在OF交换机的本地缓存中等待后续的处理。
(6)总结
流表介绍到此为止。
流表是OF叫花鸡上对数据转发逻辑的抽象,是交换机进行转发策略控制的核心数据结构,交换芯片通过查找流表表项对进入交换机的网络流量进行决策并执行和试点。
流表的功能于传统交换机中的二层Mac地址表,路由器中的三层IP路由表类似,但是流表可以同时包含更多层次的网络特征,而且是由网络管理者通过控制器编程定义的,不再受限于随设备出场的操作系统。
通过部署面向各种网络服务的流表,一台交换机可集交换、路由、防火墙网关等功能于一身,极大地提高了网络部署的灵活性。
openflow安全通道承载着openflow协议的消息,不管是流表的下发还是其他的控制消息都要经过这条通道。这部分流量属于openflow网络的控制信令。
为了保证“本地流量”安全可靠的传输,openflow v1.0中规定通道建立在tcp连接上,采用TLS安全传输层协议进行加密。本小节将从安全openflow通道的建立与维护两个方面对其进行介绍。
(1)openflow安全通道的建立
openflow控制器开启tcp的6633端口等待交换机的链接,当交换机启动时,尝试连接到指定控制器的6633端口。为了保证安全性,双方需要通过交换证书进行认证。因此,每个交换机至少需要配置两个证书,一个用来认证控制器,另一个用来想控制器发出认证。
当认证通过后,两边发送握手消息给对方,该消息携带支持的最高协议版本号,接收方将采用双方都支持的最低协议版本进行通信。一旦发现两者拥有共同支持的协议版本,则建立安全通道;否则发送错误消息,描述失败原因,并终止连接。
(2)openflow安全通道的维护
安全通道建立以后,交换机与控制器通过消息协商一些参数,并定时交换一些“保活”(keep alive)的消息来维持连接。
当连接发生异常时,交换机尝试连接备份的控制器(至于备份控制器如何指定,不再OF协议规定范围内),当多次尝试均失败后没交换机将进入紧急模式,并重置所有的tcp连接。此时,所有分组将匹配制定的紧急模式表项,其他所有正常表项将从流表中删除。此外,当交换机刚启动时,默认进入紧急模式。
有了这条通道,控制器与交换机之间就可以交互openflow消息了,下面看openflow v1.0协议中都规范了哪些消息类型。
openflow v1支持三种消息类型:controller-to-switch (控制器-交换机)、asynchronous(异步)和symmetric(对称),每一类消息又有多个自熊希类型。下面将分类介绍这三种消息类型。
其中各消息的具体格式请读者参见官方文档。
此处不细讲。
控制器-交换机消息由控制器发起,包括特征、配置等几类消息,用于对OF交换机的管理。控制器通过其中各种请求(request)消息来查询of交换机的状态,需回复相应的响应reply消息。
features消息类型是在安全通道建立以后,控制器立即发送features-request消息给交换机以获得它支持的特性。
同步消息可由控制器或OF交换机中的任意一侧发起,这类消息包括以下三中类型。
1.hello消息
认证通过后,双方通过握手消息hello简历安全通道。该消息携带发送方支持的最高协议版本号,接收方将采用双方都支持的最低协议版本进行通信。一旦发现两者拥有共同支持的协议版本则建立安全通道,否则则发送错误消息hello-failed,描述失败原因。
2.echo消息
echo消息用于保活。
等等。