链路虚拟化技术

网络虚拟化包括了网卡的虚拟化、链路层虚拟化、网络层虚拟化。网络虚拟化和计算、存储的虚拟化类似,总结起来也是“一个虚拟多个,多个虚拟一个”。通过SR-IOV技术可以实现一个物理网卡虚拟多个网卡,还可以通过tap/veth等纯软件的方式实现网卡虚拟化。

链路层的虚拟化主要通过虚拟交换机,实现网络包的VLAN设置、隧道建立等。

网络层虚拟化包括VPN、overlay网络等,创建一套隔离的三层网络。

链路虚拟化技术可以将链路资源切分给不同的用户或者虚拟网络,在支持用户自定制网络拓扑、提供链路的QoS保证,以及支持建立逻辑隔离的虚拟网络等方面具有强大的优势,具有非常广阔的发展空间。它是对传统虚拟网络端口技术的补充与发展,已经成为网络虚拟化的重要组成部分。

目前大多数链路虚拟化技术都在应用层或者网络层实现,并且多数是为虚拟化实验平台提供共享物理网络接口资源的保证。网络设备支持的网络虚拟化技术大多基于端口和网卡的物理划分,而不是通过有效逻辑隔离虚拟链路来保证虚拟链路之间的逻辑隔离。

一、链路虚拟化技术概述

1、链路虚拟化技术简介

链路虚拟化技术通常包括链路聚合和链路通道虚拟化技术,前者利用设备间物理上的多条链路聚合成一条虚拟链路,即“多合一”技术;后者是将一条物理链路切割到多个虚拟链路上,有时也称为“接口切割技术”,即“一分多”技术。

链路虚拟化技术的目的是为多个不同网络或者业务提供其所需的链路资源,为此需要在网络设备接口处实现完全虚拟化,即应用服务看到的每一个端口和链路都是其所对应物理链路中的一个实例。

链路虚拟化的连接效果如下图所示:

该条链路上同时运行多个对于网络资源需求各不相同的业务,业务1属于时延敏感型应用,要求链路虚拟化技术需要保证能够实现多跳的虚拟链路,并为其提供时延的保证;业务2属于吞吐量敏感型应用,要求链路虚拟化技术提供足够的带宽服务。

实现上图中所描述的链路虚拟化的结构需要链路横向和纵向上的切割。

从横向上看,需要实现虚拟链路到物理路径的映射。虚拟链路对应物理链路中的一条路径,这条路径可能会穿过多台路由器。要求在转发表的配置中专门为多跳虚拟链路配置专用的转发表,并且预留一定的转发能力来保证链路的带宽。

从纵向上看,需要切割物理链路的资源分配给不同虚拟网络的虚拟链路并保证虚拟链路之间不会相互干扰,如下表所示。 

将横向切割与纵向切割进行综合可提出了不同的需求,主要包括单跳链路和多跳链路中的接口聚合问题,以及接口切割问题。

物理接口聚合技术也称为“链路聚合技术”,它将多条物理链路捆绑在一起组成一条逻辑链路,从而实现增加链路带宽的目的;同时,这些捆绑在一起的链路通过相互间的动态备份可以有效地提高链路的可靠性。目前物理接口聚合的技术已经研究得比较充分,并且网络设备厂商已经生产出支持该技术的产品。

在单跳链路中进行接口聚合就是将多个低速接口合并形成一个高速接口;多跳链路中的接口聚合问题类似多路径转发问题,在链路层PPP协议中专门有支持多路径转发的技术。

目前在链路虚拟化研究中还是更加关注单跳链路和多条链路中的接口切分问题,可以将其概括为虚拟接口的切分技术和多条链路虚拟化技术。 

链路虚拟化是网络虚拟化的重要组成部分,对实现网络协议体系的多样化具有重要的意义,具体作用表现在如下方面。

  1. 可以为用户和应用的网络多样化需求提供支持:解决目前网络中部署的一些应用与网络需求的矛盾,如吞吐量敏感型应用与时延敏感型应用的矛盾,在现有的网络链路中很难满足这两种类型的应用同时部署的需求。
  2. 可以满足网络柔性重组的需求:链路虚拟化在物理和虚拟链路之间增加了一个虚拟映射层可把多条物理链路资源抽象成一条虚拟链路或者将一条物理链路切分成多条虚拟链路。由于用户只访问物理链路的一个实例,而不是直接访问设备本身,因此设备在维护或者出现故障时可为实现服务的无缝迁移提供保障。
  3. 可以为端到端通信提供新的解决思路:目前端到端通信存在多种类型的安全性问题,主要包括身份认证、信道可靠性、信息可信性,以及安全设备对于合法性通信的阻断问题。链路虚拟化技术将不同的通信线路划分给不同的虚拟链路,提供了比现有VPN技术隔离级别更高的隔离机制,进而增加了链路的可信、可控和可管能力。

可见研究链路虚拟化对于实现网络虚拟化技术和促进下一代网络的发展具有举足轻重的作用。

2、链路虚拟化的相关技术

1. 虚拟链路标识技术

由于链路虚拟化是网络虚拟化的一部分,所以链路虚拟化的标识也要与虚拟网络的标识联系在一起。在数据平面需要为每条虚拟链路分配一个ID,最直接的解决方案需要包括简单地将虚拟链路的 ID 映射到任何数据链路层正在使用的特殊标识上。一些可用的链路虚拟化技术,如ATM、Ethernet VLAN或者MPLS等可能会用于标识虚拟链路或者虚拟网络。

例如,可以利用以太网地址结合路由封装协议 GRE 实现链路虚拟化机制以太网通用路由封装(Ethernet Generic Routing Encapsulation,EGRE),这意味着虚拟链路ID将会作为一个虚拟链路标识符和一个数据转发的标识。同时全局化的虚拟链路标识会产生一个庞大的标识数据库,如何精简和管理虚拟链路标识是研究者关注的问题。

2. 链路资源的分配与调度技术

在分配资源时链路资源的分配与调度方式主要有两种类型,即静态方式和动态方式。静态分配与调度方法实现简单,但是执行效率低。并且容易造成资源的浪费,也无法满足网络虚拟化对资源的共享要求;动态资源分配与调度方法则根据时间标识对资源进行周期性的重分配,其难度主要体现为对时间标识的确定。

如果过长,则会影响系统的实时性与公平性;过短,则会降低系统的执行效率。虚拟网络的嵌入问题可以被概括为一个 NP 难题,不便于研究者研究。为了提高链路资源分配算法的研究效率,降低研究难度,现有的研究者开始将链路资源分配问题划分为不同的情况分别研究。

例如,假定所有的链路资源需求都已经预先知道并且中途不会有突然申请加入的情况或者网络拓扑的规模已经确定不会发生改变等。

3. 链路资源的预约与发现技术

为了给不同的服务提供商分配资源,基础设施提供商必须能够判断网络的可用拓扑,包括其中的节点和互联。此外相邻的域间必须分享可达信息,以建立域间网络连接的实例。

因此如何组织网络资源发现方式成为研究者关注的问题,目前的想法主要基于分布式和集中式。如有的研究成果中使用了独立的资源发现平面,而有的则使用了分布式的资源发现方式,并且在实际网络中也要针对网络的实时变化来对资源进行重新配置。

另外,在配置多跳链路时需要同时与多个网络节点进行资源的预约,这也提出了集中式方式与分布式方式的问题。集中控制方式实现简单并且便于管理,但可扩展性不好;分布式方式则会有执行效率问题,但有很好的可扩展性。

4. 多跳链路中间节点的快速转发问题

多跳链路要在两个不相邻的节点之间创建一条虚拟的直接连接的链路,在传统多跳链路中采取的隧道封装方式的VPN是目前应用最为广泛的实现方式。但是由于VPN只是采用封装技术保证通信内容的私有化,并没有保证物理资源的私有化。即没有提供时延与带宽的保证,所以无法达到网络虚拟化中虚拟链路的要求。而在ATM网络中的虚信道(Virtual Channel,VC)与虚通路(Virtual Path,VP)的研究过程中也研究了带有资源虚拟化方式的多跳链路实现方式,但目前并没有取得可以应用的成果。

多跳链路转发表与普通配置转发表不同,为了减少虚拟直接连接的时延,多跳链路转发表需要采用类似 OpenFlow 流表的配置方式或者基于硬件的端口绑定方式。如何协调普通转发表与多跳链路转发表的关系,以及多跳链路转发表的组织形式,是实现链路虚拟化必须考虑的问题。

3、链路虚拟化中的硬件设备和虚拟机

链路虚拟化技术的实现要求设备带有一定可编程性与可重构性,从目前网络虚拟化的项目来看有如下3类硬件能够满足需求。

  1. 通过一个控制平台聚合多台通用设备,如多台路由器、交换机、通用服务器或者PC等。
  2. 利用网络处理器组成转发阵列,以构成报文处理接口。
  3. 利用普通的 FPGA 实现的专用于网络可编程的硬件网络 FPGA(Network FPGA,NetFPGA)。

目前在大多数设备虚拟化文献中实现的原型系统都基于虚拟机技术结合 3 种硬件方式实现,如基于通用设备组的 RouterBricks、Trellis 和 PdP;基于 NetFPGA 的快速转发平面和SwitchBlade,以及基于网络处理器阵列的Cisco硅信息包处理器(Silicon Packet Processor,SPP)等。

在现有的4种虚拟机技术中基于硬件仿真的虚拟化技术不适用于设备上的链路虚拟化,所以目前链路虚拟化中虚拟实体的实现采用的主要虚拟机技术为基于容器(container)的操作系统虚拟化技术、基于系统管理程序(hypervisor)的准虚拟化技术和完全虚拟化技术。

操作系统虚拟化技术主要采用内核共享机制,不支持异构内核并存。但是负载低,以 OpenVZ和Linux VServer为代表;准虚拟化和完全虚拟化支持异构内核共存,但准虚拟化通过对客户端内核的修改使得hypervisor 只需要模拟部分指令,而不是全部指令。这样的虚拟机收到的CPU指令有一部分没有经过修改,提高了与设备的通信速度。

基于hypervisor的虚拟机相比完全虚拟化提高了执行速度,但相对于操作系统虚拟化执行时的负载依然较高。准虚拟化以Xen为代表,完全虚拟化以VMware和Virtual PC为代表。上述3种虚拟机都被用来实现虚拟机实体的接口映射,每种硬件与虚拟机技术的结合都有其不同的特点。

下表所示为不同虚拟机技术与不同硬件组合所带来的不同的特性:

操作系统虚拟化

准虚拟化

完全虚拟化

NetFPGA

搭建容易、性能较好、不支持网络

异构性、支持可重构性、可扩展一般且执行负载小

搭建容易、性能较好、支持网络

异构性、支持可重构性、可扩展性性一般且执行负载高

搭建容易、性能较好、支持网络

异构性、支持可重构性、可扩展性一般且执行负载一般

通用设备

搭建容易、性能一般、不支持网络

异构性、支持可重构性、可扩展好且执行负载小

搭建容易、性能一般、支持网络

异构性、支持可重构性、可扩展性好且执行负载一般

搭建容易、性能一般、支持网络

异构性、支持可重构性、可扩展性好且执行负载高

网络处理器阵列

搭建不易、性能好、不支持网络异构性、可重构性支持一般、可扩展性差且执行负载小

搭建容易、性能好、支持网络异构性、支持可重构性、可扩展性差且执行负载一般

搭建容易、性能好、支持网络异构性、支持可重构性、可扩展性差且执行负载高

4、支持链路虚拟化的网络模型

虚拟链路的运行环境由虚拟链路所对应物理路径上的一系列设备及其之间的网络介质组成,物理路径上的每种设备根据用户需求为虚拟链路分配所需的资源。每台网络设备都封装了虚拟链路运行所需的硬件和软件资源,这些网络设备按照特定的关系协同工作,构建虚拟链路完成搭建用户自定义拓扑的功能。

在实际应用中,网络设备需要为不同的服务类型创建独立的虚拟链路来保证其运行环境。所以在支持链路虚拟化的网络体系结构中网络设备需要根据用户的定制支持不同需求类型的虚拟链路,并保证虚拟链路之间相互隔离,以便相互矛盾的业务之间不会互相影响。

例如,以P2P技术为代表的吞吐量敏感型应用要求网络优先选择高带宽路径,并且保持满队列状态。但是以网络游戏为代表的时延敏感型应用却要求保持小队列,并且以低延迟路径优先。

下图所示为一个以路由器为主要节点的支持链路虚拟化的网络模型。

由于根据用户需求定制的虚拟链路的端节点都部署在分布范围比较广的网络物理资源之上,并且这些用户定制虚拟链路往往不会和物理网络中的链路一一对应,而是经常出现一条虚拟链路对应一条物理路径的现象;因此要聚合一条物理路径上的所有设备组成一条链路,以构建满足用户需求的虚拟链路。

在支持链路虚拟化的网络体系结构中,路由器是承载链路虚拟化功能的设备实体,主要存在两种虚拟链路,一种是映射在直连链路上的单跳链路,另一种是映射在一条物理路径上的多跳链路,支持链路虚拟化的路由器的主要工作是创建和维护这两类虚拟链路。

路由器需要为虚拟链路提供何种支持取决于其在虚拟链路中所映射的物理路径中的位置,而在虚拟链路中的位置可以分为端节点和中间节点。处于虚拟链路端节点的路由器需要对物理接口进行切割,为每条虚拟链路提供所需要的带宽与时延的保证,并且能够根据优先级进行报文调度。

处于虚拟链路中间节点的网络设备则需要为虚拟链路报文提供快速转发支持,使得进入中间节点的多跳链路报文能够以最快的速度转发,从而使得虚拟网络视图中的穿越多台物理路由器的虚拟链路的延时能够与直接连接的物理链路的延时相近。 

无论是对物理接口进行切割,还是多跳链路快速转发的保证功能都由转发平面承担,控制平面承担处理用户申请和配置转发平面的工作。

5、虚拟链路快速转发表及其处理流程

如前所述,虚拟链路可以根据链路中的路由器台数以及在链路中所处的位置分为单跳链路和多跳链路。如果收到的是单跳链路的报文,则按照通常的报文转发方式将其送入转发引擎进行基于IP地址的查表和转发。

与通常的转发过程不同,在转发单跳链路时需要查询属于对应虚拟网络的转发表,如下图所示。

为支持这项功能,需要转发引擎为每个虚拟网络都保留一个独立的转发表,所有虚拟网络的转发表共享转发引擎和存储空间和内存。为了保证查表的速度和效率,需要路由器的转发进程能够在不同的虚拟转发表之间快速切换。

在目前支持网络虚拟化技术的路由器的研究中,通常会采用主机虚拟化,即将一台独立的物理路由器切分为多个虚拟路由器实体。每个虚拟路由器实体中会保存一个独立的转发表,类似在计算机利用虚拟机技术中将一台计算机切分成多台虚拟计算机。

在基于主机虚拟化技术的物理路由器中,多台虚拟路由器可以共享物理路由器的物理资源,使得在属于不同虚拟网络的单跳链路转发表的更新和查询过程中,访存次数和进程切换的代价会大于在普通路由器中相应操作时所需的代价,并且通过先前的工作可以得出在主机虚拟化的性能中访存次数是制约性能的主要因素。以 Xen 虚拟机为例,在不同虚拟机之间进行一次文件交互需要 10次访存操作,所以在基于主机虚拟化的单跳链路报文的查表算法的执行效率中的访存次数会成为最主要的性能瓶颈。

实现多跳虚拟链路转发的主要目的是为了使得逻辑路径上直联,而物理上不是直连的链路之间的时延能够接近直联链路的时延,所以多跳虚拟链路的报文转发速度是对于报文转发的第一要求。相比前面所描述的单跳虚拟链路报文转发,多跳虚拟链路的报文转发要求也有自己的特点。

首先多跳虚拟链路转发表的目的地址标识简单,因为多跳虚拟链路基于固定配置并且是唯一的接口到接口的转发,目的接口的编号就是目的地址;其次多跳虚拟链路转发表的尺寸比较小,因为多跳链路的转发只是发生在相邻路由器之间,所以可以采用基于从接口到接口的转发,并不像基于IP地址的转发需要知道去往整个拓扑中每台路由器的下一跳地址。假设一台路由器中需要维护500个虚拟网络,每个虚拟网络配置10 000条虚拟链路。这样路由器中只需要维护500 000个接口转发条目,远小于IP转发表中以百万为数量级的转发条目。

为了保证多跳链路转发的速度,支持链路虚拟化的转发平面在每个转发引擎前为多跳虚拟链路增加一个专用的多跳虚拟链路转发引擎,而单跳虚拟链路报文的转发则由转发引擎负责。为降低硬件实现难度,所有进入引擎的数据报文都将不会继续分类。首先进行多跳链路查表,如果未命中,则送入正常的转发引擎中。

 ​​​​​查询过程如下图所示:

6、链路虚拟化中转发表的映射方式

在传统的多跳链路中采取隧道封装方式的VPN是目前应用最为广泛的实现方式。但是由于VPN只是采用封装技术保证通信内容的私有化,并没有保证物理资源的私有化,因此无法达到网络虚拟化中虚拟链路的要求。多跳链路中的接口切分面对的主要问题是快速转发表的配置管理和转发能力的预留,目前的映射机制主要通过虚拟机技术来为不同的虚拟网络提供快速转发表的配置和隔离。

在基于虚拟机技术实现的映射机制中目前的映射方式有3种,即通用映射(common)、直接映射(direct)和混合映射方式(Hybrid),如下图所示。

通用映射方式:指所有转发路径都在一个宿主主机内核的通用转发域中,执行控制平面作用的其余客户操作系统只是通过I/O请求配置属于自己的转发表。

直接映射方式:所有转发路径都以接口为单位被直接分配给各个客户域,每个客户域都有属于自己的接口并且与其他客户域相互隔离。

混合映射方式:所有的接口都由宿主系统控制,接收处理所有的报文;同时在宿主系统为客户系统提供虚拟网卡给客户系统,造成自己拥有物理接口的假象。 

7、链路虚拟化逻辑功能结构

支持链路虚拟化技术的转发平面的逻辑功能结构,如下图所示。

其中:硬件基础设施层由线卡或者网卡组成;链路资源划分底层支持接口多优先级报文调度、基于虚拟接口的带宽切分、业务优先级与多虚拟接口映射;虚拟链路软件控制平台支持多跳链路快速转发。

转发平面的硬件基础设施由现有转发平面的硬件设备构成,转发引擎是提供虚拟链路报文高速交换的基本功能单元。网络接口硬件中的多队列网卡实现基本的链路类型区分功能,配合后面的软件可以实现灵活的多优先级调度功能。

链路资源划分底层支持模块位于转发平面,提供虚拟链路报文调度、基于虚拟接口的带宽切分与保证,以及接口多优先级队列传输等功能支持。

虚拟链路软件控制平台可以分为位于控制平面的虚拟链路软件控制管理模块和位于转发平面的虚拟链路软件控制调度模块,前者结合控制平面中的路由器控制平面虚拟化技术实现基于支持属于不同虚拟网络的虚拟链路并存的虚拟链路软件控制系统。

通过标准接口定义和统一的底层链路资源描述和管理为虚拟链路提供运行环境,支持多虚拟链路共享物理路径,并且负责同本路由器中的多跳链路涉及的其他路由器协调;后者结合转发平面中的可编程硬件实现业务优先级的灵活配置和链路报文的快速调度,在支持网络虚拟化技术的路由器体系结构的控制平面中对于虚拟链路的管理被结合到虚拟路由器管理平面中。

多跳链路快速转发的主要目的是尽量减少多跳链路的报文在中间路由器中的转发时间,从而使虚拟直联链路的时延接近物理直连链路的时延。

对于多跳链路的快速转发的支持需要转发平面在如下两个方面提供支持。

  1. 转发表以接口为地址,并且规模应该尽可能小。
  2. 查表算法的访存次数尽可能少,最好控制在两次以内。

在转发平面上链路虚拟化实现的本质是按照不同用户的需求维护相互隔离的多个虚拟链路实例,具体实现形式是对于在网络接口出入的每一个报文判断其链路类型和所属的虚拟链路,并根据所属链路的类型和优先级调度。

由于需要在转发之前对报文进行额外的优先级调度,而不是只查表转发,所以在支持链路虚拟化的转发平面上不仅需要满足报文的转发速度,还需要满足如下要求。

  1. 能够根据链路的类型和优先级对报文进行调度。
  2. 能够保证已经建立的虚拟链路在逻辑上是隔离的,并且在物理资源上不会相互影响。
  3. 对于不同业务类型的链路优先级能够实现灵活的配置。

为满足上述要求,支持链路虚拟化的转发平面设备支撑技术要求路由器的转发平面在硬件和调度软件两个层次提供相应的支撑。

支持链路虚拟化的路由器转发平面体系结构由基于硬件的报文分类模块、链路资源划分与保证模块、虚拟链路软件控制调度模块和多跳链路转发引擎构成,其中基于硬件的报文分类模块和虚拟链路软件控制调度模块实现报文基于链路类型和业务优先级两个层面的调度,并且虚拟链路软件控制调度模块还负责根据控制平面的要求配置具体的业务或者链路优先级;链路资源划分与保证模块负责在接口处进行虚拟链路资源的切分和保证;多跳链路转发引擎负责实现多跳链路报文基于接口的快速转发。

二、链路聚合技术

1、链路聚合(Link Aggregation)简介

链路聚合也称为“接口聚合”、“端口捆绑”、“端口汇聚”和“主干”(Trunking)技术,它是在网络交换机和路由器基础上发展出的一种扩展网络带宽和增强网络稳定性的技术。

该技术简言之就是在网络设备中将多条低速物理链路聚合在一起,使其成为一条带宽成倍增加的逻辑链路。这条逻辑上的链路与普通的物理链路没有任何区别,使用链路汇聚服务的上层实体把同一聚合组内多条物理链路视为一条逻辑链路。

对使用这条逻辑链路服务的上层实体而言,聚合链路的实现机制和内部运行细节是透明的,聚合在一起的物理链路条数还可以根据业务的带宽需求来配置。

下图所示为链路聚合示意图:

采用链路聚合后逻辑链路的带宽增加了大约n-1倍(n为聚合的路数),可以把这n条物理链路看成是一条逻辑上链路,以此来实现带宽的线性增加;另外,聚合后可靠性大大提高。因为n条链路中只要有一条可以正常工作,则这条链路就可以工作。当某一条物理链路断开时其中的流量会被自动切换到其他仍然联通的成员物理链路上,达到链路冗余备份的目的。

以下图所示的链路聚合为例,如果链路1和链路2先后故障,则其中的数据任务会迅速转移到链路3上,因而两台交换机间的连接不会中断。

除此之外,链路聚合可以实现负载均衡。因为通过链路聚合连接在一起的两台(或多台)交换机或其他网络设备通过内部控制也可以合理地将数据分配在被聚合连接的设备中实现负载分担。 

每一条被聚合的物理链路叫做“成员链路”,每一条成员链路对应的物理端口叫做“成员端口”。成员链路组成的集合称为“聚合组”,用于管理聚合信息。每个聚合组对应的唯一全局逻辑口叫做“聚合接口”,主要用来收发报文。聚合组/聚合接口可以分为以下两种类型。

  1. 二层聚合组/二层聚合接口:二层聚合组的成员端口全部为二层接口,其对应的聚合接口称为“二层桥式聚合接口”(Bridge-AGGregation Interface,BAGG)。
  2. 三层聚合组/三层聚合接口:三层聚合组的成员端口全部为三层接口,其对应的聚合接口称为“三层路由聚合接口”(Route-AGGregation Interface,RAGG)。

不同型号的设备支持的聚合组/聚合接口的类型不同,应以其实际情况为准。聚合组与聚合接口的编号是一一对应的,如聚合组1对应聚合接口1。

创建三层聚合接口之后还可以继续创建该三层聚合接口的子接口,简称“三层聚合子接口”。三层聚合子接口也是一种逻辑接口,工作在网络层,主要用来在三层聚合接口支持收发携带 VLAN 标签的报文。不同型号的设备对三层聚合子接口的支持情况不同,应以其实际情况为准。

聚合接口的速率和双工模式取决于对应聚合组内的选中端口,其中速率等于所有选中端口的速率之和,双工模式则与选中端口的双工模式相同。

聚合组内的成员端口具有以下两种状态:

  1. 选中(Selected):此状态下的成员端口可以参与用户数据的转发,处于此状态的成员端口简称为“选中端口”。
  2. 非选中(Unselected):此状态下的成员端口不能参与用户数据的转发,处于此状态的成员端口简称为“非选中端口”。

处于 Selected状态且端口号最小的端口称为“主端口”(Master Port),可以形象地认为聚合组中的所有端口被汇聚到了主端口,主端口在逻辑上代表了整个聚合组。

通用属性注册协议(Generic Attribute Registration Protocol,GARP)、VLAN 注册协议(GARP VLAN Registration Protocol,GVRP)、GARP组播注册协议(GARP Multicast Registration Protocol,GMRP)、生成树协议(Spanning Tree Protocol,STP)、快速STP(Rapid STP,RSTP)和多重STP(Multiple STP,MSTP)等二层协议等只从主端口发送,其他数据报文则在各个Selected端口间分担。

由于Selected与Unselected端口在实际状态下的选取受到硬件的影响,所以不同厂家产品的具体表现形式可能有差异。

操作Key是系统在链路聚合时用来表征成员端口聚合能力的一个数值,它根据成员端口中的一些信息(包括该端口的速率和双工模式等)的组合自动计算生成,这个信息组合中任何一项的变化都会引起操作Key的重新计算。

在动态链路聚合控制协议(Link Aggregation Control Protocol,LACP)聚合中只有操作Key相同的端口才能属于同一个聚合组,可以认为如果操作Key相同则端口的属性相同。

在手工聚合和静态LACP聚合中,虽然同一个聚合组中的端口的操作Key不一定相同(因端口由管理员手工加入),但是选中端口的操作Key一定相同。

根据对成员端口状态的影响不同,我们可以将成员端口上的配置分为以下3类。

  1. 端口属性类配置:对于静态聚合组,要求端口的链路类型(即Trunk、Hybrid和Access类型)一致;对于动态聚合组,要求端口的速率、双工模式和链路类型一致,即成员端口最基础的配置内容。
  2. 第1类配置:相对于第2类配置而言,包含的配置内容有GVRP和MSTP等。在聚合组中即使某成员端口与对应聚合接口的第1类配置存在不同,也不会影响该成员端口成为选中端口。
    注意在成员端口上所做的第1类配置只有当该成员端口退出聚合组后才能生效。 
  3. 第2类配置:包含的配置内容如下表所示。
配置项 内容

端口隔离

端口是否加入隔离组、端口所属的端口隔离组

QinQ配置

端口的 QinQ(一种称为"VLAN"的嵌套技术)功能开启/关闭状态、VLAN Tag 的标签协议标识(Tag Protocol Identifier,TPID)值、添加的外层VLAN Tag、内外层VLAN优先级映射关系、不同内层VLAN ID添加外层VLAN Tag 的策略,以及内层VLAN ID替换关系

VLAN配置

端口上允许通过的VLAN、端口默认VLAN ID、端口的链路类型(即Trunk、Hybrid和 Access类型)、基于IP子网的VLAN配置、基于协议的VLAN配置,以及VLAN报文是否带Tag配置

STP配置

端口的STP使能/关闭、与端口相连的链路属性(如点对点或非点对点)、STP优先级、STP开销、STP标准报文格式、报文发送速率限制、是否环路保护、是否根保护,以及是否为边缘端口等

QoS配置

流量限速、优先级标记、默认的802.Ip优先级、带宽保证、拥塞避免、流重定向,以及流量统计等

MAC地址学习配置

是否具有MAC地址学习功能、端口是否具有最大学习MAC地址个数的限制,以及MAC地址表满后是否继续转发

在聚合组中只有与对应聚合接口的第 2 类配置完全相同的成员端口才能够成为选中端口。

要说明的是在聚合接口上所做的第2类配置将被自动同步到对应聚合组内的所有成员端口上,而且当聚合接口被删除后这些配置仍将保留在这些成员端口。由于成员端口上第2类配置的改变可能导致其选中/非选中状态发生变化,进而对业务产生影响,因此当在成员端口上执行此类配置时系统将给出提示信息,由用户来决定是否继续执行该配置。

参考端口从成员端口中选出,其端口属性类配置和第2类配置将作为同一聚合组内的其他成员端口的的参照,以确定这些成员端口的状态。

LACP协议用系统ID来标识唯一的聚合组,系统ID由系统优先级和系统MAC地址组成。之所以要有系统优先级,是因为在LACP协议中链路聚合两端设备扮演不同角色,系统优先级管理员可以通过配置干预角色选举。

参与链路聚合的各个端口也需要在设备内部唯一标识,端口 ID 由端口优先级加端口号组成。之所以需要“端口优先级”,也是因为涉及端口的不同角色选举。

如果一个聚合组需要进行唯一标识,则需要包含 4 个元素,即本端系统 ID、本端操作Key、对端系统ID和对端操作Key。

系统中并不是所有聚合组都包含多条链路,为了区分只包含单条链路的聚合组的情况,还需要额外加上两个元素,即本端端口ID和对端端口ID。

这6个元素唯一地确定了一个聚合组,称为“链路聚合组”(Link Aggregation Group,LAG)ID。如果一个聚合组中包含多条链路,那么在LAG ID中本端端口ID和对端端口ID为0,相当于只用四元组即可刻画包含多个链路的聚合组。

通过采用不同的聚合负载分担类型及其组合可以灵活地实现对聚合组内流量的负载分担,聚合负载分担的类型如下。

  1. 根据报文的MAC地址进行聚合负载分担。
  2. 根据报文的VLAN标签进行聚合负载分担。
  3. 根据报文的服务端口号进行聚合负载分担。
  4. 根据报文的入端口进行聚合负载分担。
  5. 根据报文的IP地址进行聚合负载分担。
  6. 根据报文的IP协议类型进行聚合负载分担。
  7. 根据报文的MPLS标签进行聚合负载分担。

用户可以指定系统按照上述聚合负载分担类型的其中之一或其组合来进行负载分担,也可以指定系统按照报文类型(如二层、IPv4、IPv6和MPLS等)自动选择聚合负载分担的类型,还可以指定系统对每个报文逐包进行聚合负载分担。

2、聚合链路的主要功能

链路聚合可以很好地解决网络瓶颈和带宽难题,具体来讲链路聚合的主要功能如下。

  1. 增加链路容量:聚合技术为用户提供一种经济地提高链路传输率的方法,通过捆绑多条物理链路用户不必升级现有设备就能获得更大带宽的数据链路,其容量等于各物理链路容量之和。聚合模块按照一定算法将业务流量分配给不同的成员可实现链路级的负载分担功能,在某些情况下链路聚合甚至是提高链路容量的唯一方法。例如,当市场上的设备都不能提供高于10 GB的链路时,用户可以通过聚合两条10 GB链路获得带宽大于10 GB的传输线路。
  2. 提高链路可用性:在链路聚合中成员互相动态备份,当某一链路中断时其他成员能够迅速接替其工作。与生成树协议不同,链路聚合启用备份的过程在聚合之外不可见。而且启用备份过程只在聚合链路内,与其他链路无关,切换可在数毫秒内完成。
  3. 负载分担:流量能够平衡地分到各条链路上传输。
  4. 动态配置:如果在端口使用了LACP协议且缺少人工配置,则链路聚合组可以动态配置。当某些单独的链路可以加入到聚合组时,这些链路就会被动态地加入到聚合组中。
  5. 快速或重新配置:物理连接变化时链路聚合组能快速产生一个新的聚合组,时间仅需一秒,甚至更少。也可以随时取消设置,这样提供了很高的灵活性。
  6. 可预测的行为:根据选择的算法链路聚合配置解决问题的能力是确定性的,如聚合能够独立于事件发生的顺序,聚合的结果由聚合组中各个链路的能力和及其物理连接决定。
  7. 与不识别链路聚合的设备兼容:链路会因为其内在的特性、配置管理或者连接的设备的能力而不适合参与链路聚合,然而其操作不发生任何变化。
  8. 适应不同的应用和限制:链路聚合上有不同硬件和软件限制的设备都是适用的。
  9. 帧格式没有任何变化:在 MAC 客户之间的链路聚合不会改变帧的格式,也不会改变帧的内容。

3、链路聚合的模式

链路聚合的工作模式有手工聚合、动态聚合和静态聚合3种,其特点如下表所示。

1. 手工聚合模式

由用户手工创建聚合组和增删成员端口时不运行LACP,端口存在UP和DOWN两种状态,根据端口物理状态UP和DOWN来确定是否进行聚合。

手工链路聚合由于没有使用LACP协议,链路两端的设备缺少对聚合进行协商的必要交互且选择端口完全根据本端信息,因此对聚合的控制不够准确和有效,不同属性的端口可能会在同一聚合组中。

例如,如果用户错误地将物理链路连接到不同设备或者同一设备的不能形成聚合的端口上,则系统无法发现。另外,手工链路聚合只能工作在负荷分担方式,应用存在一定限制。 

2. 静态聚合模式

静态聚合模式由用户命令创建和删除聚合组,并且指定组号。增删成员端口时端口自动打开 LACP,选择端口原则与动态一致。不同属性的端口可能会在同一聚合组中,端口存在Selected(选中)和Standby(备用)两种状态。在静态LACP聚合方式下,设备不仅仅参考人工的配置,还要通过LACP协议交互来确定这些被人工聚合的端口是否实际上可以被聚合在一起。

Selected端口是实际工作的端口,其中有流量发生;Standby端口则只处于一种备用状态,因为其中不会有流量发生,因此静态链路聚合组可能并非所有的成员端口都同时工作。而且端口的 Selected 和 Standby 状态会随着设备运行和外部环境变化而改变,使静态链路聚合实现负荷分担聚合和非负荷分担聚合成为可能。静态聚合与手工聚合相比,对聚合的控制更加准确和有效。

静态聚合模式的工作机制如下:

1)选择参考端口

当聚合组内有处于UP状态的端口时首先比较端口的聚合优先级,优先级数值最小的端口作为参考端口。如果优先级相同,则按照端口的全双工/高速率→全双工/低速率→半双工/高速率→半双工/低速率的优先次序选择优先次序最高且第2类配置与对应聚合接口相同的端口作为该组的参考端口;如果优先级不同,则选择端口号最小的端口作为参考端口。

2)确定成员端口的状态

静态聚合组内成员端口状态的确定流程,如下图所示。

静态聚合组内选中端口的最大数量与设备的型号有关,当一个成员端口的端口属性类配置改变时其所在静态聚合组内各成员端口的选中/非选中状态可能会发生改变。

当静态聚合组内选中端口的数量已达到上限时后加入的成员端口即使满足成为选中端口的所有条件,也不会立刻成为选中端口,这样能够尽量维持当前选中端口中的流量不中断。但是由于设备重启时会重新计算选中端口,因此可能导致设备重启前后各成员端口的选中/非选中状态不一致。

3. 动态聚合模式

动态聚合控制完全遵循LACP协议,并且实现了IEEE 802.3ad标准中聚合链路自动配置的目标,使设备具有某些即插即用的特性。用户只需为端口选择动态方式,就会启用 LACP协议。无须手工创建聚合组,也无须指定端口的聚合组,系统就能自动将参数匹配的端口聚合到一起并设定其工作状态。

在动态聚合模式下系统互相发送LACP协议报文交换状态信息来确定哪些端口具备被聚合的条件,符合条件的端口被动态聚合在一起。如果参数或状态发生变化,链路会自动脱离原聚合组加入另一适合的组。

但在实际应用中这种聚合方式显得过于灵活,会给用户带来使用上的不便与困难。例如,由于聚合组是设备动态生成的,因此在设备重启等情况下聚合组 ID 可能会发生变化,这将给设备的管理带来麻烦。

动态聚合模式的工作机制如下:

1)选择参考端口

  • 从聚合链路的两端选出设备ID(由系统的LACP优先级和系统的MAC地址共同构成)较小的一端,首先比较两端的系统LACP优先级。优先级数值越小,其设备ID越小。如果优先级相同,则比较其系统MAC地址。MAC地址越小,其设备ID越小。
  • 对于设备ID较小的一端,再比较其聚合组内各成员端口的端口ID(由端口的聚合优先级和端口的编号共同构成)。首先比较端口的聚合优先级,优先级数值越小,其端口ID越小。如果优先级相同,则比较其端口号。端口号越小,其端口ID越小且端口ID最小的端口作为参考端口。

2)确定成员端口的状态

在设备ID较小的一端动态聚合组内,成员端口状态的确定流程如下图所示。

与此同时,设备 ID 较大的一端也会随着对端成员端口状态的变化随时调整本端各成员端口的状态,以确保聚合链路两端成员端口状态的一致。

需要说明如下:

  • 动态聚合组内选中端口的最大数量与设备的型号有关。
  • 当动态聚合组内同时存在全双工端口和半双工端口时,全双工端口将优先成为选中端口。只有当所有全双工端口都无法成为选中端口或动态聚合组内只有半双工端口时,才允许从半双工端口中选出一个成为选中端口且只有一个半双工端口可成为选中端口。
  • 当一个成员端口的端口属性类配置改变时其所在动态聚合组内各成员端口的选中/非选中状态可能会发生改变。
  • 当本端端口的选中/非选中状态发生改变时其对端端口的选中/非选中状态也将随之改变。
  • 当动态聚合组内选中端口的数量已达到上限时后加入的成员端口一旦满足成为选中端口的所有条件就会立刻取代已不满足条件的端口成为选中端口。

上述3种聚合方式为系统提供了良好的聚合兼容性,系统不仅能与不支持链路聚合的设备互联,还能与各种不同聚合实现的设备配合使用,并且用户能根据实际网络环境灵活地选择聚合类型获得高性能和高可靠的链路。 

4、链路聚合的整体结构

结合软件需求分析给出软件部分的总计设计思路。

对于设计策略方面,坚持模块化的原则将整个链路聚合按功能分为各个相关子模块。

各子模块间的依赖通过函数接口的形式保证,其内部实现对外不透明,整体结构如下图所示。

链路聚合按功能可分为以下子模块:

  1. 初始化模块:主要作用是为链路聚合的运行做相关准备,如全局变量的初始化、命令注册、信号量注册和创建聚合任务等。
  2. 聚合任务模块:在链路聚合初始化时创建,负责不停地读取事件和消息队列解析出各种链路聚合的事件并进行相应处理。
  3. 命令处理模块:命令是实现用户和交换机交互的主要方式之一;命令处理模块的主要作用是负责解析和处理用户输入的链路聚合的相应命令,它是用户与链路聚合模块的接口。
  4. 操作 key 管理模块:如前所述,802.3ad 协议将端口的聚合能力归纳为一个值,方便系统在比较成员端口的聚合能力时的处理。该模块实现端口的操作key 管理功能,主要包括成员端口操作key 的分配和删除功能。
  5. 选择逻辑模块:主要功能是根据成员端口的相关情况并通过一定的选择算法选择合适的成员端口参与转发流量。
  6. LACP模块:实现LACP 协议的功能,主要负责动态链路聚合的控制,LACP 报文的发送和接收由报文处理子模块处理并通过相应的接口与LACP 交互。
  7. 聚合管理模块:主要负责聚合组创建之后聚合端口和相应聚合组成员端口的管理工作。
  8. 驱动接口模块:主要功能是实现链路聚合模块和底层驱动进行交互的接口,链路聚合的一些功能需要底层驱动的支持,当链路聚合模块需要下设驱动或者获取芯片的相关信息时就会调用该模块。 

5、链路聚合的拓扑结构

1. 基本链路聚合拓扑结构

基本链路聚合拓扑涉及由一组物理接口组成的单个聚合,在以下情况下使用基本链路聚合。

  1. 运行具有分布式大通信流量的应用程序系统可以将聚合专用于该应用程序的通信流量。
  2. 对于具有有限IP地址空间,但仍需要很大带宽的站点,大的接口聚合仅需要一个IP地址。
  3. 对于需要隐藏内部接口的存在的站点,聚合的IP地址对外部应用程序隐藏其接口。

上图所示为承载常见 Web 站点的服务器聚合,该站点需要增加带宽以满足互联网用户和站点数据库服务器之间的查询通信流量。

出于安全目的,必须对外部应用程序隐藏服务器中各个接口的存在。解决方法是使用IP地址(如192.168.50.32)的聚合aggr1,此聚合由3个接口(bge0~bge2)组成。这些接口专用于发出通信流量,以响应用户查询。来自所有接口包流量上的输出地址是aggr1的IP地址,即192.168.50.32。

2. 用交换机连接两个系统的拓扑结构

下图所示为具有两个系统的本地网络:

其中每个系统都配置了一个聚合,这两个系统由交换机连接在一起。如果需要通过交换机运行聚合,则该交换机必须支持聚合技术。对于高可用性和冗余系统,此类型的配置尤其有用。

上图所示为具有交换机的链路聚合拓扑,其中系统A具有的聚合由两个接口(即bge0和bge1)组成,这些接口通过聚合端口连接到交换机。系统B的聚合由4个接口(即e1000g0~e1000g3)组成,这些接口也连接到交换机上的聚合端口。

3. 背对背链路聚合拓扑结构

背对背链路聚合拓扑涉及两个单独的系统,这两个系统通过电缆直接互联且运行聚合,如下图所示。

图中系统A中的设备bge0直接链接到系统 B中的bge0,依此类推。这样系统 A和系统B可以支持冗余和高可用性,以及二者之间的高速通信。每个系统还将接口ce0配置为用于本地网络内的通信流。

背对背链路聚合最常见的应用是镜像数据库服务器,这两台服务器需要一起更新,因此需要很大的带宽、高速通信流和可靠性。最常使用背对背链路聚合的部门是数据中心。

4. 交换机堆叠情况下的链路聚合拓扑结构

堆叠的多台设备是一个整体,链路聚合功能和操作也应是一个整体。多台交换机堆叠后增加了端口的数量,要求能支持更多的聚合组,每组能有更多的链路聚合成员。更多的聚合组意味着交换设备可提供更多的高速链路,而更多的聚合成员则不仅能提高链路容量,还能降低整个数据线路失效的风险。

分布式链路聚合模块对用户屏蔽了端口的具体物理位置这一细节,其示意如下图所示。

只要聚合条件相同,用户就能将不同 Unit 的端口聚合到一起,如图中的端口 P1、P2、P3和P4组成了一条逻辑链路。此时,Unit1至Unit4协同计算和选择聚合组内的工作链路。P1~P4彼此动态备份,实现数据收发和负载分担,最大限度地发挥了多设备的优势。

5. 分布式链路聚合控制的拓扑结构

分布式聚合技术进一步消除了设备单点失效的问题,提高了链路的可用性。由于聚合成员可以来自不同设备,所以即使系统内某些 Unit 失效,其他正常工作的 Unit 也会继续控制和维护剩余的端口的状态。即聚合链路不会完全中断,这对核心交换系统及一些高质量服务的网络意义重大。

如下图所示:

系统X1和X2之间有一条聚合链路。该链路由物理连接Link1至Link4构成,负责局域网LAN1和LAN2之间的通信。假如X1中的交换机X11发生故障,导致Link1和Link2不可用。

但是Link3与Link4不受影响,仍能聚合在一起收发数据。此后如果X2中X22也失灵,X1与X2之间至少还能通过Link3保持连接。

这一高性能堆叠交换机也可以拆分,拆分后各Unit恢复成为独立工作的交换设备,上述过程分别称为“合并”和“拆分”。如果合并前两个系统各自创建了参数相同的聚合链路,则合并后这些聚合成员必须加入同一组,即聚合组也实现合并。

合并后各个Unit协同工作,在全局匹配配置参数、分配聚合组号、将端口加入对应组并重新计算和设置端口状态;同样,如果拆分前同一聚合组成员分布于不同Unit上,拆分后它们仍留在各自创建的同名同类型聚合组中。分布式链路聚合确保各Unit保留当前的聚合配置,从组中删除已离开的端口,然后计算剩余端口的状态。

这一特性最大限度地保护了用户的聚合配置,而且当堆叠链路故障引起系统拆分时该特性使系统尽可能地维持已有的聚合链路,从而降低故障带来的数据传输损失。

6、链路聚合实现原理

1. 链路聚合组(LAG)工作模式

1)负荷分担模式

聚合组的各成员链路上同时都有流量(traffic)存在,它们共同分担负载,采用负荷分担后可以给链路带来更大的带宽。当聚合组成员发生改变,或者部分链路发生失效时流量会自动重新分配。

2)非负荷分担模式(主备模式)

聚合组只有一条成员链路有流量存在,其他链路则处于Standby 状态。这实际上提供了一种热备份的机制,因为当聚合中的活动链路失效时系统将从聚合组中处于 Standby 状态的链路中选出一条作为活动链路,以屏蔽链路失效。

MA5680T/MA5683T支持链路手工聚合和静态聚合,手工聚合组只支持负荷分担模式;静态聚合支持负荷分担模式和主备模式。

此外MA5680T/MA5683T以太网链路聚合还支持以太网链路同板聚合和跨板聚合,同板聚合指将同一单板内的两个或多个端口绑定到一块作为一个端口来使用,起到负荷分担和链路保护的作用;跨板聚合指通过绑定处于相邻的两块业务板或主控板与上行板中的端口将两个或多个端口绑定到一起作为一个逻辑端口使用,这个逻辑端口又称为“聚合组”或者“链路聚合组”,具有如下特点。

  1. 最大支持128个聚合组,每个聚合组最多包括8个物理端口。
  2. 支持手工配置和静态配置链路聚合,不支持动态链路聚合。
  3. 支持负荷分担模式和非负荷分担模式(主备模式)的链路聚合。
  4. 支持同一聚合组内M条链路主用N条链路备用的链路聚合。
  5. 负荷分担支持按源MAC以及源MAC和目的MAC组合策略进行报文分发。
  6. 光口聚合的切换时间在50 ms以内,电口聚合的切换时间在1s以内。
  7. 支持如下跨板聚合:
  •  ETHB的跨板聚合;
  • SPUA单板的跨板聚合并且支持SPUA单板在有业务配置的情况下聚合与去聚合,聚合与去聚合的两块单板最多只能一块有业务配置;
  • OPGD单板的跨板聚合支持OPGD单板在有业务配置的情况下聚合与去聚合,聚合与去聚合的两块单板最多只能一块板有业务配置;
  • SCUN主控板的跨板聚合;
  • SCUN和通用接口单元(Generic Interface Unit,GIU)单板间的跨板聚合;
  • GIU的跨板聚合。

其中ETHB是以太网业务接入及上行级联板的单板名称;SPUA是以太网级联业务处理及上行板的单板名称;OPGD为光接口板的单板名称;SCUN 是主控板的单板名称,而且上述名称都是针对产品MA5680T/MA5683T支持的单板而言的。

2. 负荷分担模式的工作原理

以主控板的两个端口聚合为例,它们共同分担负载,其工作原理如下图所示。

成员链路L1和L2处于聚合组LAG,MA5680T/MA5683T和对端Switch都需要将对应的两个端口加入一个聚合组。

成员链路L1和L2处于Selected 状态,都有流量存在。负荷分担的策略可以基于源MAC地址,以及源MAC地址和目的MAC地址的组合。

如果其中一个端口故障或者对应的链路故障,MA5680T/MA5683T主控板就不会把流量发送到故障端口。 

3. 非负荷分担模式(主备模式)的工作原理

以主控板的两个端口聚合为例,采用非负荷分担时,其工作原理如下图所示。

  1. 成员链路L1和L2处于聚合组LAG。
  2. 成员链路L1处于Selected状态,有流量存在。
  3. 成员链路L2处于Standby(备用)状态,不存在流量,为成员链路L1提供一种热备份的机制。
  4. 当成员链路L1失效后,系统将L2作为活动链路。

4. 跨板聚合实现原理

跨板端口聚合在对外体现上与同板端口聚合相同,包括聚合组端口的数量和负荷分担策略等。
在使用跨板聚合特性前要确保相应两块单板支持跨板聚合,以及两块单板之间已经通过背板或面板互联。

跨板聚合的工作原理示意,如下图所示。

说明: 

  1. 如果两块GIU板状态都正常,从用户业务板来的业务流会根据报文的MAC地址分担负荷,将业务流分到两块单板的聚合端口上。
  2. 如果一块GIU单板的端口故障(Link down),故障端口的业务流会切换到另一块状态正常单板的端口上。
  3. 如果一块GIU单板故障,故障单板的业务流会切换到状态正常的单板上 

5. 跨板聚合上行组网应用

跨板聚合特性的典型应用组网,如下图所示。

这种应用可以增加上行带宽(负荷分担)和链路保护,并且可以保护单板故障。

MA5680T/MA5683T支持双归属到两台上层设备,但LACP协议协商时要求MA5680T/MA5683T设备优先级更高;并且主动选择用上层哪一台设备作为主用,哪一台作为备用。

如果运营商在不同的历史时期相继为用户开发了不同的业务,如公众用户互联网接入业务、商业用户互联网专线业务、公众用户下一代网络(Next Generation Network,NGN)业务、商业用户VPN互联业务和公众用户交互式网络电视(Internet Protocol Television,IPTV)业务等,那么在光线路终端(Optical Line Terminal,OLT,此处指MA5680T/MA5683T)层面上,不同业务通过不同的上行端口接入不同的城域网。

从上图中可以看出,因为 OLT对接的上行设备有4种,所以至少需要4组接口且每组两个端口跨板聚合,即最少需要8个千兆位以太网(Gigabit Ethernet,GE)端口,在提供高带宽的同时提高可靠性。

ETHB和SPUA单板可以实现跨板聚合上行,SCUN与GIU可以实现跨板聚合。可以上行到同一台L2/L3设备,也可以双归属上行到不同的L2/L3设备上,如下图所示。

(1)上行到同一台L2/L3设备,如下图所示。

两块相同的单板各出一个端口(或者多个端口)组成聚合组,与网络侧一台交换机的两个端口(或者多个端口)配置成聚合。一个聚合组中最多支持8个端口的聚合,对端口位置和次序没有要求。

(2)双归属上行到不同的L2/L3设备,如下图所示。

  • 两块相同的单板各出一个端口(或者多个端口)组成LACP聚合组,网络侧有两台对端设备。其相应端口需要启动 LACP,两台设备工作在主备方式,在这种应用中不需要配置保护对。
  • 两块相同单板的多个端口既配置聚合,又配置保护对,聚合保护对中不同端口的数据配置要保证一致性。上行两种设备不一定要启动保护对,但端口数据配置要保持一致,在这种应用中支持两个端口(可以在两块板上)的保护对。

6. 聚合组内成员主备保护应用

聚合组内成员主备保护应用指接入节点(Access Node,AN)双归属到两台上行设备,与每台上行设备间有多条链路,这些链路配置为同一个聚合组。

到两台上行设备的两组链路互为主备关系,当主用链路中有链路发生故障或主用链路的可用带宽小于备用链路的可用带宽时备用链路升为主用,主用链路变成备用,如下图所示。

7. 聚合组内成员M+N备份应用

聚合组内成员M+N备份应用指M+N条链路配置为同一个聚合组,其中M为聚合组内有效聚合链路数(将M配置为聚合组的最大聚合链路数);N为聚合组内备份链路。

当M条当前端口中一个端口出现故障时从N中选择一个备用端口升为主用,如下图所示。

8. 上行接口保护对

为上行接口配置保护对后当主用上行口出现故障时,可以通过备用上行口上行。

上行接口保护对指在主备上行接口双配置时支持主备上行接口配置为保护对,根据上行接口的状态进行切换来保护上行链路,使上行链路能够正常工作。

MA5680T/MA5683T支持以下上行接口保护对特性规格。 

  1. 上行接口保护包括端口状态检测、保护倒换和业务恢复。
  2. 建立保护对的两个上行端口既可以位于同一上行板,也可以位于不同上行板,但必须保证端口类型相同。
  3. 建立保护对的端口必须在同一聚合组内,并且聚合组内不能包含其他端口。

上行接口的保护对实现模式为TimeDelay模式,适用于通过GIU槽位单板出上行接口。

TimeDelay模式采用端口检测来实现,其工作原理如下图所示。

TimeDelay的工作过程如下:

  1. 当主用上行链路正常工作时与主用端口扩展器(Port Extender,PE)对接,备用上行链路关闭。
  2. 当与主用PE接口的上行链路故障且主用主控板检测到后立即把备用上行链路打开,业务切换到备用上行链路上确保上行链路的备份。

7、链路聚合标准

目前以太链路聚合技术的正式标准为IEEE Standard 802.3ad,由IEEE802委员会制定。该标准是在802.3的基础上产生的,并且支持和兼容802.3ac及802.3ab标准,通过改进802.3标准最终形成现在的802.3ad标准。

该标准中定义了以太链路聚合技术的目标、聚合子层内各模块的功能和操作原则,以及以太链路聚合控制的内容等,其中以太聚合技术应实现的目标定义为必须能提高链路可用性、线性增加带宽、分担负载、实现自动配置、快速收敛、保证传输质量、对上层用户透明和向下兼容等。

1. 链路聚合在OSI模型中的位置

下图所示为以太聚合逻辑口在OSI模型中的位置:

它处在数据链路层,向上对网络层透明;向下聚合几个物理链路向上提供一个唯一和逻辑上的整体接口,即聚合逻辑口,与逻辑聚合组和逻辑聚合链路形成一一对应的关系。

该图还给出了链路聚合子层在CSMA/CD体系结构中的位置,以及这个体系结构与OSI参考模型的对应关系,表明链路聚合子层可以包含多条链路并提供给 MAC 客户一个单独的接口。在一个系统中可以对某些端口实现可选的链路聚合子层,而对其他端口不进行链路聚合,即并不是必须把所有的端口都聚合成一条链路。

2. 链路聚合子层的总体架构

下图所示为链路聚合子层的总体模块框架和模块之间的关系:

其中一些主要模块的功能说明如下:

  1. Frame Distribution(帧分发模块):主要负责通过一定的帧分配算法选择合适的端口发送MAC Client 传送过来的帧,以及可实现Marker 协议的生成/接收模块。
  2. Frame Collection(帧收集模块):加入链路聚合的各个成员链路接收到的帧都要首先交给Frame Collection 处理并由其传送给MAC Client,该模块包括Marker 协议响应模块。
  3. Aggregation Parser/Multiplexers(聚合解析/复用模块):在发送时负责传送Distributor、Marker Generator 或Marker Responder 的请求给适当端口;在接收时首先辨别不同的帧类型,然后根据类型传送到相应的模块处理。
  4. Aggregator(聚合模块):由帧分发模块、帧收集模块和聚合解析/复用模块组成。
  5. Aggregation Control(聚合控制模块):配置和控制链路聚合,其中的子模块 Link Aggregation Control Protocol 负责运行LACP 协议,可以自动与对端系统交互双方的聚合信息并执行链路聚合的相关配置。
  6. Control Parser/Multiplexers(控制解析/复用模块):发送时不做任何处理,只是简单地将聚合模块和控制模块的发送请求传给相应的端口;接收时解析报文的类型,如果是链路聚合控制协议数据单元(Link Aggregation Control Protocol Data Unit,LACPDU),则传给控制模块;如果是其他类型的帧,则传给聚合模块(Aggregator)。 

3. 链路聚合规则

通过链路聚合,MAC Client可以把加入聚合的多条成员端口看做一个普通端口使用。而要达到这个要求,链路聚合要遵循以下规则。

  1. 当运行链路聚合时MAC Client 要通过Aggregator 来和聚合链路的成员端口通信,并由Aggregator为MAC Client 提供标准的IEEE 802.3服务接口。
  2. Aggregator 负责将MAC Client 传送的帧通过一定的算法分发到不同的聚合成员端口,而从成员端口接收到的帧由Aggregator接收并处理,然后透明地传送给MAC Client。
  3. 系统中可以有多个 MAC Client 和 Aggregator,任何时候一个成员端口能且只能绑定到一个Aggregator上,而一个MAC Client最多只能由一个Aggregator为其服务。
  4. Link Aggregation Control负责管理和监控整个Aggregator的运行,包括决定哪些端口可以聚合,把满足聚合条件的端口绑定在一起并将其聚合到合适的 Aggregator;同时监视聚合的运行情况,必要时对整个链路聚合进行调整。
  5. Aggregator的绑定和配置既可以通过手工配置,也可以通过LACP协议自动配置。
  6. 通过聚合链路传输帧时要保证帧不能乱序。
  7. 每个Aggregator都要分配一个全球唯一的MAC地址,以供位于聚合子层之上的应用模块和聚合端口收发以太网报文时使用,实现时Aggregator的MAC地址可以是组成这条聚合链路的某个成员端口的MAC地址。

8、链路聚合控制协议(LACP)

1. LACP工作机制

LACP是IEEE 802.3ad 标准的主要内容之一,它提供了一种标准的动态链路聚合的控制方法。

在 LACP 协议中聚合链路两端的每种设备,端口称自己为“Actor”,称对端设备端口为“Partner”。两端设备端口之间通过周期性地交换 LACPDU 报文向对端通告自己的系统优先级、系统MAC、端口优先级、端口号和操作Key,并据此完成聚合的形成和控制,包括端口的增加和离开。对端接收到这些信息后比较这些信息与其他端口所保存的信息以选择能够聚合的端口。双方可以对端口加入或退出某个动态聚合组达成一致,从而决定哪些链路可以加入同一聚合组,以及某一条链路何时能够加入聚合组。

判断将一个端口绑定到Aggregator的关键依据是LAG ID,判断方法如下。

  1. Aggregator的操作Key和端口的操作Key相同。
  2. 已经绑定到这个 Aggregator 的其他端口和这个端口有相同的链路 LAG ID,即与Aggregator关联的LAG ID必须和端口的LAG ID相同。

端口绑定到这个 Aggregator 后根据前面的端口类型确定自己在聚合组中的角色是Unselected端口,还是Selected端口,或者是否能成为主端口。绑定到一个Aggregator的端口称为“处于IN_SYN状态”,这个状态需要靠周期性的交互LACP报文来维持。

当端口加入动态聚合组后该端口就会运行LACP协议,并启动聚合链路收发数据。LACP协议会周期性地发送LACPDU给对端,实时地交换信息。聚合的双方根据LACPDU报文中的信息按照选择逻辑模块提供的动态选择算法选择合适的端口,并控制聚合的状态,在聚合条件发生变化时自动调整或解散链路聚合。被选中的成员端口可以正常转发流量,而未被选中的成员端口将被置为阻塞状态,不能转发任何流量。聚合链路中的流量会按照一定的规则分担到各个选中的成员端口上。

由于LACPDU是周期性的交互,即聚合的双方每隔一段时间便互发一次协议报文,所以当有选中成员端口因为某种原因不能工作时链路聚合可以很快感知到并重新选择端口状态;同时置该链路为阻塞,通过该端口转发的流量将被重新分配给其他选中成员端口,这样实现了增加带宽和链路动态备份的功能。如果聚合双方工作稳定,则系统继续保持原有聚合状态,不做任何处理。

端口离开Aggregator的条件如下:

  1. 如果Actor端口在一定时间内(使用long timeout时是90秒,使用short timeout是3秒)未收到Partner端口发送的LACP报文,则宣告自己处于超时状态;如果在下一个short timeout时间(3秒)内还未收到Partner的报文,则离开这个Aggregator。
  2. 如果从Partner端口收到的LACP报文发现LAG ID发生改变(系统ID或操作Key发生变化,系统 ID改变说明连接到的对端设备发生变化;操作 Key发生变化可能是对端端口的属性发生变化),则端口也会离开这个Aggregator。
  3. Actor 端口本身的属性发生变化,设备通过动态操作 Key 功能为其分配的操作 Key发生变化导致和Aggregator的LAG ID不匹配,从而离开聚合组。

LACP 是一个完全的事件驱动系统,整个工作过程中的每个动作均由事件触发。并且这些事件的发生顺序和时间是随机的,事件能以任何顺序并在任何时刻出现。

这里需要指出的是LACP协议并不等同于链路聚合技术,而是IEEE 802.3ad 协议提供的一种链路聚合控制方式。具体可以选择采用LACP协议实现,也可以采用其他方式实现,如Cisco公司独有的端口聚合协议(Port Aggregation Protocol,PAgP)和以太网链路束(Ethernet Links Bundling,ELB)等。

2. LACP的执行步骤

LACP通过以下步骤来实现设备A与设备B之间对链路的聚合,如下图所示。

  1. 设备A和设备B通过端口Port1、Port2、Port3和Port4与对方交换LACP报文。
  2. 设备B收到设备A的LACP报文后比较LACP报文信息与其他端口所保存的信息,以选择能够汇聚的端口。
  3. 设备A收到设备B的LACP报文后比较LACP报文信息与其他端口所保存的信息,以选择能够汇聚的端口。
  4. 设备A和设备B对可以加入汇聚组的端口达成一致并形成链路汇聚组。

3. LACP的特点

  1. 动态性:在没有手工聚合的情况下只要有链路可以聚合,则将其聚合。
  2. 连续性:手工配置和初始化并不需要正确的操作,因为配置机制将不断地监控状态的变化;检测是否需要重新配置,并且纠正错误的配置,必要时将有错误配置的链路剔出聚合组。
  3. 确定性:已完成的配置不再依赖事件发生的顺序,完全由单一链路的聚合能力和物理连接来决定。
  4. 可控性:聚合链路的配置能力受设备使用的硬件和软件的限制。
  5. 兼容性:如果一条链路不可加入聚合,要么因为其自身的原因,要么与其所连接的设备有关。
  6. 快速:这种方法提供了更加快速的配置,同样可以更快地检测到错误。它可使帧被发送到错误的Aggregator上,被复制和顺序被打乱的风险降低且协议头等额外的信息变小。
  7. 发送方式。
    事件触发:本端状态或配置变化等事件引发新的协议报文产生和发送。
    周期发送:聚合链路稳定工作时系统定时发送当前状态以维护聚合。
    发送数量:平均每秒发送的协议报文不超过5个。
  8. 安全性
  • 协议报文不带编号,因此双方不采用检测和重发丢失协议报文方式,而是采用定时器和周期发送机制来避免信息丢失。
  • 链路聚合后聚合组内的成员端口有选中和备用两种状态,二者是LACP 协议层维护的聚合端口状态,并不是端口的物理状态,但是端口的物理状态变化会引起LACP 协议层的端口状态变化。如果聚合端口故障,LACP 协议层的端口状态会迁移到备用。
  • LACP 支持检测聚合链路的状态,包括物理端口状态变化、单板故障、端口转发失效和对端聚合端口状态变化。 

4. LACP协议帧结构

LACP 协议的帧结构,如下图所示,报文长度为128 个字节,一些主要字段的具体含义如下。

  1. Destination Address(目的地址):Slow Protocol Multieast 地址,802.3 规定的慢速协议地址,即0180-c200-0002。
  2. Source Address(源地址):发送此LACP 协议帧的端口的MAC 地址。
  3. Length/Type:协议类型,取值0x8809。
  4. Subtype:表示慢速协议的类型,0x01表示LACP;0x02表示Marker协议。
  5. Version Number:表示LACP 版本号,取值0x01。
  6. TLV_type:Actor Information,取值0x01,表示接下的一段是本端(Actor)的信息。
  7. Actor_Information_Length:取值0x14,表示Actor 信息占20 个字节。
  8. Actor_System_Priority:本端系统优先级,可由用户根据需要配置。
  9. Actor_System:本端系统ID。
  10. Actor_Key:表示本端口的链路聚合配置和能力,由本端链路聚合模块根据一定的规则赋值。
  11. Actor_Port_Priority:本端端口优先级,可由用户根据需要配置。
  12. Actor_Port:本端端口ID。
  13. Actor_State:本端系统当前端口的状态信息,长度为1个字节,如下图所示。

其中每一位的含义如下。

  • bit 0:LACP_Activity,用于对链路Activity的控制,1表示Active LACP;0表示Passive LACP。
  • bit l:LACP_Timeout,用于对链路Timeout的控制,1表示Short Timeout;0表示Long Timeout。
  • bit 2:Aggregation,编码为1说明系统认为当前链路可聚合;编码为0 说明系统认为当前链路不符合聚合要求。
  • bit 3:Sychronization,编码为1 表示当前链路处于同步状态;编码为0 表明当前链路还处于非同步状态。
  • bit 4:Collecting,编码为l 说明对当前链路接收帧的collection 状态为使能的;否则编码为0。
  • bit 5:Distributing,编码为1 说明从当前链路发送帧的distribution 状态为使能的;否则编码为0。
  • bit 6:Defaulted,编码为1 表明Actor 采用默认的Partner 信息来设置报文中的Partner信息;编码为 0 表明 Actor 采用接收到的 LACPDU 中的信息设置报文中的 partner信息。
  • bit7:Expired,编码为l 表明Actor 的Receive 状态机处于超时状态;否则编码为0。

此外,报文中还包含对端的相关信息,各个字段的含义与上面介绍的本端的含义相同,唯一的区别只是一个是本端的状态;一个是对端的状态。 

5. LACP 模块结构

LACP 模块主要实现对于动态链路聚合的控制,而协议报文的接收和解析等功能都放在报文管理等模块中处理。这些模块为LACP 模块提供相应的接口,LACP 模块在需要时就会调用这些接口来实现LACP 协议的一些功能。

该模块的结构,如下图所示。

为了降低模块间的耦合性,用状态机调度子模块作为处理状态机外部事件的统一接口,这些外部事件包括定时器超时事件、端口事件、收到报文事件和配置事件等。各状态机将无法直接响应这些外部事件,状态机调度子模块根据不同的事件激励相应的状态机。

例如,当收到LACPDU时状态机调度模块首先执行预处理。然后激励接收状态机(Receive Machine,RX)处理,RX 状态机解析报文中的信息后调用动态选择逻辑模块设置端口的选中状态。动态选择逻辑模块负责通过一定的选择算法选择合适的端口,只有被选中的端口才可以转发数据。

多路复用器(Multiplexer,MUX)状态机用来根据本端和对端的端口选中状态决定是否阻塞端口,以控制聚合组端口接收和发送数据功能的开启和关闭;发送状态机(Transmit machine,TX)负责填充LACP协议报文的内容并处理协议报文的发送,当收到通知时TX状态机立即调用报文发送模块发送LACP报文。周期发送状态机(Periodic Transmission machine,PTX)维护周期发送定时器的发送周期,即用来控制Actor和Partner交互LACPDU的频率。这一组协议状态机和状态机调度模块有机地结合在一起分工合作完成对于协议运行的控制和管理。 

三、虚拟接口切分技术

1、虚拟接口的资源切分和报文调度

单跳链路中的链路切分通过虚拟化手段将物理链路的资源切分成多个后分配给虚拟链路,并提供给不同的虚拟网络,链路资源的切割主要通过数据报文的调度来实现。

目前主流的调度方式有3种,如下图所示。

说明如下:

  1. 完全使用软件分类数据流,最后使用轮询指针处理。
  2. 使用软件分类数据流,但在每台虚拟设备之前都增加一个缓冲区队列实现并行处理。
  3. 采用硬件分类并利用现有的多核CPU和多队列网卡配合处理。

第1种方式最大的优点是简单,由于所有的虚拟接口都在一个OS域中,因此可以实现很多数量的虚拟接口。但由于最后使用轮询指针处理,因此影响报文处理的公平性。

第2种方式在每台虚拟设备前增加了一个缓冲区队列,可以增加公平性。不足之处是在增加了实现的复杂性,并且在缓冲区满时会增加设备的丢包率。

第3种方式基于目前带有多个调度队列的网卡并配合多核 CPU,多队列网卡可以将输入流量按照某些标识(如优先级标识、MAC地址、虚拟网络标识或虚拟路由器)分成多条数据流。

多核CPU的每个核心直接控制多队列网卡中的一个队列,并运行网卡的设备驱动程序。这种方式使网卡的驱动通过这些队列直接与网卡通信,并且多核使得多个队列之间不需要额外同步,从而可以更加有效地使用多核进行网络处理。但这种方式会受到CPU核心和网卡调度队列数量的限制,可扩展性不好。 

2、链路接口切分的报文处理流程和模块结构

链路的接口切分主要完成创建虚拟接口和报文调度两个过程:

  1. 创建虚拟接口过程:在物理接口之上为每条虚拟链路创建对应的虚拟接口,并将虚拟接口映射到对应的物理接口;同时在虚拟接口上绑定对应的上层协议。
  2. 报文调度过程:将收到的虚拟链路报文按照一定的优先级顺序调度,并将被调度的报文交给虚拟链路所对应的虚拟接口处理。

为了同时兼顾报文调度的速度和优先级配置的灵活性,需要设立两级优先级调度机制,第1级使用不可编程的硬件实现,能够保证较高的调度速度,如目前的多队列网卡;第2级则使用速度慢,但是配置方便的可编程硬件来保证业务优先级的灵活性。

支持链路虚拟化的转发引擎中存在两大类报文,即单跳链路报文和多跳链路报文,而在真实的使用环境中还会有用于配置虚拟链路的控制报文的存在。

这3种报文类型固定,不会随着用户的需求而发生变化。转发设备收到报文之后在接口处的处理流程如下图所示。

依据图中所示的虚拟链路接口处理流程,人们提出了基于多优先级的接口切分模块总体结构,如下图所示。

报文进入接口之后需要经过如下3个处理过程。

  1. 基于链路类型的报文分类过程:报文进入接口之后按照单跳链路报文、多跳链路报文和控制报文分成3类分别调度。
  2. 虚拟接口调度:在单跳链路中由报文类模块将报文分别交给对应虚拟接口进行初步处理,然后进入业务优先级队列调度,而多跳则直接调度业务优先级队列。
  3. 基于业务类型的优先级报文调度:根据链路上运行的业务类型和链路本身的优先级来调度报文,按照调度顺序送入转发引擎查表。

多优先级的接口切分模块包括两个子模块,即虚拟接口和业务优先级管理模块。前者负责创建虚拟接口、绑定上层协议和物理接口、在系统中注册所创建的接口,以及管理和维护虚拟接口的状态,虚拟接口状态发生变化时更新虚拟接口状态信息库。后者主要负责管理配置虚拟链路优先级和调度虚拟报文,以保证不同优先级的虚拟链路所需的报文传输质量。

接口模块的设计原则是优先接收并处理高优先级虚拟接口队列中的报文,并调节多优先级虚拟端口队列中报文的接收处理顺序来保证不同业务的报文传输质量。

为了实现优先级的自动配置和检测,多优先级虚拟接口调度模块还要实现对物理接口接收到的链路报文进行业务类型感知,进而确定其优先级并实现优先级自动划分。业务类型库用来存放业务类型信息,以判断收到的虚拟链路报文的优先级。其中存放虚拟链路类型与优先级之间的对应关系,这样可以实现灵活配置业务类型及优先级属性。

优先级检测模块在接收到虚拟链路报文时从报文中提取出优先级信息并根据信息查询业务类型库。如果在业务类型库中没有找到其优先级,则设置该业务的优先级为默认优先级;如果在业务类型库中找到多个优先级,则查询虚拟接口状态信息库,从中找到适合的优先级。

接口切分功能在实现上主要考虑如何在路由器中创建多个虚拟接口的实例,并且为上层提供与物理接口相同的接口。

3、采用PPP协议的链路接口切分的实现结构

实现接口切分功能的主要难点有两个,一是如何实现多个虚拟接口,并且这些虚拟接口能够如同上层一样提供与物理接口相同的功能;二是如何在这些虚拟接口之间调度,以实现链路资源的切分保障。

物理接口切分技术是虚拟链路实现技术中的核心技术,主要实现虚拟接口和虚拟链路的创建、维护,以及从物理端口到虚拟端口之间的透明映射;同时还需要保证每个虚拟链路之间的物理隔离与逻辑隔离并支持链路复用的虚拟接口和网络之间的对应关系,如下图所示。

存在如下两种情况:

  1. 一个物理接口对应多个虚拟接口。
  2. 一个虚拟网络在一个物理接口上对应一个虚拟端口。

为了能够为上层用户提供一个透明的映射环境,需要每个实现的虚拟接口都能为用户提供全部交互接口,以及每个接口的描述对象化。为了便于实现并且提高虚拟接口的可扩展性,使用一个能够将物理接口完全实例化的数据结构,并命名为“EndObj”。这个数据结构中包括该类型接口初始化和对外交互接口等一系列操作,并且可以支持该接口所支持的所有协议类型。

通过 EndObj 可以描述出多个虚拟但基于 SONET/SDH 的信息包(Packet Over SONET/SDH,POS)接口,并且由于所有的虚拟接口均和物理接口基于相同的数据结构,所以可以保证从用户层面看来物理接口与虚拟接口之间拥有相同的交互接口,其示意如下图所示。 

采用 EndObj 数据结构的正常报文处理流程如图(a)所示,由于点对点协议(Point-to-Point Protocol,PPP)的连接建立过程、配置网络协议参数和数据传输过程依赖不同的子协议,并且为了保证尽量减少对正常PPP协议过程的影响,因此将PPP协议的EndObj过程放在PPP协议的控制接口之上,即EndObj中不包括LCP协议的处理过程和网络控制协议(Network Control Protocol,NCP)的处理过程。在实现过程中我们将链路控制协议(Link Control Protocol,LCP)和NCP的过程集中到PPP协议控制接口中,以建立和配置PPP连接。

使用接口实例化实现物理接口切分的功能如图(b)所示,通过在PPP协议实例和物理接口的 EndObj 之间增加一个调度模块并创建多个虚拟 POS 接口的 EndObj。调度接口将处于已经建立连接状态的 PPP 协议报文根据虚拟链路报文头中的标识转发给不同的虚拟接口EndObj,然后由各个虚拟接口通过正常的PPP协议数据报文处理过程处理后交给上层接口。

我们在定义 EndObj 时尽量使其能够兼容更多的接口类型和链路层协议,通过使用EndObj数据结构可以不停地创建虚拟接口的实例,以扩展虚拟接口个数。 

4、虚拟接口创建流程

接口切分模块的关键处理流程分为两个部分,即虚拟接口创建与配置,以及虚拟链路报文调度过程。在接口切分模块中维护一个保存虚拟接口信息的数据结构,该数据结构以EndObj为基础并添加了一个虚拟接口的标识,命名为“vir_End_Obj”。

虚拟接口创建过程创建一个虚拟接口,使该虚拟接口继承物理接口的全部信息,最后将其注册到虚拟接口列表中和该物理接口的用户接口(User Interface,UI)中。虚拟接口创建流程如下图(a)所示,对应的函数流程如下图(b)所示。

虚拟接口的创建请求由管理员接收用户申请动作触发,申请中带有虚拟接口的初始化配置信息。模块中的用户接口函数 vir_enc_ppp 首先根据已创建的接口数量来判断是否可以创建虚拟接口,如果可以,则调用vir_ppp_load为虚拟接口创建一个空的EndObj。然后向系统注册以获取系统索引号,获得索引号之后调用vir_interface_init函数获取对应物理设备EndObj的全部信息,最后调用vir_interface_register将虚拟EndObj注册到虚拟接口列表中启用接口。

虚拟链路报文调度过程则在已经创建虚拟接口列表的基础上,通过区分收到报文中的虚拟链路标识将到达的报文交付给对应的虚拟接口处理。即提取到达报文的报头中的地址域与虚拟链路标识进行校验,判断属于哪条虚拟链路。然后进行调度,选择相应接口对象交软件模块中的函数int VirLink_Schedular_module(ppp_recv_pkt)来处理。

设备将收到的报文交付给物理 EndObj 时,调度模块通过判断报文属于哪个虚拟接口,即调用处理函数中的packetGetData函数取得虚拟链路报文的数据部分对应的虚拟接口。 

5、基于裁剪树的多跳虚拟链路转发模块实现

多跳链路转发模块完成多跳虚拟链路报文的转发功能,多跳虚拟链路转发处理过程分为两步。首先区分多跳虚拟链路报文和虚拟单跳链路报文。后者被送入接口调度模块交给上层处理,而前者将会被送入多跳转发引擎查表。

其次基于已经生成的多跳链路转发表将收到的虚拟链路报文转发到目标接口,这个过程的主要工作是维护多跳链路转发表。转发的同时还需要时刻维护多跳虚拟链路的转发表,包括通过裁剪完全检索树建立转发表、插入节点和删除节点。

多跳链路转发模块的实现流程,如下图所示。

模块可能收到的输入信息共有3种,即在开始时,建立裁剪树所需要的多跳虚拟链路完全树状态下的节点队列、待删除节点和待插入节点。

在建立转发表时Entriety_Tree_Cut函数将输入的一组多跳虚拟链路节点依据数据结构组成一个生成树,依据裁剪树算法裁剪形成的完全树并生成一个总的裁剪树节点队列和每个虚拟链路转发引擎独立的裁剪树队列;MulitHop_Tree_Create依据中的裁剪树队列和每个转发引擎的独立裁剪树节点队列分别创建多跳链路转发表。

各个多跳虚拟链路转发引擎的独立转发表在建立之后会被分配到每个转发引擎中,而全局转发表则会变成一个副本用于插入和删除操作。

在执行插入和删除操作时函数CutTree_Insert 和 CutTree_Delete 根据生成的全局裁剪树和插入删除节点对应转发引擎的裁剪树确定操作的位置,然后执行加入或者删除操作。执行之后从被操作的位置开始重新执行一次裁剪过程,以更新保存的副本并更新全局转发表和被修改过的转发引擎的独立转发表。

查表函数MultiHop_Forwarding_lookup在收到报文时查询生成的转发表,然后根据查出的目的接口号交付多跳链路报文。 

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/128794344