OpenFlow与SD-WAN
Posted 姜小河
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenFlow与SD-WAN相关的知识,希望对你有一定的参考价值。
转载:https://www.cnblogs.com/wn1m/p/11281781.html
SD-WAN(Software Defined Wide Area Network, 软件定义的广域网)将企业的分支、总部和多云之间互联起来,应用在不同混合链路(MPLS,Internet,5G,LTE等)之间选择最优的进行传输,提供优质的上云体验。
1.1 软件定义网络是什么?
当组织将网络配置从设备迁移到软件平台时,交换机就变得更加简单和廉价了。但是主要的受益是网络配置可以由中央控制器管理。
控制者是一个包含算法、数学、分析和规则的软件,它来自规则组,并使用OpenFlow将配置下载到网络设备中。因此,当控制器评估和重新平衡配置时,网络就可能动态地进行重新配置。这就是所谓的软件定义网络。
1.2 SDN(Software Defined Network):
它是基于OpenFlow实现的。在SDN中,交换设备的数据转发层和控制层是分离的,因此网络协议和交换策略的升级只需要改动控制层。OpenFlow在OpenFlow交换机上实现数据转发,而在控制器上实现数据的转发控制,从而实现了数据转发层和控制层的分离。基于OpenFlow实现SDN,则在网络中实现了软硬件的分离以及底层硬件的虚拟化,从而为网络的发展提供了一个良好的发展平台。
1.3 OpenFlow网络由OpenFlow交换机、FlowVisor和Controller三部分组成。
OpenFlow交换机进行数据层的转发;
FlowVisor对网络进行虚拟化;
Controller对网络进行集中控制,实现控制层的功能。
OpenFlow交换机是整个OpenFlow网络的核心部件,主要管理数据层的转发。OpenFlow交换机接收到数据包后,首先在本地的流表上查找转发目标端口,如果没有匹配,则把数据包转发给Controller,由控制层决定转发端口。
OpenFlow是一套软件API,它允许一个“控制器”将配置信息发送给交换机。这个配置往往指的是一个“流”及其附属的某些“操作”。
“流”是一组定义的帧或者数据包(类似于一个MPLS流)与一组操作。例如:
Source IP/Port、Destination IP/Port和Drop。
Source IP、Destination IP和QoS Action。
Source MAC、Destination MAC和L2 Path。
通过OpenFlow,您可以将一组规则发送给一台“配置”设备的交换机或者路由器。然后每个设备会根据它的类型使用这些数据。交换机会更新它的MAC地址表以转发帧,路由器会添加访问列表,而防火墙会更新它的规则。
1.4 Controller
OpenFlow实现了数据层和控制层的分离,其中OpenFlow交换机进行数据层的转发,而Controller实现了控制层的功能。Controller通过OpenFlow协议这个标准接口对OpenFlow交换机中的流表进行控制,从而实现对整个网络进行集中控制。Controller的这一切功能都要通过运行NOX来实现,因此NOX就像是OpenFlow网络的操作系统。此外,在NOX上还可以运行Plug-n-serve、OpenRoads以及OpenPipes等应用程序。
Plug-n-Serve 通过规定数据传输路径来控制网络以及服务器上的负载,从而使得负载均衡并降低响应时间。
OpenRoads 是支持OpenFlow无线网络移动性研究的框架。
OpenPipes 可以在网络系统中通过移动每个子模块来测试每个子模块,并可以决定如何划分设计单元。
1.5 OpenFlow交换机的组成
OpenFlow交换机由流表、安全通道和OpenFlow协议三部分组成。
安全通道是连接OpenFlow交换机到控制器的接口。控制器通过这个接口控制和管理交换机,同时控制器接收来自交换机的事件并向交换机发送数据包。交换机和控制器通过安全通道进行通信,而且所有的信息必须按照OpenFlow协议规定的格式来执行。
OpenFlow协议用来描述控制器和交换机之间交互所用信息的标准,以及控制器和交换机的接口标准。协议的核心部分是用于OpenFlow协议信息结构的集合。
OpenFlow协议支持三种信息类型:Controller-to-Switch,Asynchronous和Symmetric,每一个类型都有多个子类型。
a) Controller/Switch消息,是指由Controller发起、Switch接收并处理的消息,主要包括Features、Configuration、Modify-State、Read-State、Packet-out、Barrier和Role-Request等消息。这些消息主要由Controller用来对Switch进行状态查询和修改配置等操作。
b) 异步(Asynchronous)消息,是由Switch发送给Controller、用来通知Switch上发生的某些异步事件的消息,主要包括Packet-in、Flow-Removed、Port-status和Error等。例如,当某一条规则因为超时而被删除时,Switch将自动发送一条Flow-Removed消息通知Controller,以方便Controller作出相应的操作,如重新设置相关规则等。
c) 对称(Symmetric)消息,顾名思义,这些都是双向对称的消息,主要用来建立连接、检测对方是否在线等,包括Hello、Echo和Experimenter三种消息。
另外出于安全和高可用性等方面的考虑,OpenFlow的规范还规定了如何为 间的信道加密、如何建立多连接等(主连接和辅助连接)。
1.6 OpenFlow交换机的分类
按照对OpenFlow的支持程度,OpenFlow交换机可以分为两类:
专用的OpenFlow交换机:
它是专门为支持OpenFlow而设计的。它不支持现有的商用交换机上的正常处理流程,所有经过该交换机的数据都按照OpenFlow的模式进行转发。专用的OpenFlow交换机中不再具有控制逻辑,因此专用的OpenFlow交换机是用来在端口间转发数据包的一个简单的路径部件。
支持OpenFlow的交换机:
它是在商业交换机的基础上添加流表、安全通道和OpenFlow协议来获得了OpenFlow特性的交换机。其既具有常用的商业交换机的转发模块,又具有OpenFlow的转发逻辑,因此支持OpenFlow的交换机可以采用两种不同的方式处理接收到的数据包。
所有OpenFlow的规则都被组织在不同的FlowTable中,在同一个FlowTable中按规则的优先级进行先后匹配。一个OpenFlow的Switch可以包含一个或者多个FlowTable,从0依次编号排列。OpenFlow规范中定义了流水线式的处理流程,如下图所示。当数据包进入Switch后,必须从FlowTable 0开始依次匹配;
FlowTable可以按次序从小到大越级跳转,但不能从某一FlowTable向前跳转至编号更小的FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作--比如跳转至后续某一FlowTable继续处理,修改或者立即执行该数据包对应的Action Set等。
当数据包已经处于最后一个FlowTable时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。
OpenFlow规范主要分为如下四大部分,
1. OpenFlow的端口(Port)
OpenFlow规范将Switch上的端口分为3种类别:
a) 物理端口,即设备上物理可见的端口;
b) 逻辑端口,在物理端口基础上由Switch设备抽象出来的逻辑端口,如为tunnel或者聚合等功能而实现的逻辑端口;
c) OpenFlow定义的端口。OpenFlow目前总共定义了ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、
NORMAL和FLOOD等8种端口,其中后3种为非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同时支持传统网络协议栈和OpenFlow协议的Switch设备中存在。
“Type1”交换机:支持复杂的网络试验,“Type1”交换机将具有一个新的功能集合。
所有OpenFlow的规则都被组织在不同的FlowTable中,在同一个FlowTable中按规则的优先级进行先后匹配。一个OpenFlow的Switch可以包含一个或者多个FlowTable,从0依次编号排列。OpenFlow规范中定义了流水线式的处理流程,如下图所示。当数据包进入Switch后,必须从FlowTable 0开始依次匹配;
FlowTable可以按次序从小到大越级跳转,但不能从某一FlowTable向前跳转至编号更小的FlowTable。当数据包成功匹配一条规则后,将首先更新该规则对应的统计数据(如成功匹配数据包总数目和总字节数等),然后根据规则中的指令进行相应操作--比如跳转至后续某一FlowTable继续处理,修改或者立即执行该数据包对应的Action Set等。
当数据包已经处于最后一个FlowTable时,其对应的Action Set中的所有Action将被执行,包括转发至某一端口,修改数据包某一字段,丢弃数据包等。OpenFlow规范中对目前所支持的Instructions(指令)和Actions进行了完整详细的说明和定义。另外,OpenFlow规范中还定义了很多其他功能和行为,比如OpenFlow对于QoS的支持(即MeterTable和Meter Bands的定义等),对于GroupTable的定义,以及规则的超时处理等。
1.7 OpenFlow规范主要分为如下四大部分,
1) OpenFlow的端口(Port)
OpenFlow规范将Switch上的端口分为3种类别:
a) 物理端口,即设备上物理可见的端口;
b) 逻辑端口,在物理端口基础上由Switch设备抽象出来的逻辑端口,如为tunnel或者聚合等功能而实现的逻辑端口;
c) OpenFlow定义的端口。OpenFlow目前总共定义了ALL、CONTROLLER、TABLE、IN_PORT、ANY、LOCAL、
NORMAL和FLOOD等8种端口,其中后3种为非必需的端口,只在混合型的OpenFlow Switch(OpenFlow-hybrid Switch,即同时支持传统网络协议栈和OpenFlow协议的Switch设备中存在。
2)OpenFlow的FlowTable(国内有直译为“流表”的)
OpenFlow通过用户定义的或者预设的规则来匹配和处理网络包。一条OpenFlow的规则由匹配域(Match Fields)、优先级(Priority)、处理指令(Instructions)和统计数据(如Counters)等字段组成,如下图所示。
Openflow的思路:网络设备维护一个FlowTable并且只按照FlowTable进行转发,Flowtable本身的生成、维护、下发完全由外置的Controller来实现,注意这里的FlowTable并非是指IP五元组,事实上OpenFlow 1.0定义的了包括端口号、VLAN、L2/L3/L4信息的10个关键字,但是每个字段都是可以通配的,网络的运营商可以决定使用何种粒度的流,比如运营商只需要根据目的IP进行路由,那么流表中就可以只有目的IP字段是有效的,其它全为通配。
这种控制和转发分离的架构对于L2交换设备而言,意味着Controller将负责二层MAC学习,VLAN划分,还要负责三层路由协议的学习,最后下发给路由器和交换机,对于L3设备,各类IGP/EGP路由运行在Controller之上,Controller根据需要下发流表(对于L3应该是路由表)给相应的路由器。
流表的下发方式有两种模式:
主动: Controller将自己收集的流表信息主动下发给网络设备,随后网络设备可以直接根据流表进行转发;
被动:是指网络设备收到一个报文没有匹配的FlowTable记录时,将该报文转发给Controller,由后者进行决策该如何转发,并下发相应的流表。被动模式的好处是网络设备无需维护全部的流表,只有当实际的流量产生时才向Controller获取流表记录并存储,当老化定时器超时后可以删除相应的流表,故可以大大节省TCAM空间。当一个Controller同时控制多个交换机/路由器设备时,它们看起来就像一个大的逻辑交换机,各个交换机/路由器硬件就如同这个逻辑网络设备的远程线卡。
1.8 OpenFlow之下的网络架构组成:
目前主要的OpenFlow解决方案包含一个三层架构,第一层架构由关键的具备OpenFlow 协议许可的以太网交换机组成。具备OpenFlow功能的物理以太网交换机。我们还能看到一些具备OpenFlow功能的虚拟层/软件交换机和路由器。
然后是两层服务器端软件:OpenFlow控制器和OpenFlow软件应用建立在控制器顶端。
控制器是一个平台,该平台向下可以直接与使用OpenFlow协议的交换机进行对话。向上,控制器可为OpenFlow软件应用提供大量功能,包括将交换机资源编入统一的网络视窗内,为应用提供协同和通用库。
在顶层,OpenFlow软件应用为网络执行实际控制功能,如交换与路由。应用是写在由控制器提供的统一网络视窗和通用库顶层的简单软件。因此,这些应用能够着重执行特定控制算法,并能够调整其下层的OpenFlow层以实例化网络中的算法。
1.9 SDN
SDN实现网络虚拟化需要完成三部分工作: 物理网络管理,网络资源虚拟化和网络隔离
1)虚拟化平台:是介于数据网络拓扑和租户控制器之间的中间层。面向数据平面,虚拟化平面就是控制器,而面向租户控制器,虚拟化平台就是数据平面。所以虚拟化平台本质上具有数据平面和控制层面两种属性。在虚拟化的核心层,虚拟化平台需要完成物理网络资源到虚拟资源的虚拟化映射过程。面向租户控制器,虚拟化平台充当数据平面角色,将模拟出来的虚拟网络呈现给租户控制器。从租户控制器上往下看,只能看到属于自己的虚拟网络,而并不了解真实的物理网络。而在数据层面的角度看,虚拟化平台就是控制器,而交换机并不知道虚拟平面的存在。所以虚拟化平台的存在实现了面向租户和面向底层网络的透明虚拟化,其管理全部的物理网络拓扑,并向租户提供隔离的虚拟网络。
虚拟化平台不仅可以实现物理拓扑到虚拟拓扑“一对一”的映射,也应该能实现物理拓扑“多对一”的映射。而由于租户网络无法独占物理平面的交换机,所以本质上虚拟网络实现了“一虚多”和“多虚一”的虚拟化。此处的“一虚多”是指单个物理交换机可以虚拟映射成多个虚拟租户网中的逻辑交换机,从而被不同的租户共享;“多虚一”是指多个物理交换机和链路资源被虚拟成一个大型的逻辑交换机。即租户眼中的一个交换机可能在物理上由多个物理交换机连接而成。
2)为实现网络虚拟化,虚拟化平台需要对物理网络资源进行抽象虚拟化,其中包括 拓扑虚拟化,节点资源虚拟化和链路资源虚拟化
• 拓扑虚拟化【核心: 将物理节点映射给一个或多个用户/租户】
拓扑虚拟化是网络虚拟化平台最基本的功能。虚拟平台需要完成租户虚网中的虚拟节点和虚拟链路到物理节点和链路的映射。其中包括“一对一”和“一对多”的映射。
“一对一”的映射中,一个虚拟节点将会映射成一个物理节点,同理虚拟链路也是。
“一对多”的映射中,一个虚拟节点可以映射成由多个连接在一起的物理节点;一条逻辑链路也可能映射成由链接在一起的多条链路。而对于物理节点而言,一个物理节点可以被多个逻辑节点映射。
• 节点资源虚拟化【核心: 控制每个用户/租户能使用物理设备上多少资源】
节点资源的虚拟化包括对节点Flow tables(流表)、CPU等资源的抽象虚拟化。
流表资源本身是交换机节点的稀缺资源,如果能对其进行虚拟化,然后由虚拟化平台对其进行分配,分配给不同的租户,那么就可以实现不同租户对节点资源使用的分配和限制。拓扑抽象仅仅完成了虚拟节点到物理节点的映射,而没有规定不同用户/租户对物理节点资源使用的分配情况。若希望进行更细粒度的网络虚拟化,节点资源虚拟化非常有必要。
• 链路资源虚拟化【核心: 控制不同用户/租户能使用多少链路带宽,端口队列长度】
和节点资源一样,链路资源也是网络中重要的资源,而拓扑抽象并没有规定某些用户可使用的链路资源的多少。所以在进行更细粒度的虚拟化时,有必要对链路资源进行虚拟化,从而实现链路资源的合理分配,这样就能够抽象虚拟化的链路资源包括租户可使用的带宽以及端口的队列资源等等。
3)网络隔离:网络资源虚拟化仅仅完成了物理资源到虚拟资源的抽象过程,为实现完全的网络虚拟化,还需要对不同的租户提供隔离的网络资源。网络隔离需要对SDN的控制平面和数据平面进行隔离,从而保证不同租户控制器之间互补干扰,不同虚网之间彼此隔离。此外,为了满足用户对地址空间自定义的需求,虚拟化平台还需要对网络地址进行虚拟化。
4)控制面隔离:控制器的性能对SDN整体的性能产生极大的影响,所以虚拟化平台需保证租户的控制器在运行时不受其他租户控制器的影响,保证租户对虚拟化平台资源的使用。虚拟化平台在连接租户控制器时需保证该进程可以得到一定的资源保障,比如CPU资源。而虚拟化平台本身所处的位置就可以轻易实现租户的控制器之间的相互隔离。
5)数据面隔离:数据面的资源包括节点的CPU、Flow Tables等资源以及链路的带宽,端口的队列资源等。为保证各个租户的正常使用,需对数据面的资源进行相应的隔离,从而保证租户的资源不被其他租户所占据。若在数据面上不进行资源的隔离,则会产生租户数据在数据面上的竞争,从而无法保障租户对网络资源的需求,所以很有必要在数据面对资源进行隔离。
6)地址隔离:为使租户能在自己的虚拟租户网中任意使用地址,虚拟化平台需要完成地址的隔离。实现地址隔离主要通过地址映射来完成。租户可任意定制地址空间,而这些地址对于虚拟化平台而言是面向租户的虚拟地址。虚拟化平台在转发租户控制器南向协议报文(即:发送的报文)时,需要将虚拟地址转化成全网唯一的物理地址。租户的服务器的地址在发送到接入交换机时就会被修改成物理地址【注意: 这里不是NAT转换地址,而是通过FlowTable来修改报文字段的】,然后数据包的转发会基于修改之后的物理地址进行转发。当数据到达租户目的地址主机出端口,控制器需将地址转换成原来租户设定的地址,从而完成地址的虚拟化映射。地址的虚拟化映射使得租户可以使用完全的地址空间,可以使用任意的FlowSpace(流空间:流表匹配项所组成的多维空间),而面向物理层面则实现了地址的隔离,使得不同的租户使用特定的物理地址,数据之间互不干扰。
SDN的摘录补充:
核心是SDN拥有一个集中或分布式智能实体,具有网络的整体视图,可以根据该视图做出路由和切换决策。通常网络路由器和交换机只知道它们的相邻网络设备。但是通过正确配置的SDN环境,该中央实体可以控制一切,轻松更改策略,简化整个企业的配置和自动化。
网络可以分为两部分,一部分可以是面向公众的低安全性网络,在这部分网络中不会触及任何敏感信息。另一个细分的网络可以通过基于软件的防火墙和加密策略实现更细粒度的远程访问控制,允许敏感数据在该网络上传输。如果客户拥有一个物联网组,但该网络在安全性方面并不是那么成熟,通过SDN控制器,您可以将该组从企业关键流量中分离出来,SDN用户可以在网络范围内推出从数据中心到边缘的安全策略,在白盒子上完成所有这些工作部署可以比传统设备便宜30-60%。
OpenFlow实现上面架构的核心:
OpenFlow规范实际上是一整套软件应用程序接口,控制网络数据如何转发,可基于硬件实现,OpenFlow增加了定制转发数据的控制程度,减少了支撑复杂控制所需的硬件成本。OpenFlow网络控制节点可以通过规范与支持OpenFlow的交换节点沟通配置信息,决定数据转发平面的转发表,控制器与转发节点间通过SSL加密传输。OpenFlow支持定义的“信息流”主要是从1层到4层的关键信息包括端口号、VLAN、MAC、以太网包头、IP地址、 IP协议号、TCP端口号等。配置信息通常包括“信息流”和与之对于的动作。每个“信息流”有符合某种特征的数据包及动作组成,比如源IP/源Port,目的IP/目的Port,5种不同转发动作。
OpenFlow架构图:
用户可以通过OpenFlow预设通用规则,每种不同网络节点可以根据设备特点更新转发平面规则,比如转发交换机更新MAC地址转发表、VLAN端口转发表、1到4层转发表,路由器修改访问控制IP列表,防火墙修改进出端口规则等。
这里就是OpenFlow可定义规则的10元组:
二·、 安全通道
安全通道通过TLS来实现。OpenFlow控制器和OpenFlow交换机使用服务器证书和客户端证书进行认证。对连接目标、连接源以及证书正确性的确认则依赖于具体实现。为了建立连接,需要事先对OpenFlow交换机设置OpenFlow控制器的IP地址及TCP端口号。
2.1 安全通道的建立和初始设置:
1)有OpenFlow交换机对OpenFlow控制器建立未加密的TCP连接或基于TLS的连接。
2)确定安全通道中要使用的OpenFlow版本
3)握手
4)交换其他必要的设置等
2.2 确定安全通道中要使用的OpenFlow版本
建立安全通道后,OpenFlow交换机和OpenFlow控制器都将发送Hello消息。
2.3 握手
OpenFlow控制器向OpenFlow交换机发送问询功能的Features请求消息,OpenFlow交换机返回Features响应消息,从而完成握手。
2.4 各种消息
SET-CONFIG 消息:交换机发送SET_CONFIG消息以发送设置消息,或发送GET_CONFIG请求以查询OpenFlow交换机的设置状态。OFPC_FRAG_NORMAL、 OFPC_FRAG_DROP、OFPC_FRAG_REASM、OFPC_FRAG_MASK:不对碎片进行特别处理、丢弃IP碎片、对IP碎片进行重组、未说明。
FLOW-MOD 消息:(设置流表项的消息)可对流表项进行添加、删除、变更设置等操作。OFPFC_ADD、OFPFC_MODIFY、OFPFC_MODIFY_STRICT、OFPFC_DELETE、OFPFC_DELETE、OFPFC_DELETE_STRICT:对应数值0-4,对应功能:添加新的流表项、变更匹配的流表项的设置、仅变更完全匹配的流表项的设置、删除匹配的流表项、仅删除完全匹配的流表项。数据包匹配、通配符、行动。
Packet-In 消息:为了将到达OpenFlow交换机的数据包发送至OpenFlow控制器。使用场景:不存在与流表项一致的项目时;匹配的流表项中记载的行动为“发送至OpenFlow控制器”时。
Packet-out 消息:从OpenFlow控制器向OpenFlow交换机发送的消息是包含数据包发送命令的消息。
Port-Status 消息:在OpenFlow交换机中添加、删除或修改物理端口时,需要发送Port-Status消息来通知OpenFlow控制器。
Flow-Removed消息:当OpenFlow交换机中设置的流表项超时时,OpenFlow交换机要向OpenFlow控制器发送Flow-Removed消息。
Error消息:通知出现了某种错误。OFPET_HELLO_FAILED、OFPET_BAD_REQUEST、OFPET_BAD_ACTION、OFPET_FLOW_MOD_FAILED、 OFPET_PORT_MOD_FAILED、OFPET_QUEUE_OP_FAILED,对应数值:0-5,对应的内容为hello协议失败、无法解读请求、行动的描述中包含错误、变更流表项时发生问题、Port-Mod请求失败、队列操作失败。
Barrier消息:目的是掌握消息的处理程度。
Echo消息:OpenFlow控制器和OpenFlow交换机可通过发送Echo请求消息来确认二者之间是否连接,检测通信延迟、测量通信带宽等。
2.5 LLDP 和 OpenFlow
LLDP用于实现网络拓扑检测功能的协议。机制:定时向L2的组播地址发送LLDP帧,以太网类型为:0x88cc。
数据包:组播地址 + 设备的以太网地址 + 0x88cc + LLDPDU
LLDP帧的有效载荷部分成为LLDPDU,是结构TLV(tags length value)的集合体。TLV:tags标签 + length数据长度 + value数据内容
以上是关于OpenFlow与SD-WAN的主要内容,如果未能解决你的问题,请参考以下文章