SDN:softwaredefined networking,官方定义软件定义 络,目的是控制与数据层面分离。
通俗一点来解释:传统的 络设备会有独立的系统,每台设备利用自己的控制层面形成单独的转发信息,例如 络工程师熟悉的OSPF每台运行进程的设备有独立的LSDB,通过交互来形成各自独立的路由表、既然各大 络厂商(Cisco、Juniper、Huawei等)有成熟的底层系统,IETF有成熟的各种协议,看起来一切很完美。但是凡事都有两面性,传统的 络设备价格相对昂贵,在交互各自的信息以及计算时消耗了大量的 络与计算资源。
这时候我们的一位主角出厂了,先看一下经典的一张SDN架构图:
SDN是一种架构,分为了3个层面:
1.转发层:上图的基础设施层,提供数据的转发,原来的控制层面单独分离出去,仅需要一些基础功能的“傻瓜”白牌交换机;
2.控制层:狭义的来讲就是SDN控制器,既然转发层只做单纯的数据转发,那么原本的控制数据,就由本层通过南向的协议(OF,OLD,ONOS等)下发一条条的流标来“告诉”如何去处理数据,利用netconf,ovsdb等对南向设备下发配置;另外对北向提供API接口,利用可编程、可视化等简化操作提高自动化能力;
3.应用层:利用可编程的应用和平台对控制器进行控制调度。比如openstack的云OS去基于用户自动下发需求,由SDN控制器完成相关调度;
以上可以说是实验室理论,也可以说是狭义的SDN概念,优势显而易见:可编程可视化、控制层面分离使SDN控制器站在上帝视角控制全场、 络设备的功能瘦身大量节约资金的投入。但是近些年来, 络一直是硬件厂商的天下,基础设施的白牌话,严重影响了厂商的利益,所以狭义的SDN举步维艰。既然如此那近几年为何SDN为何忽然“火”起来?一切要从SDN的主战场数据中心说起:
简述数据中心发展史:
一切技术都是顺应需求推动在发展
一、最初的数据中心,多以提供www的业务为主,这决定了传统三层的南北向为主的IDC设计,我们简单看一下:
Access接入层:一般为ToR交换机,提供物理服务器的接入,是面向计算存储资源的第一层;
Aggregation汇聚层:对接入层交换机进行数据汇聚,基于vlan隔离广播域,实现L2/L3的转换,并提供service服务如LB,FW等;
Core核心层:提供跨汇聚及北向出口的高速的L3的转发;
顺便说一下在传统IDC中,南北向流量可以理解为用户基于互联 访问到数据中心的,或者数据中心通过Core访问到互联 的流量;东西向流量指的是数据中心内部,跨越Core/Agg/Acess的内部流量。
三层结构最显著的点是:接入层的L2的流量会在汇聚层终结,接入与汇聚间通过堆叠或者vPC等基于避免环路和STP;汇聚层继而通过L3+ECMP在汇聚和核心层间高速转发;跨越汇聚的东西向流量需要经过L2-L3-L3-L2如此传输;
二、传统大二层架构。还是那句一切技术都应顺应需求,云计算和虚拟化的发展,使得数据中心的主要流量演变成成东西向,各业务和服务要基于大的二层环境来设计部署,传统的三层架构演变成下图的传统大二层:
该架构Core作为L2/L3的终结,内部的vlan 关、北向的出口全部由Core来承担,所有东西向流量无需跨越L3的传输,汇聚层的作用极大的削弱,也为后面的Clos架构做了铺垫。这种设计解决了东西向流量为主的IDC环境的需求,但也存在一些弊端:
1.次优路径最为显著,在跨越 段的数据传输过程中,无论server是否在同一Access甚至Aggregation交换机下,都需要穿越Core,造成大量的带宽浪费和数据时延如下图:
2.随着虚拟机的大规模部署,ARP表会爆炸式增长,对Core交换机性能产生很大的冲击;
3.公有云和多租户使传统的4096个vlan不足以支撑。
三、Clos,Fat-tree架构,Clos是一种fabric的架构,提供了高速无阻尼的传输,具体的设计原理不做赘述,具体的模型就是现在数据中心的Spine-Leaf架构。
1.Spine层处于核心层面,与Leaf节点三层互联,并通过IGP实现ECMP,在上图Cisco的架构中,数据的南北向通过BorderLeaf内的Router与互联 互联,Huawei的Leaf-Spine的架构中,serviceleaf(FW,LB等)及borderleaf(Router)的很多功能是直连到Spine上实现;
2.Spine 与服务器直连,并且负责L2/L3的终结。
3.Spine、Leaf可以在不改变现有架构的基础上横向扩展,如果规模继续扩大,也可以纵向做5跳的更深一层面的Spine扩展。
稳定性,扩展性已经得已解决,但是L2/L3的终结依然在Leaf,数据中心跨越机柜或者说Leaf的二层扩展,就要用到我们的overlay技术。
Trill、FabricPath、Qfabrci等等MacinMac的二层技术被提出,例如Trill是基于Spine-Leaf underlay的isis的tlv来传递二层流量。所有的underlay设备被称为RB,外层以太 的DA/SA为Egress/IngressRB的Mac地址,只转发时逐条修改,由isis提供控制层面和ECM。我们所需的“大二层”实现了,不过要求所有的underlay设备支持,并且vlan的数量并没有得以解决。
与此同时,以VMware为代表的虚拟化软件厂商,围绕overlay技术打造基于软件的tunnel技术,以实现“跨越”物理交换机的大二层技术。并有IETF制定了NVo3的相关标准,其中Vxlan,NvGre,STT都是基于该标准制定的大二层技术。
NvGre是微软提出的,在Hyper-V中的MacinGre的技术,STT是由大名鼎鼎的Nicira(SDN的奠基者STT,Ovs,openstack Neatron的研发公司),另外就是现在基本一统天下的VMware和Arista联合提出的Vxlan。
下图我们简单分析一下Vxlan的封装格式:
在硬件的Vtep中,一般是由Leaf交换机在原始的数据 文前封装Udp及Vxlan 头,是一种MacinUDP的overlay技术。
UDP 头的目的端口默认为4789,源端口基于内层以太 的帧头hash得出,用来做ECMP;
Vxlan 头中的VNI类似我们Vlan的vid,24bit所以最大支持1600W个Vxlan;
在我们看一下Vxlan的数据传输过程前,首先了解几个vxlan的关键概念:
NVE: 络虚拟边缘节点NVE,实现 络虚拟化功能的 络实体。 文经过NVE封装转换后,NVE间就可基于三层基础 络建立二层虚拟化 络。
VTEP: VTEP是VXLAN隧道端点,封装在NVE中,用于VXLAN 文的封装和解封装。VTEP与物理 络相连,分配有物理 络的IP地址,该地址与虚拟 络无关。VXLAN 文中源IP地址为本节点的VTEP地址,VXLAN 文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道。
Gataway:和VLAN类似,不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN 关。
VXLAN 关分为:
根据三层 关部署方式的不同,VXLAN三层 关又可以分为集中式 关和分布式 关。我们先看集中式 关的传输过程:
Server1的数据帧到达Leaf1(VTEP),剥离原有的VID,封装Vxlan 头及VNI,如果目的IP是Server2,同一 段,基于Flood在相同VNI下泛洪,最终至Server2;如果目的IP为不同 段,则数据传输为:Leaf1 Vxlan封装,至 关Spine节点,Spine的Vxlan三层 关查找路由,发送至10.20.1.X所在的VNI的 络,然后在10.20.1.X的 络内泛洪,最终发送至Server3。
集中式 关的优势:部署简单,所有的 关均在spine节点,Leaf只需要对数据 文进行封装,无需进行路由。
缺点:1.因为所有 关在Spine存在单点故障,可以用多活 关来优化;
2.性能瓶颈,每个Spine节点最多不超过4K的Vxlan 关,可以通过多组来优化;
3.此优路径,哪怕同 段的互访,也要经过Spine节点;
我们再来研究一下分布式 关:
由Leaf节点来充当Vxlan的三层 关,数据封装和传输过程类似。不过同样存在一个问题,既然三层 关在Leaf节点,那么三层功能就要由Leaf来承担,例如上图,Leaf1节点下,无10.20.1.X的虚拟机,但是为了能访问该 段,也需要创建该 段的Vxlan 关,随着Leaf的不断增加这变得不切实际。
并且Vxlan是数据层面的协议,所有的BUM(Broadcast,位置Unicast,Multicast)传输需要基于Flood(Cisco是基于组播)传输,这造成了大量的带宽和性能浪费,这是需要一个控制层面的协议来传递二层的ARP信息。
EVPN完美的解决了这个问题,EVPN(EthernetVirtual Private Network)是一种用于二层 络互联的VPN技术。EVPN技术采用类似于BGP/MPLS IP VPN的机制,在BGP协议的基础上定义了一种新的NLRI(Network Layer Reachability Information, 络层可达信息)即EVPN NLRI,EVPN NLRI定义了几种新的BGP EVPN路由类型,用于处在二层 络的不同站点之间的MAC地址学习和发布。
原有的VXLAN实现方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、 关VTEP IP地址)学习的,这种方式导致数据中心 络存在很多泛洪流量。为了解决这一问题,VXLAN引入了EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等特性,从而避免了不必要的数据流量泛洪。
综上所述,EVPN通过扩展BGP协议新定义了几种BGP EVPN路由,这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此EVPN应用于VXLAN 络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。
EVPN确实足够优秀,但毕竟是单独设备计算和传输二层的信息,如果有一个集中的管理者能够收集到所有设备的上线信息,并且能基于这些信息,自动的帮我们搭建和拆除Vxlan隧道,并且能基于用户的可视化环境直观的规划 络环境,正好SDN契合了我们的需求。
SDN能够向北提供API给openstack的Neatrol并开放可编程接口,南向方面不再必须要求白盒交换机, 络厂商也作出让步提供支持ODL、ONF等协议支持的物理交换机,如Cisco的Nexus9K,HuaweiCE等。通过SNMPv3去自动发现 络设备,Netconf下发配置,流标去控制转发,并且所有的一切控制层面仅仅发生在overlay层面。
另外公有云和私有云的发展,更是推动了云 一体化,用户仅仅在Portal页面选取所需的计算、 络、存储资源,一切要更敏捷更自动,SDN丰富的北向接口完全契合了用户的需求。
目前Segment routing的流量工程的发展,也极大的推动了SDN的发展,以往的TE是基于mpls,很难做到基于链路的实际状态来选择最优的路径,只能到达一个个的点,才能决定下一跳的传输。SDN正是站在了控制层面的上帝视角,为SR下发全局的标签,最高效最正确的引导流量工程。
以上结合数据中心的发展,以及不同阶段的需求简单分享了我对SDN和Vxlan的理解,如有不妥,还请提出交流。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!