[学习笔记] - 网络架构

  • 网络的灵活性
  • 网络的扩展性
  • 网络的容量
  • 网络的可视化
  • 网络管理
  • 网络隔离的问题
  • 安全性
  • 可维护
  • 设备供应

SDN

SDN指的是通过软件来管理定义网站这个整体的概念。并没有指定具体的协议或者解决方案。著名的标准有OpenFlow

  • 网络资源的可编程控制。
  • 把网络控制层面(controller plane)与数据转发层面(data plane)分离。
    • 可以提高网络整体的管控能力。

简单的就是,一起管理需要在交换机路由器上,数据转发也是在交换机路由器上,控制也在交换机路由器上。而SDN把这3个概念抽象分离了

  • 管理平面:管理设备(SNMP)
  • 控制平面:路由协议(IGP、BGP)
  • 数据平面:转发表(FIB)
  • 向北向提供用户接口
    • 有一个统一的标准
  • 向南向提供设备管理接口
    • 一般都是OpenFlow

为了达到厂商中性,一般是基于软件实现SDN:White Box Switch

SDN控制器

SDN控制器是SDN实现中的大脑,

分类:

集中式 分布式
主动式 Centralized Proactive Distributed Proactive
混合式 Centralized Hybrid Distributed Hybrid
  • 集中式控制器:一个/组控制器统一管理一个SDN集群
    • 集中控制器的负担将随着SDN集群的增加而加大
    • 实现起来比较简单
  • 分布式控制器:在一个SDN集群中,每个交换设备都有一个对应的控制器
    • 分布式控制器的负担不随SDN集群的增加而加大,但是控制着各个交换设备的控制器之间的数据同步,以及对应的逻辑将会使实现变得复杂
  • 主动式控制器:控制器将所有必须的网络功能都下发到交换设备
    • 设备在接收完OpenFlow转发规则后,自己就能完成网络功能
    • 对于一些应用层功能,例如dhcp,用OpenFlow实现将会极其复杂
  • 混合式控制器:部分网络功能下发至交换设备完成,由交换设备上送至控制器完成
    • 上送控制器完成的网络功能,其延时(latency)将远大于直接在交换设备上完成
    • 应当尽量将一些复杂的功能,并且不是很频繁使用的网络功能交由控制器实现

小规模网络下,集中式控制器是首选
当网络规模上升到一定程度,分布式控制器的优势开始体现

OpenFlow协议

OpenFlow协议是当前最具代表性的SDN协议,由Open Networking Foundation(ONF)标准化

  • OpenFlow Controller:用于控制OpenFlow Switch,计算路径,维护状态和将信息流规则下发给交换机。
  • OpenFlow Switch:从OpenFlow Controller控制器接收命令或者流信息,以及返回状态信息。
  • OpenFlow Switch基于流表并根据流规则进行转发、处理数据。

“Flow”指的是一组具有相同性质的数据包,例如“五元组”(SIP、DIP、SPORT、DPORT、Protocol)。

网络设备白牌化

基于SDN架构,如果标准化了控制器和转发器之间的接口,比如OpenFlow协议逐渐成熟,那么网络设备的白牌化将成为可能,比如专门的OpenFlow转发芯片供应商,控制器厂商等,这也正是所谓的系统从垂直集成开发走向水平集成。

垂直集成是一个厂家供应从软件到硬件到服务。水平集成则是把系统水平分工,每个厂家都完成产品的一个部件,有的集成商把他们集成起来销售。水平分工有利于系统各个部分的独立演进和更新,快速进化,促进竞争,促进各个部件的采购价格的下降。

网络路径流量优化

通常传统网络的路径选择依据是通过路由协议计算出的“最优”路径,但结果可能会导致“最优”路径上流量拥塞,其他非“最优”路径空闲。当采用SDN网络架构时,SDN控制器可以根据网络流量状态智能调整网络流量路径,提升网络利用率。

三层结构

即传统数据中心网络架构。

  • Core Layer(核心层)
  • Distribution Layer(汇聚层)
  • Access Layer(接入层)

一般,汇聚交换机是L2和L3网络的分界点,汇聚交换机以下的是L2网络,以上是L3网络。
在交换机之间(汇聚交换机和接入交换机之间)通常使用STP。STP使得对于一个VLAN网络只有一个汇聚层交换机可用,所以如果只有一个VLAN,会造成L2整个为一个广播域,如果划分VLAN,就出现了不同子网间的互访需求。而且STP会阻塞50%的路径,造成浪费,而且STP每次需要重新收敛,影响整个网络

问题

  • 服务器虚拟化
  • 软件架构的解耦
  • 新的应用的兴起
    • 分布式计算,大数据
  • 软件定义数据中心

数据中心的流量分三类

  • 南北向流量:数据中心与外界的流量(14%)
  • 东西向流量:数据中心内部流量(77%)
  • 跨数据中心流量:数据中心之间的流量(9%)

在之前,南北向流量(因为主要是网站)比较多

数据中心内部流量还分为

  • L2流量:源和目的主机都在同一个接入层交换机
  • L3流量:源和目的主机都在不同接入层交换机

对于L3流量需要走汇聚层甚至核心层,带宽取决于汇聚层交换机的转发速率。所以汇聚层交换机和核心层交换机的性能应该是递增的。这样的流量叫Hairpinning,浪费了带宽。所以传统三层架构就不适合了,需要有更好的架构来保证东西向流量。

二层架构

spine/leaf架构,也叫Two Tier design,实际上就是把汇聚层和核心层合并了

  • Access Layer
  • Collapsed Core layer
    • Distribution Layer
    • Core Layer
  • 去除了生成树协议 (STP)
    • 如果使用,这意味着在未发生故障之前最大链路带宽的50%被block(阻塞)掉了
  • 相对于网络主干的模块化模型,固定端口交换机的使用增加
  • 考虑到更高的互连数量,需要购买和管理更多电缆
  • 基础设施的横向扩展与纵向扩展

二层架构能够较好的转发东西向流量,对于东西向流量,具有低延迟、优化的流量流对于性能来说是必不可少的。Spine-Leaf架构依靠等成本多路径 (ECPM) 协议来平衡所有可用路径上的流量,同时仍能防止网络环路。

Spine-Leaf拓扑还提供了更好的可扩展性。可以增加额外的 Spine 交换机,并连接到每个 Leaf 交换机,增加容量。

Spine Leaf两层设备的扁平化网络架构来源于CLOS网络

交换机交换结构

  • 计算机内存交换
    • 完全靠CPU软件交换,瓶颈在I/O
  • 共享总线式交换
    • 环形交换
  • 矩阵式交换(Crossbar)
    • Crossbar+共享内存
    • 分布式Crossbar
内存交换 总线交换 矩阵式交换

如果交换结构的处理速度没有输入队列到达的速度快,在这种情况下,输入端口将会出现排队情况

A,C将会冲突,从而造成一方阻塞。且如果C后续包即使不发往X,也会被阻塞。

无阻塞交换网络

从两个方向来扩展

  • 层次上,每一层的交换设备上行所有链路带宽与下行的所有链路带宽相等
  • 同一层次,按照下一层设备的上行端口数扩展,如此直到最高层(目前主流构造两层到三层网络结构)

网络级别只能使用链路负载均衡技术实现对带宽的充分利用

  • Round robin方式:当服务器之间全部使用定长报文(如1500字节)交互数据,基本就构成了一个完全无阻塞交换网络(定长数据交换条件下)
    • 问题:同一数据流的不同报文可能经过不同网络路径到达目的地,经过网络大规模流量浪涌后会存在严重的乱序问题。
  • Hash方式:使用网络设备的硬件负载均衡算法,基于数据流的二三层地址信息和四层端口号信息得到不同链路的选路信息,能够保证同一数据流经过相同路径到达目的地,避免乱序
    • 不同数据流因为流量大小有差异,使得网络不同链路难以完全均衡,不过在当前技术条件下,不均衡度已经极小,十分接近完全无阻塞交换网络了。

Full-Mesh

全互联,连接总数为N×(N1)/2N×(N-1)/2,财大气粗。可扩展性差。

Crossbar网络架构

Fabric一词来源于网络交换机。网络交换机就是将输入端口的数据,经过判断,转发到输出端口。

最简单的Switch Fabric架构是crossbar模型,但是会造成如下阻塞问题

数据流1和2在第一级阻塞,数据流3和4在第二级的阻塞

  • 部署规模有限,CrossPoint的数量是N*N
  • MxN交换机就成了有阻塞的交换

CLOS架构

Clos架构是一个三级互连架构

  • 输入级
  • 中间级
  • 输出级

Clos架构的核心思想是:用多个小规模、低成本的单元构建复杂,大规模的架构。

  • m:每个子模块的输入端口数
  • n:每个子模块的输出端口数
  • r:是每一级的子模块数

经过合理的重排,只要满足r2max(m1,n3)r2 \geq \max(m1,n3),那么,对于任意的输入到输出,总是能找到一条无阻塞的通路。且还存在冗余链路。应用Clos架构的交换机的开关密度,与交换机端口数量N的关系是

O(N32)O(N^{\frac{3}{2}})

所以在N较大时,Clos模型能降低交换机内部的开关密度。


现在流行的Clos网络架构是一个二层的spine/leaf架构。可前面不是说Clos架构是三级设备架构吗?为什么这里只有两层网络设备?这是因为前面讨论Clos架构的时候,都是讨论输入到输出的单向流量。网络架构中的设备基本都是双向流量,输入设备同时也是输出设备。因此三级Clos架构沿着中间层对折,就得到了二层spine/leaf网络架构。

  • leaf switch:相当于传统三层架构中的接入交换机
  • spine switch:相当于核心交换机
  • 左右切面是一个个POD
  • 前后切面被称为Spine Plane
    • 总共有4个Spine Plane:每个Spine Plane也是一个三级Clos架构
    • leaf是Fabric交换机,Spine就是Spine交换机
    • 由48个spine交换机和N个fabric交换机相连组成,N等于当前数据中心接入的POD数

fabric交换机的输入输出端口数都是48,对应上面的公式,m1=n3=48。根据Clos架构的特性,在Spine plane中,Spine交换机只要大于等于48个,不论N(POD数)等于多少,都可以保证网络架构无阻塞。

  • 弹性可扩展
    • 数据中心可以以POD为单位构建,随着规模的增加,增加相应的POD即可。
    • 前提:pine交换机端口数可承受的范围
  • 模块化设计
    • 不论是POD,Spine Plane还是Edge Plane,都是一个个相同的模块,在水平扩展的时候,不需要新的设计,只是将原有的结构复制一份即可。
  • 灵活
    • 当对网络带宽要求不高的时候,Spine交换机和Edge交换机可以适当减少
  • 硬件依赖性小
    • 交换机都是中等交换机,没有核心汇聚交换机
  • 高度高可用
    • 如果基于STP(Spanning Tree Protocol),并不能充分利用多个交换机的性能
    • 除非路径全挂否则可以一直通信
  • 每一级的总带宽是相等的
  • 不同层级的的交换单元数量可以不等价
  • 上一级单元和下一级单元都是全互联结构
  • 任意一个第一级输入交换单元将接收的报文分片成等长的信元以等价负载的方式分发给所有的第二级交换单元、然后所有第二级交换单元都将接收到的信元根据路由发送给下一级的输出单元,最后第三极输出单元将所有收到的信元重组成报文发出

由于输入和输出单元的带宽都是都是等价的,上下级单元之间都是全互联结构,因此在CLOS结构内部的信元交换过程中不会发生阻塞和队列等待,所以被称之为严格意义上的无阻塞。


  • 只使用eBGP路由即可
    • 路由条目数增多,这样的量级只有BGP能稳定维护
    • 因为现在每个Leaf Switch,都管理一个独立的子网。而数据中心内网络连通的前提是,每一个Leaf Switch的子网,都需要传给其他所有的Leaf Switch。这样,相当于每个Leaf Switch都是一个自治域(AS),现在要实现的就是实现所有的自治域的连通。这个问题,就是EBGP在互联网上正在解决的问题。
  • 使用ECMP负载均衡

可以看到两个服务器之间有多少条可以通信的路径

CLOS水平扩展

  • 增加设备的端口数
  • 增加更多的层级
    • 在现有的spine-leaf基础上,再增加一层super-spine交换机

CLOS架构采用的是一个纯L3网络的架构,也就是说所有的交换机都是三层交换机

传统的三层网络架构,因为是一个L2和L3混合的网络,因此STP(以及STP的改良版RSTP,MST),VLAN,OSPF,EIGRP,IBGP都需要做相应的配置。

数据中心内网络连通的前提是,每一个Leaf Switch的子网,都需要传给其他所有的Leaf Switch。采用了EBGP作为路由协议,具体细节有以下几点:

  • EBGP连接都是单跳。这样就不用依赖IGP构建nexthop网络,EBGP的nexthop都在链路的另一端。
  • 采用ASN中保留给数据中心内部的ASN 64512到65534,共1023个ASN。
  • 所有Super Spine共用一个唯一的ASN。
  • 每组Spine共用一个唯一的ASN。
  • 每个Leaf有一个唯一的ASN。

如果光是Leaf就把ASN消耗完了。为了解决这个问题,可以使用4字节的ASN(RFC6793)

CLOS架构缺点

  • 每个Leaf交换机下面都是个独立的L2广播域
    • 两个Leaf交换机下的服务器需要通讯,需要通过L3路由,经由Spine交换机转发
  • 独立的 L2 Domain 限制了服务器的迁移。迁移到不同机架之后,网关和 IP 地址都要变。
  • 子网数量大大增加了。每个子网对应数据中心一条路由,现在相当于每个机架都有一个子网

虽然能分割L2广播域,但是导致服务器的部署不能在数据中心的任意位置。当服务器(虚拟的或者物理的)需要被部署在数据中心时,一般需要指定特定的网络分段(Segment)中,或者说特定的L2广播域。如果Segment被局限在了某些特定的交换机下,那么服务器只能在这些交换机的管理范围内部署。也就是说,网络限制了计算资源的部署和分配。

服务器的CPU,内存,硬盘等,这些因素才应该是决定服务器是否部署的因素。如果说对应的机架或者计算资源已经被使用了80%,而其他的机架或者计算资源还基本是空置的,但是网络只在这个高负荷的位置可用,服务器再向这个高负荷的位置进行部署明显不合适。

简单来说就是,一个VLAN只能在一个Leaf下面

可以看到,如果想在右边的交换机下配置VLAN200,是做不到的。

  • 两边的服务器的广播域是不通,被Spine路由器隔离
  • 两边的同VLAN服务器不能互通,因为本质在同一网络,不会被路由转发,然后交换机又到不了
  • Spine交换机不知道把给VLAN的包发给哪一边

Overlay网络架构

Overlay网络是在现有的网络(Underlay网络)基础上构建的一个虚拟网络。

现有网络:就是之前的交换机所在的网络

而新构建的Overlay网络,用来作为服务器通讯的网络。Overlay网络是一个在L3之上的L2网络。也就是说,只要L3网络能覆盖的地方,那Overlay的L2网络也能覆盖。例如下图中,原有的交换机网络不变,服务器之间通过Overlay网络实现了跨Leaf交换机的L2网络。这样,在Overlay网络中,服务器可以任意部署,而不用考虑现有网络的架构。

一个完整的Spine/Leaf网络架构配合VXLAN示意图如下所示,这个图里面以虚拟服务器(VM)为例说明,但是实际上并不局限于虚拟的服务器。对于VM来说,并不知道什么VXLAN,VM只是把Ethernet Frame发出来。Leaf交换机(或者说VTEP)将VM的Ethernet Frame封装成VXLAN(也就是一个UDP包),在原有的Spine/Leaf的Underlay网络传输。因为是一个UDP包,所以可以在原有的L3网络中任意传输。

VXLAN

网络虚拟化是指在一套物理网络设备上虚拟出多个二层网络。VXLAN由RFC7348定义。VXLAN协议将Ethernet帧封装在UDP内,再加上8个字节的VXLAN header,用来标识不同的二层网络。

VXLAN(虚拟可扩展局域网)是一种隧道模式的网络覆盖技术

VLAN直接在Ethernet帧的头部加上4个字节的VLAN Tag,用来标识不同的二层网络。

VXLAN协议定义了8个字节的VXLAN Header。其中的24bit用来标识不同的二层网络,这样总共可以标识1600多万个不同的二层网络。Ethernet Frame封装在UDP里面,UDP的source port被用来在ECMP或者LACP做负载均衡;destination port被用来标识VXLAN数据,IANA(Internet Assigned Numbers Authority)分配给VXLAN的端口号是4789。VXLAN数据是经过VTEP(VXLAN Tunnel EndPoint)封装和解封装的,相应的VXLAN数据的外层IP地址就是VTEP的IP地址。最外层的MAC地址用来实现VTEP之间的数据传递。

VXLAN与VLAN的最大区别在于,VLAN只是修改了原始的Ethernet Header,但是整个网络数据包还是原来那个数据包,而VXLAN是将原始的Ethernet Frame隐藏在UDP数据里面。经过VTEP封装之后,在网络线路上看起来只有VTEP之间的UDP数据传递,原始的网络数据包被掩盖了。

好处

  • 突破VLAN ID数量限制:4000<<1600w4000 << 1600w
  • 突破TOR交换机MAC地址表限制
    • 现在交换机的一个端口虽然还是连接一个物理主机但是可能进而连接几十个甚至上百个虚拟机和相应数量的MAC地址。传统交换机是根据MAC地址表实现二层转发。交换机的内存比较宝贵,所以MAC地址表的大小通常是有限的。现在因为虚拟化,整个数据中心的MAC地址多了几十倍,那相应的交换机里面的MAC地址表也需要扩大几十倍。如果交换机不支持这么大的MAC地址表,那么就会导致MAC地址表溢出。
    • 使用VXLAN,虚拟机的Ethernet Frame被VTEP封装在UDP里面,一个VTEP可以被一个物理主机上的所有虚拟机共用。从交换机的角度,交换机看到的是VTEP之间在传递UDP数据。通常,一个物理主机对应一个VTEP,所以交换机的MAC地址表,只需要记录与物理主机数量相当条目就可以了
  • 灵活的虚机部署和部署
  • 更好的利用多条网络链路
    • 移除了STP,所有链路均可用

F16架构

  • 每个机架和16个独立的平面相连。机架采用Wedge 100s作为交换机,拥有1.6T上行带宽和1.6T下行带宽,流量收敛比达到1:1
  • 机架上方的平面包含16个128端口的100G光纤交换机
  • 采用模块化的128端口的100G交换机
  • 内部芯片数量从4*12=48个,减少到了16个,因此会比F4架构节省两倍多的电力
  • 可以使用成熟和大量生产的100G光模块
  • 可以平滑升级
  • 取缔原来的边缘平面Edge plane,由SSW直接与其他Fabric汇聚器相连接,数据中心之间走的跳数更少。

ECMP

ECMP(Equal-cost Multipath Routing)是一个逐跳的基于流的负载均衡策略,当路由器发现同一目的地址出现多个最优路径时,会更新路由表,为此目的地址添加多条规则,对应于多个下一跳。可同时利用这些路径转发数据,增加带宽。ECMP算法被多种路由协议支持,例如:OSPF、ISIS、EIGRP、BGP等。

对于未开启ECMP的网络来说,无法充分利用路径资源。如图所示,假设从S0到Server的为S0-S1-S2-S4即图中橘色路径,那么即便存在另一条等价路径,蓝色路径,路由器仍然会每次选择第一条橘色路径转发数据。除非此条路径发生拥塞,才会重新选择路径。

当开启ECMP功能时,便可同时利用两条路径,进行基于流的负载均衡,例如主机A到Server的数据流选择橘色路径,主机B到Server的数据流选择蓝色路径。

  • 可能增加链路的拥塞
  • 非对称网络使用效果不好
    • ECMP只是均匀的将流分发

ECMP的路径选择策略

  • 哈希
  • 轮询
  • 根据路径的权重分配流

负载分担方式有3种

  • 基于流负载分担
    • IP报文的五元组信息(源IP地址,源端口,目的IP地址,目的端口,传输层协议),进行哈希分发
  • 基于包负载分担
  • 基于带宽的非平衡负载

MC-LAG

MC-LAG,全名Multi-Chassis Link Aggregation Group,或者在Cisco里面叫做Virtual Port-channel (VPC)。
顾名思义,多设备间的链路聚合组。部署MC-LAG后,我们可以实现所谓“脚踩两只船”的效果,即一台接入设备可以同时通过链路捆绑接入上游两台物理设备。

普通来说,链路聚合是绑定在一台交换机上的,通过MC-LAG,可以绑定在不同交换机上

  • 在数据中心机房内,一台服务器多个物理网卡上联机架交换机时,可以使用MC-LAG实现服务器到多个交换机的链路二层互联
  • 在普通企业网络中,接入层交换机到多个上联汇聚交换机的二层互联。或者甚至汇聚交换机到上联核心亦可以使用MC-LAG

一对一的情况下,不管你捆绑多少条链路,链路一端都是在同一台设备内。这一台设备可以知晓所有端口信息并和对端协商。
但是,MC-LAG可不一样,它是两台邻居设备尝试和一台远端设备协商链路捆绑。介于此,就类似于HSRP、VRRP协议,你需要在冗余设备两侧指定相关参数,两端参数一致才能通过最后的协商。

设备间控制协议

ICCP,一个基于TCP 端口号33012的协议,用于MC-LAG的两台邻居设备之间沟通并同步例如学习到的ARP信息以及MAC地址信息等。

为了支持ICCP协议的TCP协商,我们还需要在两台MC-LAG邻居设备上配置一个Keeplive的心跳线IP作为ICCP互联地址。
类似于HSRP或VRRP,ICCP也需要在两台设备之间选择出一个Active活动设备和一个backup,Active活动设备用于整个MC-LAG协商。

数据中心如何组网

  • 应用程序带宽和延迟需求
    • 南北向流量
    • 东西向流量
    • 服务器之间访问
  • CAPEX最小化
    • 网络基础设施相关的资本支出Capital Expenditures(CAPEX)约占数据中心总支出的10-15%
    • 统一所有网元,最好使用相同的硬件类型甚至相同的设备
    • 通过引入多家网络设备供应商,利用竞争压力降低成本
  • OPEX(Operating Expense)最小化
    • 最小化运营支出,减小网络中故障域的大小
    • 尽可能减少设备或协议问题的故障范围。
  • 流量工程
    • 通过添加更多的统一节点并在这些节点之间分配传入流量,从而水平地扩展负载均衡层
    • 等价多路径Equal Cost Multipath (ECMP)
    • anycast前缀通告RFC4786
    • 最好使用内置协议机制,通过明确控制路由前缀下一跳来进行。
  • 能否横向扩展

CLOS例子

  • PP:多少台服务器
  • RR:单个交换机多少端口
  • LL:网络几层

TotalHosts=R×RL12TotalCores=RL12TotalSwitchs=(2L1)×R2L1TotalPorts=R×TotalSwitchs\begin{aligned} \text{TotalHosts} &= R \times \frac{R^{L-1}}{2} \\ \text{TotalCores} &= \frac{R^{L-1}}{2} \\ \text{TotalSwitchs} &= (2L - 1) \times \frac{R}{2}^{L-1} \\ \text{TotalPorts} &= R \times \text{TotalSwitchs} \end{aligned}

假设要给8台服务器组网

  • P=8P = 8
  • R=4R = 4
  • L=2L = 2
  • 核心交换机数:2
  • 交换机数:6
  • 总共端口:24

参考