虚拟交换机工作原理

一、虚拟交换机概述

1、虚拟交换机简介

Switch(Virtual Switch)指虚拟交换机或虚拟网络交换机,工作在二层数据网络,通过软件方式实现物理交换机的二层(和部分三层)网络功能。

与传统物理交换机相比,虚拟交换机具备的优点:

  1. 配置灵活、扩展性强。一台普通的服务器可以配置几十台甚至上百台虚拟交换机,且端口数目可以灵活选择,例如VMware的ESX主机,一台服务器可以仿真出248台虚拟交换机,且每台交换机预设虚拟端口可达56个。
  2. 成本低、性能高。通过虚拟交换往往可以获得昂贵的物理交换机才能达到的性能,例如微软的Hyper-V虚拟化平台,虚拟机与虚拟交换机之间的联机速度轻易可达10 Gbps。

为设计虚拟网络交换机,通过采用虚拟设备引入一个软件抽象层,该抽象层将流量从物理网络元素中分离出来。通过这些虚拟设备可以合理且动态地管理虚拟化网络资源,并且有效地整合这些虚拟网络元素。

在虚拟化的服务器中的虚拟网络资源必须共享使用有限数量的物理网络接口,一台独立的虚拟交换机有一个或者多个虚拟网络接口,并且通过这些接口与虚拟网桥相联。

内部虚拟交换机之间可以直接通过虚拟网桥传输网络流量,而不通过实际的物理网络接口,也可以通过底层的物理网络接口实现虚拟交换机内部与外部之间的网络流量交换。

从用户来看,每台虚拟交换设备都表现出一个完整网络交换设备的所有特点,可以完成一台物理交换设备的所有功能。

对于该交换机软件平台来说,每台虚拟交换设备都拥有以下的特征。

  1. 拥有独立的配置平面。每台虚拟交换设备都有自己独立的用户管理系统、用户接入终端和配置文件,可以单独重启而不会影响其他虚拟设备。
  2. 拥有独立的控制平面。每台虚拟交换设备内都启动独立的用户状态进程,有自己独立的用户状态数据且互相独立无须跨虚拟设备通信。
  3. 拥有独立的转发平面。每台虚拟设备都有自己独立的邻接表项和 MAC 表等。可以独立完成报文转发工作,转发过程中无须和其他虚拟设备通信。
  4. 通过可编程机制将转发处理实现与提供的转发控制功能和管理服务分离,即将实现转发功能的硬件(如交换结构和转发引擎等)与转发控制软件(如路由控制、协议控制和服务控制)分离形成相对独立的交换、控制和管理平面。并公开相应层面的可编程接口,通过这些可编程接口形成相应的交换服务,以及对交换服务的控制和管理。
  5. 功能与其实现,以及交换和控制的分离提供了极大的灵活性,可以使通信硬件和软件开发商各自独立地开发其产品。通信硬件厂商研制交换硬件并提供底层的资源或功能控制接口;通信软件厂商或服务提供商可以通过可编程接口提供控制和管理交换硬件的控制软件,灵活而有效地构成应用或用户所需要的交换服务。例如,现有交换设备的转发和路由控制就位于两个不同的平面。路由控制属于其控制平面部分,而转发则属于传输平面部分。二者的分离实现提供了更大的灵活性,并有效地提高了设备的交换能力和性能,而这只是对交换设备的初步分离;此外,交换和控制的分离有利于它们各自独立地发展其技术(如转发机制和路由算法),这是虚拟交换机可编程控制和扩展的基础。

从虚拟交换机的网络服务和应用环境来看具有以下特征:

  1. 虚拟交换机可以实现不同的网络交换控制服务和新服务的扩展,提供形成多类交换服务的能力,从而为实现统一的语音、视频和数据等IP网络服务提供新的技术和基础。
  2. 新型的虚拟交换机体系结构和控制机制可提供不同网络或应用环境下服务的动态引入,以及新服务的及时快速构成,从而能够适应不同的应用和新应用的需求。
  3. 虚拟交换机有助于交换设备硬件厂商研制能够提供资源和功能控制接口的底层硬件;支持通信软件厂商设计并构造各种运行于交换设备之上的交换服务控制和扩展处理组件模块;支持网络建造者根据用户的需求快速部署和加载所需要的交换服务,以提供新的业务和多服务交换环境,并通过支持语音、视频和数据服务的自适应交换功能的快速建立和控制管理为可编程网络环境提供基础支持。
  4. 虚拟交换机可以使网络服务提供商使用一种安全和可控的机制,通过可编程接口访问路由器的资源,控制环境、算法(如路由协议和调度算法)或状态(如路由表和数据流软状态),以及编程控制交换设备的转发服务功能。即将开发的特定功能或服务模块嵌入到交换设备中,以提供扩展功能,形成能够灵活提供多种交换服务转发及控制结构(如IP电话、IP视频服务和VPN等)的统一虚拟交换机控制环境。
  5. 交换机系统虚拟化使用操作系统虚拟化技术,如Linux系统有多种操作系统级虚拟化的解决方案,它提供了任务调度、进程名字空间和内存限制等功能,以及符合项目编程规范的操作系统级虚拟化编程接口。
  6. 分布式的交换机设备含有多块单板,每块单板就是一个单独的节点,有自己的CPU、接口和内存等硬件资源。当创建虚拟设备时系统会预留必要的硬件资源来支撑每种虚拟设备运行,初始化虚拟设备时系统会运行一系列的进程来支撑每种虚拟设备的运行。
  7. 虚拟设备独立拥有接口、CPU和内存等硬件资源,独立地维护路由和转发表项,进行二层和三层转发。并且拥有独立的管理员和接入用户,可以使用自己的配置文件独立重启而不会影响其他虚拟设备。

虚拟交换机和物理交换设备的几种对应模型如下图所示,实际应用时可根据需求选择。

虚拟交换机的建立和管理需要统一的虚拟软件的支持,在虚拟软件的控制下物理交换设备可以根据上层需求灵活、高效地配置组织为虚拟交换机。这样可以极大地提高硬件设备的利用率,在规模上可以化大为小和积少成多。 

2、虚拟交换机存在的问题

虚拟交换机需要解决的主要问题:

  1. 如何在分布式交换机设备中创建、删除、启动、停止和重启虚拟设备,并为其分配资源等。一台完整的虚拟设备在各块单板上应有相应的子系统,使得每台虚拟设备拥有相应的板块来构成一种虚拟的分布式设备。
  2. 如何建立一种有效而灵活的虚拟交换机体系结构框架:虚拟交换机结构应具有一定的层次性和模块化,以使转发服务及其控制组件变得更加清晰和灵活,从而有利于服务的实现和灵活控制。
  3. 资源的虚拟化:交换设备转发资源虚拟化的目的是隐藏转发功能的硬件实现细节,以及分组调度和队列管理等功能的算法实现细节。即抽象路由器的底层资源或功能,以隐藏其具体实现细节并提供足够有效的编程引用和控制机制。资源的虚拟化形成了交换设备底层资源的软件抽象层,并屏蔽了不同交换设备的硬件实现差异。它是资源分割的基础,也是构成虚拟转发服务的基础。
  4. 资源分割(分配)和管理:即如何有效地针对多类(个)虚拟转发服务分割(分配)资源并控制资源的使用,包括资源的动态调度或调整。资源的分配和管理应兼顾资源使用的灵活性和有效性;资源分割和管理应能针对不同的虚拟转发服务要求提供相应的资源保障,并根据服务的变化动态调整资源。资源或服务调整周期的设置,以及调整策略是一个需要解决的问题。

其他需要解决的主要问题包括支持虚拟多服务转发的调度算法、分类和准入控制等机制、虚拟交换机中多类交换服务的监控(各类应用流负载及资源状况)和管理机制,以及支持并发的多种交换服务构成、部署和控制的方法和技术。

虚拟交换机存在的不足:

  1. 缺少一些高级管理功能,不能使用Telnet方式连接到交换机实际配置管理。并且它没有高级虚拟交换机命令行接口,只能使用不同的命令来实现指定操作。
  2. 不能直接连接到物理交换机,如果物理交换机中专用的物理线路或端口出现问题,那么只会有一台服务器受到影响。但是在虚拟化环境中一条线路可能连接10台以上的虚拟机(VM),出现问题可能会导致多台VM连接中断。而且连接多台VM需要更多带宽,必须由虚拟交换机处理。
  3. 网络团队通常不具备虚拟化环境的管理权限,事实上虚拟化会带来许多新的网络问题,包括流量可见性有限、需要实施新的网络策略、手工修复虚拟交换机和网络配置,以及VM迁移造成的I/O带宽压力等;此外,虚拟化也会引起虚拟化管理和网络管理的冲突。
  4. 由于相同主机VM之间的流量不会流出服务器并进入物理网络,因此网络团队很难监控或管理这些流量,缺少可见性也意味着网络防火墙、QoS、ACL和入侵检测系统(Intrusion Detection System,IDS),以及信息保护系统(Information Protection System,IPS)无法监控物理网络的数据传输。
  5. 管理员只能控制主机中物理网络接口卡的上行端口,无法控制虚拟交换机中存在的诸多虚拟端口。

为了解决这些问题,网络团队需要新的网络管理措施和安全产品,如Reflex System的虚拟管理中心、Altor Networks的虚拟防火墙和Catbird的vSecurity,所有这些产品都有专门设计的主机虚拟网络流量安全、监视和控制功能。

二、虚拟交换机工作原理

1、虚拟交换机工作原理

实体交换机类似一台专用的特殊计算机,主要包括中央处理器、随机存储器和操作系统,它利用专门设计的芯片ASIC使交换机以线路速率在所有端口并行转发数据。

虚拟交换机使用软件方式从功能角度实现这些硬件设备和芯片逻辑的作用,通过分析流入的数据帧并根据帧中包含的信息做出转发决策,然后把数据帧转发到目的地。

1. 虚拟交换机工作流程

虚拟交换机完全模拟实体交换机的工作流程,即读取数据包中的 MAC 地址信息。然后根据 MAC 地址转发,并将这些 MAC 地址与对应的端口记录在自己内部的一个地址表中。

具体的工作流程如下:

  1. 当虚拟交换机从某个端口收到一个数据包时首先读取包头中的源 MAC 地址,这样即可知道源MAC地址的机器连接在哪个端口。
  2. 读取包头中的目标MAC地址并在地址表中查找相应的端口,如果表中有与目标MAC地址对应的端口,则把数据包直接复制到该端口;否则广播到所有端口上。当目标机器对源机器回应时,交换机又可以学习目标 MAC 地址与哪个端口对应,这样在下次传送数据时不必对所有端口广播。

2. 地址映射表

1)学习过程

虚拟交换机通过学习的方法来获取每个 MAC 地址的工作站位于何处,它观察每一个端口的所有网络流量并记录每一帧的源 MAC 地址,以及观测到的该帧的端口,然后将其学习到的内容添加到一个地址映射表中。

收到一帧后按如下方式转发:

  • 如果帧目标地址在过滤表中,而且通过帧的源端口可以到达,则丢弃该帧。
  • 如果帧目标地址在过滤表中,而且其出端口与源端口不同,则通过此端口转发该帧。
  • 如果帧目标地址不在过滤表中,则通过除源端口外的所有端口转发该帧。

2)地址老化时间

实体交换机每当学习到一个 MAC 地址时就启动一个与该地址表目相关的定时器,称为“地址老化时间”。如果具有此地址的工作站停止发送帧,其表目将会超时并从表中删除。

虚拟交换机可以利用软件机制检测到模拟器端的状态,如果模拟器断开连接,则直接删除其对应表项,因此不用实现地址老化时间。

3)静态地址映射表目

在实体交换机应用中有时固定连接到某些主机,为了加快转发速度和安全限制,在交换机中配置静态地址映射表表目,该表目永不老化。

虚拟交换机暂时没有这种需求,因此没有实现静态表目的配置。如果今后应用中有此需要,可以添加此功能模块。

3. 转发技术

转发技术即交换机所采用的用于决定如何转发数据的机制,现在使用的转发技术主要有如下两种。

1)直通转发技术(Cut-through)

采用直通转发技术的交换机一旦解读到数据帧目标地址,则开始向目标端口发送而不保存数据帧。通常交换机在接收到数据帧的前6个字节时就已经知道目标地址,从而可以决定向哪个端口转发,因此交换机可以在收到整个数据帧之前开始转发数据。

直通转发技术的优点是转发速率快、减少延时和提高整体吞吐率;缺点是交换机在没有完全接收并检查数据包的正确性之前就已经开始转发数据。这样在通信质量不高的环境下交换机会转发所有的完整数据包和错误数据包,类似广播风暴。直通转发技术适用于网络链路质量好和错误数据包较少的网络环境。

2)存储转发技术(Store and Forward)

存储转发技术是计算机网络领域使用得最为广泛的技术之一,以太网交换机的控制器首先缓存输入端口到来的数据帧,然后检查是否正确并过滤冲突帧错误,确定帧正确后发送该帧。

存储转发技术在数据处理时延时大,但是可以对进入交换机的数据帧进行错误检测。并且能支持不同速度端口间的转换,保持高速端口和低速端口间协同工作,从而有效地改善网络性能。

虚拟交换机在选择转发方式时需要从性能和功能两个方面考虑,直通转发方式效率更高。如果将错误的帧都交由控制器处理,则会降低控制器的工作效率。从系统整体效率和正确性出发,可选用存储转发模式。

4. 二层实体交换机与虚拟交换机之间的功能参照

二层实体交换机与虚拟交换机之间的功能参照,如下表所示:

每一台分割出来的虚拟交换机模拟了实体交换机存储转发、数据帧解析和 MAC 地址映射表的维护等功能;另外由于虚拟交换机用软件模拟,所以实现内部分割出来的虚拟交换机之间的隔离及通信必须模拟物理端口和物理通信链路,并且虚拟 MAC 地址分配给分割出来的虚拟交换机。

此外,多台虚拟交换机在物理交换机内部组建成为一个网络拓扑结构,需要模拟生成树协议,优化网络拓扑结构。 

2、虚拟交换机分割和隔离机制

虚拟交换机的分割与管理需要统一的虚拟软件支持,在虚拟软件的控制下物理交换机可以根据上层需求灵活、高效地配置出虚拟交换机。

釆用软件仿真平台分割出来的虚拟交换机由物理交换机的内核进程模块模拟,这里需要重点提及的是系统根据需求分割所需要的虚拟交换机个数有限,不能无限地分割。创建虚拟交换机可以通过默认规范和自定义规范两种方式进行。

1. 默认规范

系统根据需求分割所需要的虚拟交换机台数,然后根据所分割出来的虚拟交换机的数量平均分配物理交换机的各项资源,包括CPU、内存、存储器和物理端口等。

虚拟交换机之间连接釆用默认的网络拓扑结构,通过虚拟端口及虚拟链路通信,并且设置虚拟端口的状态进行虚拟交换机之间的隔离;同时随随机生成虚拟MAC地址并分配给每台虚拟交换机。

2. 自定义规范

系统根据需求分割所需要的虚拟交换机台数,然后根据所分割出来的虚拟交换机各自对资源需求的不同有差别地分配物理交换机的各项资源,包括CPU、内存、存储器和物理端口等。

虚拟交换机之间连接釆用自定义的网络拓扑结构,通过虚拟端口及虚拟链路通信并且设置虚拟端口的状态进行虚拟交换机之间的隔离;同时随机生成虚拟 MAC 地址并分配给每台虚拟交换机。

3、虚拟交换机功能模拟

1. 模拟通信链路

物理交换机内部的虚拟交换机之间并不存在实际的物理链路,从物理交换机的角度来看,分割出来的虚拟交换机只是独立运行的进程。所以建立虚拟交换机之间的通信链路需要从进程间的通信这个角度来考虑,而共享内存是一种最为高效的进程间通信方式。即内核预留出一块内存区,有访问需求的进程将内存区映射到其私有地址空间,即可实现信息在多个进程之间交换。进程不用复制数据,只要直接读写这一块内存即可,从而使得效率有很大提高。

分割出来的虚拟交换机属于同一台物理交换机,对于物理交换机它们是两个平等的进程,其共享内存方式示意如下图所示。

2. 虚拟交换机端口

1)物理交换机端口的功能

物理交换机拥有内部的交换矩阵,以及一条高带宽的内部总线,所有端口都与这条内部总线连接。当控制平台接收到数据帧之后会查找内存中的MAC地址映射表来确定目的MAC地址与哪一个端口相对应,然后通过内部交换矩阵将数据项准确和高速地发送到目的端口。

如果在查找 MAC 地址映射表时发现目的 MAC 地址不存在,则交换机将此数据项向除该数据项的源端口外的所有端口广播。当端口接收到回应信息,则建立 MAC 地址与端口的对应关系并添加到MAC地址映射表中。

物理交换机的所有端口都独享信道带宽,从而保证数据从每个端口快速和有效地传输。交换机会依据所发送的数据帧的目的 MAC 地址比对 MAC 地址映射表,将每个数据帧独立地从源端口发送到目的端口。而不用发送给所有的端口,从而避免与其他端口冲突。物理交换机各个端口之间独立地传送数据帧,隔离了冲突域,从而大大提高了实体吞吐量。

2)虚拟交换机端口的功能

虚拟交换机上拥有两种端口,一种是物理交换机本身所拥有的物理端口;另一种是用于虚拟交换机之间通信及隔离创建的虚拟端口。这两种端口所要实现的功能基本一致,都用于建立链路连接。

只是在功能模拟实现的方式上有所区别,如下表所示。 

虚拟交换机内部构建了MAC地址映射表以建立目的MAC地址与端口的对应映射关系,利用这个对应关系避免了广播,从而隔离冲突域。

3. 虚拟MAC地址

由于没有硬件的支持,所以分割出来的虚拟交换机无 MAC 地址标识。二层基本交换机在交换过程中只是转发数据帧,源MAC地址和目的MAC都是端点的MAC地址,没有涉及交换机本身的MAC地址。假如交换机要实现可网管、支持IEEE 802.1Q的VLAN功能或者IEEE 802.1d的生成树协议(Spanning Tree Protocol,STP)功能(用于构成网桥ID),那么交换机必须要具备MAC地址。 

虚拟 MAC 地址要遵循一个原则,即避免与全网络中正在使用的 MAC 地址发生冲突。由于分割出来的虚拟交换机都处于一台物理交换机内部,所以只要虚拟出用于本地管理的MAC地址即可。这样可避免与正在使用的MAC地址重复,MAC地址由6个字节的地址字段组成。

IEEE的注册管理委员会RAC负责分配地址字段的6个字节中的前3个字节,这3个字节称为“机构唯一标识符”(Organization Unique Identifier,OUI);地址字段中的后3个字节由厂家自行指派,称为“扩展标识符”。

IEEE将地址字段中第1个字节的最低第2位规定为全球/本地(Global/Local,G/L)比特,为1是全球管理,厂家向IEEE购买的OUI都属于全球管理;为0是本地管理,这时用户可以根据需求分配网络中的地址,48比特的MAC地址的二进制记法如下图所示。

根据 IEEE 对 G/L 比特位的设定,采用用于本地管理的 MAC地址将虚拟交换机的虚拟MAC地址前3个字节,即机构唯一标识符OUI设为00-00-00;后3个字节即扩展标识符,由系统自行分配,以00-00-01起始,无重复地依次生成虚拟MAC地址。 

4、虚拟交换集群技术

虚拟交换集群(Virtual Switch Cluster,VSC)技术可以将多台交换机设备通过VSC互联口连接且在虚拟化整合后形成一台更大容量和虚拟的逻辑设备,如下图所示。

VSC可以把多台可以单独运行的设备结合成一台设备,并且动态添加或删除设备成员。这些通过VSC口链接在一起的VSC成员可以通过拓扑发现协议发现其他成员并通过一定的机制选择一台主设备,其他设备担任转发角色,相当于扩充一台设备。VSC支持更多的接口板、更多的接口和更多的业务,并提供设备级别的冗余备份和设备的可靠性。 

VSC虚拟化技术在原有的软件体系架构基础上增加了一个 VSC虚拟化层,如下图所示。

这个VSC虚拟化层屏蔽了虚拟设备与真实的物理设备的差异,对于单一运行的物理设备或VSC 虚拟化出来的逻辑设备,上层软件不需要做任何修改并且其新增的功能可同步应用于所有硬件设备。

VSC 虚拟化层的主要功能为自动进行 VSC 系统的拓扑收集、角色选举并将设备组虚拟成单一的逻辑设备,上层软件所见的只是一台设备。

在数据中心和园区网络中使用VSC技术可以在网络汇聚与核心层各自进行横向整合,将多台冗余设备虚拟化为单台逻辑设备形成一个网络管理与转发节点。同时消除环路,并形成捆绑链路的高带宽和可靠性上联。

VSC应用示意如下图所示:

使用VSC技术虚拟化网状的园区网络形成了一个非常简洁的架构,网络各层之间通过捆绑的单逻辑链路互联,消除了环路。不再需要在接入层设计复杂的生成树协议,也不再需要在变成单一逻辑节点的客户端接入网关上运行VRRP协议。

VSC技术在交换机的普通接口就可以实现,不需要购买昂贵的虚拟化控制单板。通过简单的配置就可以简化网络结构,便于网络运维和扩展。使用 VSC 虚拟化技术仅仅需要增加成员设备的数量就可以轻易地扩展VSC系统的端口数、带宽和处理能力,从而大幅度提高整个网络的容量和性能;同时由于具有强大的扩展能力,因此用户升级网络时不需要替换原有设备。而仅仅需要增加新设备和原有的设备组成VSC系统即可,从而很好地保护了用户原有投资。

VSC技术还可在链路级、设备级和网络级3个层面提供高可靠性保障,使用户的网络坚如磐石。 

5、基于流的虚拟交换技术

基于流的网络交换技术提供了一个有效的网络交换方案,采取用软件定义网络的方式使得用户可以以忽略底层硬件的具体情况,直接管理流量并设置数据报文以某种方式通过网络。

用软件来统一管理物理设备借鉴网络 TCP/IP 协议的数据链路层桥接原理和网络层协议的设计思想,利用软件实现和硬件实现结合的方式对现有的网络结构重新定义。在系统中实现一个虚拟的交换层,除了具有高效的传输能力外还可以为云基础网络提供智能的监控服务。

用软件实现方式具有强壮的伸缩性、灵活性和移动性,并且方便系统扩展。

1. 流分组交换的层次结构

流分组交换分为两层,即物理交换设备虚拟化和网络协议层虚拟化。

1)物理设备虚拟化

物理设备虚拟化指利用软件来抽象网卡设备,使用用户层软件对物理网卡实现逻辑划分。划分后的设备既可以实施流量控制和负载均衡策略,又能高效地利用设备资源,虚拟化后的网卡具有和物理网卡一样的功能。硬件实现的资源划分不易动态扩展,软件虚拟以后可以按照需求动态划分资源。
通过虚拟技术将一台或多台独占物理设备虚拟成至少一台逻辑设备供多个用户进程同时使用,通常把这种经过虚拟的设备称为“虚拟设备”,它一定要和实际的物理设备绑定才可以使用。

虚拟交换设备管理分为两个部分,一部分是用户态虚拟平台管理,可以用来配置和查看交换设备的状态,用户可以在用户空间查看和修改虚拟交换设备的属性文件;另一部分是通过内核模块编程管理,由内核直接管理,主要负责物理交换设备运行和数据通信。

2)网络协议层虚拟化

利用软件抽象的灵活性重新定义数据链路层和网络层结构,并引入一个虚拟管理层来实现数据链路层和网络层。即把传统定义的OSI的7层协议的网络层和物理链路层压缩为虚拟网络层,如下图所示。

这样可以把数据链路层和网络层的数据整合成一个数据流,扁平化了网络结构。每个经过虚拟网络层的数据报文均被重新标记,这个数据报文包含链路层和网络层信息,基本可以对每个数据报文按照逻辑链路准确分类。

网络中的数据报文可以组织成一个一个的数据流,这样做的好处在于用户可以根据需要为每个数据流定义属性,如 QoS 策略定制、数据报文的检测和隔离,以及网络负载均衡等。

报文基于流分类不再需要在物理链路层运行生成树协议,从而减少数据报文的转发延迟并降低网络的流量负载。 

2. 流分组交换

应用基于流分组交换技术不必改动已有的网络协议,所有的交换工作都在内核协议栈部分完成,大大增加数据交换效率。但是需要在内核协议栈数据结构中添加一些关于数据流控制相关信息,以标识当前处理的数据报文属于哪个数据流。

流分组交换的数据报文控制信息结构如下图所示:

经过标记后的逻辑数据报文头部结构如下图所示:

逻辑报文的生存时间 TTL 是为了防止逻辑报文在网络中过久滞留而导致网络队列太长而溢出,也能保证数据帧不会在成环链路中被无限次转发,这是实现两点之间多路径转发的基础。

虚拟机的虚拟网卡标记每个发出的数据报文的控制信息,与之连接的交换节点接收到数据包后会根据全局控制器的数据建立一个虚拟连接表。交换节点根据数据报文的控制信息查找虚拟表,然后将数据报文转发到目的端口完成一次数据报文交换。

每个虚拟连接可以包含多个虚拟端口,这些虚拟端口被划分为一个逻辑组。有了这个逻辑组可以执行更复杂的交换功能,如多路径转发、快速路由、链路集成、负载均衡和流量整形等。

如下图所示,每个数据流会根据流量使用多个端口,以加快数据报文的转发,多个虚拟连接的数据流可以转发到具有同样操作需求的端口。

基于流的分组交换可以在虚拟机内部网络通信时设定较大的 MTU 数据包来提高数据报文的转发效率,因为在内核协议栈可以避免IP分组和重装的过程,所以降低了数据报文的转发延时。

每个虚拟端口和虚拟连接可以自由配置匹配规则用于匹配和过滤数据报文。例如,某个端口限制IP地址为10.0.0.*的数据包发送。如果接收到类似的数据包,则抛弃。

流分组交换需要维护一个虚拟连接表,如下图所示。 

每个表项唯一标识了一条数据流,应用于经过该数据流的报文需要执行的操作和该数据流的统计信息。

虚拟连接表表项的组成如下表所示:

1)流分组交换控制

流分组交换可以实现的重要前提就是流分组交换控制器,它负责建立和移除虚拟连接表、设置虚拟连接表的规则和物理虚拟设备的参数、获取数据统计信息、QoS设置、配置虚拟防火墙,以及VLAN 划分等。

流分组交换控制器负责监控所有的虚拟连接表,这样虚拟机内部网络的流量状况就可以全方位地被监测,凭借以前的物理设备这是做不到的。

控制器的结构如下图所示:

如果基于流交换的数据报文不与外界通信,则数据报文可以不用经过物理网卡,而直接在内存中交换。这个机制极大提高了交换的性能,以及报文的转发速度。

传统的数据链路层需要运行生成树协议来去除回环通路,MAC 地址学习也占用了数目可观的网络流量。现在可以用控制器来为所有的虚拟交换设备维护一个全局的转发路径,这样省去了生成树协议造成的数据帧转发的延迟,以及增加的额外网络流量。 

流交换分组控制器要根据配置文件生成虚拟连接表、创建或者移除虚拟连接、维护虚拟端口和虚拟连接的存储队列,并且为虚拟连接和虚拟端口配置数据报文处理规则。

2)流分组控制协议

流分组交换控制器通过 Netlink 套接字与内核进程通信,也是网络应用程序与内核通信的最常用的接口。Netlink是一种异步通信机制,在内核与用户态应用之间传递的消息保存在socket缓存队列中。发送消息只是把消息保存在接收方的socket的接收队列中,而不需要等待接收方收到消息。

流分组交换控制器和流分组交换模块之间通过Netlink建立一个普通的TCP连接,这是一种基于进程间通信机制。流交换控制器和交换模块之间信息交换采用自定义的一套协议,控制信息的头部协议结构如下图所示。

控制信息事务 ID 用于标识同一对流分组交换控制器和流交换模块之间的配置过程,如本次A发送给B的控制信息,B必须要用同一个事务ID来回复A的请求,即以区分A发送给B的另外的控制信息。

3)控制信息的类型

控制信息的类型如下图所示:

配置信息主要通知流分组交换模块端口和端口队列配置数据等,流分组交换控制器通过控制协议获取各个交换模块和内置的虚拟端口信息。既可以对虚拟连接表进行全局性操作,也可以高效地检测网络的状态,未来的工作还会实现根据网络监控结果自动地调节各个交换节点的配置信息。

三、虚拟交换机技术体系

1、虚拟交换技术

虚拟交换技术(Virtual Switching Technology,VST)是基于分布式内部交换网络技术,它把两台或多台物理设备通过特殊的虚拟交换链路(Virtual Switching Link,VSL)连接起来运行特殊的软件,使得这些多台设备虚拟为一台或多台逻辑设备。

分布式虚拟交换系统(Virtual Switching System,VSS)是一个开放和可扩展的系统,主要包括硬件和软件两大部分,其架构如下图所示。

从功能逻辑的角度来看,其中包含如下两个平面。

  1. 数据平面:包含用户可见的数据平面,即用户可见的用户端口,以及用户不可见的内部互联网络,各用户端口之间的业务数据通过内部互联网络来转发。虚拟交换通过连接各成员设备的内部互联网络来实现,即虚拟交换技术的本质是分布式内部互联网络,这是实现跨设备链路聚合、跨设备端口镜像和跨设备层2(Layer 2,L2)及层3(Layer 3,L3)等价多路径(Equal-Cost MultiPath,ECMP)转发的硬件基础。
  2. 控制和管理平面:从物理的角度来说,虚拟交换技术所涉及的每一种成员设备都是一种可以独立工作/运行的物理设备。在虚拟交换的实现中为了统一管理和控制,控制平面软件实质上被分为两个部分,一是硬件相关的部分,即保证成员设备能正常工作的设备驱动程序和机箱管理等基本功能;二是硬件无关的部分,即控制平面中的控制协议,以及面向用户进行设备管理的管理平面。在虚拟设备形成的过程中将通过角色选举出整台虚拟设备的主控设备,从控制平面软件的角度来看,只有主控设备的控制平面的上述两个部分是完全激活的。而其他成员设备只有硬件相关的部分处于激活状态,成员设备与硬件无关的控制协议和管理部分将处于 Standby 状态。在虚拟设备形成以后所有成员设备将接受主控设备控制平面的统一控制和管理,从而达到虚拟为一台设备的效果。 

1. VSS硬件

交换机硬件平台:机架式高端交换机平台。

用于设备互联的 VSL 和与之对应的物理端口:对于机架式高端交换机,VSL 通常由线卡上的万兆端口来提供。

2. VSS软件

VSS软件是在VSS硬件基础之上实现设备虚拟化的控制协议软件,主要包括如下3个部分。

1)VSS协议

主要负责虚拟逻辑设备的建立和维护,包括VSL管理和链路状态监测、对端发现、拓扑收集、角色选举、成员设备软硬件版本检查,以及多激活检测(Multiple Activation Detection,MAD)和恢复等功能。

2)虚拟设备层

在 VSS 协议基础上实现对 VSS 成员设备的板卡等各种资源进行管理和抽象,并对这些成员资源进行虚拟映射,从而模拟出一台虚拟的交换设备。最终对于运行在此系统中的各种应用和业务特性软件来说,通过虚拟设备层的抽象和屏蔽使其并不关心设备物理上的差异。即不管是真实的物理设备,还是虚拟出来的VSS设备均不需要做任何的修改。

3)支撑业务

基于虚拟设备层上层的管理和控制协议软件将可以运行在VSS设备中,这些服务如下。

  • 设备管理:包括SNMP、CLI和配置文件等配置管理。
  • HA服务:HA同步和倒换服务等。
  • 业务模块:根据交换机硬件支持的业务特性提供各种业务模块,通常包括重要的跨机箱链路聚合和端口镜像特性、可选的二层交换功能和协议模块、可选的三层路由转发功能和协议模块、可选的MPLS交换功能和协议模块,以及可选的增值业务模块,如IP流信息导出(IP Flow Information Export,IPFIX)和FW等。

2、相关术语

1. 虚拟交换域

虚拟交换域(VS Domain)是虚拟设备的一个属性,用来区分不同的虚拟设备,具有相同虚拟交换域的交换机才能组成虚拟设备。VS Domain ID的取值是1~255,默认值是100。

2. 成员编号

虚拟设备的每一种成员设备(物理交换机)都需要一个VSS成员编号(VSS Member ID)来识别。

在每一个VS Domain中每个成员设备的编号必须是唯一的,如果建立VS Domain时出现两个成员设备的编号相同,则不能形成VSS虚拟设备。成员设备编号的取值范围根据设备类型不同而有所不同。

VSS成员编号常用于VSS中的系统资源编号,如VSS在物理单机模式中端口编号采用二维格式(如ten gigabit Ethernet 1/1)。在VSS工作模式中端口编号采用3维格式(如ten gigabit Ethernet 1/1/1),第1维表示成员设备编号。

3. 虚拟交换链路

VSL是两台成员交换机之间的逻辑链路,由一条或者多条物理链路通过汇聚组成的逻辑链路。

4. VSL物理端口

VSL 物理端口指成员设备可以用于 VSL 逻辑连接的物理端口。对于高端交换机,VSL物理端口可以是交换机上的任意10 GbE接口(光口或者电口)。一个普通的物理端口需要分配到VSL之后才能成为VSL物理端口,一个VSL可以包含多个VSL物理端口。

5. 设备角色

在一个虚拟交换域中每台成员设备可能被赋予不同的VSS角色,各成员设备按照在VS Domain中承担的任务和作用不同通常分为如下两种角色。

  1. 主控设备(Master):负责管理整个VSS的管理和控制。
  2. 备份设备(Slave):负责本地设备基本硬件管理,并接受主控设备的管理和控制。

成员设备VSS角色的确定在VSS形成过程中通过选举产生,一个VSS中只能同时存在一台主控设备;其他成员设备都是备份设备,当主控设备故障时系统会自动选举一台备份设备成为新的主控设备。

6. 成员优先级

VSS成员优先级也是VSS成员设备的一个属性,主要用于角色选举过程中确定成员设备的角色。优先级越高(数值越大),当选为Master 的可能性越大。其取值范围为1~255,默认优先级是100。

7. 运行模式

支持VSS技术的交换机具有如下两种运行模式。

  1. 单机(Standalone)模式:设备作为一台普通的分布式设备单机运行,不能与其他设备形成VSS虚拟设备。
  2. VSS模式:可以和其他设备连接形成一个VSS,也可以单台设备运行。

默认情况下,所有设备都工作在单机运行模式,只有通过明确的用户配置交换机才从单机运行模式切换到 VSS模式。

8. VSS分裂

一个 VSS 形成后由于 VSL 故障导致 VSS 中两相邻成员设备物理上不联通,一个 VSS变成两个VSS。这个过程即VSS分裂(split),如下图所示。

9. VSS合并

两个VSS各自已经稳定运行,通过物理连接和必要的配置形成一个大的VSS,这个过程即VSS合并(merge),如下图所示。 

3、虚拟交换机系统

1. VSL物理连接

VSL连接是一条专用的汇聚链路,用于相邻成员设备之间的互联,如下图所示。

两台或者多台成员设备要形成一台虚拟设备首先需要将成员设备的 VSL 端口进行物理连接。一个VSL逻辑端口可以与一个VSL物理端口绑定,也可以与多个VSL物理端口绑定,以提高VSL链路的带宽及可靠性。

VSS的典型连接拓扑有如下两类。

1)链形连接拓扑

如下图所示:

此拓扑主要适用于成员设备物理位置分散的组网,但当链形连接中出现链路故障时会引起VSS分裂。

2)环形连接拓扑

如下图所示:

此拓扑相比链形连接拓扑更为可靠,因为环形连接中一条链路出现故障时会变成链形连接,VSS的业务不会受影响。

2. 配置基本参数 

VSS域中两台成员交换机的连接如下图所示:

1)设置交换机A

配置交换机A的域编号为20,成员编号为1,成员优先级为120。配置一条vsl-channel,编号为1,将端口3/0及3/1加入该vsl-channel。

将交换机A的成员优先级别配置较高,其目的在于让其选举成为主控设备: 

Switch-A(config)# switch virtual domain 20 
Switch-A(config)# switch virtual member 1
Switch-A(config-vss-member-1)# priority 120 
Switch-A(config-vss-member-1)# exit 
Switch-A(config)# vsl-channel 1
Switch-A(config-vsl-channel-1)# exit 
Switch-A(config)# port 3/0
(config-port-3/0)# vsl-channe l mode on
Switch-A(config)# port 3/1
(config-port-3/1)# vsl-channe l mode on

配置完成后在交换机A中查看的配置信息如下:

Switch-A # show switch virtual config
Mode DomainId MemberId Priority macMode MacAddr
STANDLONE 20  1        120      VIRTUAL 0001.7a6a.0039 

执行show switch vsl-channel命令查看VSL配置信息,在单机模式下VSL状态未通过链路管理协议的检查,因此状态为LINKDOWN:

Switch-A#show switch vsl-channel 
Switch Virtual Member:1
vslld  BalanceMode  ControlPort  LinkState OppositeMemberId
1      SRCMAC       0            LINKDOWN  0

执行 show switch vsl-channel 1 detail 命令查看VSL 成员配置信息:

Switch-A# show switch vsl-channel 1 detail 
vsl-channel id:1
vsl-channel balance-mode:SRCMAC 
vsl-channel control-port: 0 
vsl-channel link-state:LINKDOWN 
vsl-channel opposite-member:0
PortId RunState LogicLinkState Speed OppositePortId
3/0    PENDING  LINKDOWN       10000 0 
3/1    PENDING  LINKDOWN       1000  0 

2)配置交换机B

配置交换机B的域编号为20,成员编号为2,成员优先级为100。配置一条vsl-channel,编号为2,将端口3/0加入该vsl-channel:

Switch-B(config)# switch virtual domain 20 
Switch-B(config)# switch virtual member 2
Switch-B(config-vss-member-2)# priority 100 
Switch-B(config-vss-member-2)# exit 
Switch-B(config)# vsl-channel 2 
Switch-B(config-vsl-channel-1)# exit 
Switch-B(config)# port 3/0 
Switch-B(config-port-3/0)# vsl-channel 2 mode on
Switch-B(config)# port 3/1 
Switch-B(config-port-3/1)# vsl-channel 2 mode on

配置完成后在交换机B中查看的配置信息如下: 

Switch-B # show switch virtual config
Mode DomainId MemberId Priority macMode MacAddr
STANDLONE 20   1       120      VIRTUAL 0001.7a6a.0039         

执行show switch vsl-channel命令查看VSL配置信息,在单机模式下VSL状态未通过链路管理协议的检查,因此状态为LINKDOWN:

Switch-B# show switch vsl-channel 
Switch Virtual Member:2
vslld  BalanceMode ControlPort LinkState OppositeMemberId
2      SRCMAC      0           LINKDOWN 0

执行 show switch vsl-channel 2 detail 命令查看VSL成员配置信息:

Switch-B#show switch vsl-channel 2 detail 
vsl-channel:2
vsl-channel balance-mode:SRCMAC 
vsl-channel control-port:0 
vsl-channel link-state:LINKDOWN 
vsl-channel opposite-member: 0

3. 模式切换

将交换机从单机模式切换到VSS模式,在配置模式下执行以下命令:

Switch-A#switch mode virtual

提交信息如下:

This command will convert all interface names to naming convention "interface-type switch-number/slot/port",copy the startup configuration to the backup file named“startup-backup”and reload the system.Do you want to proceed?[yes/no]∶yes
Converting interface names Building configuration...[OK]
Copying the startup configuration to backup file named“starup-backup”…[OK]
Save running configuration…[OK]
Reset system!

这段提示信息的含义是如果执行该命令,会有如下4步操作。

  1. 将所有端口的名称由二维转换为3维,以inteface-type memberId/slot/port方式组织。
  2. 将当前运行的startup文件备份到startup-backup中。
  3. 保存当前配置。
  4. 重启设备。

同样操作将交换机A和B从单机模式切换到VSS模式。

4. VSS初始化

交换机A和B重启后工作模式已经从单机模式切换为VSS模式,系统在启动过程中将执行以下操作。

  1. 检测物理链路是否双向导通,建议在单机模式下首先连接VSL物理端口,并仔细检查物理链路是否正常工作。
  2. 收集VSS域内所有物理设备的拓扑信息,包括设备的域ID、成员编号、机箱类型、机箱工作模式及板卡的软件版本等信息,根据这些信息判定物理设备是否具有堆叠能力。
  3. 在拓扑信息收集完成后开始角色选举,拓扑内只能唯一地选举出一台设备作为VSS的主控设备,其余均为受控设备。

注意以下情况完全满足才表示设备具有堆叠能力: 

  • 交换机A和B的域ID相同。
  • 交换机A和B的成员ID不同且不超过其最大堆叠能力。
  • 交换机A和B的机箱工作模式必须相同。
  • 交换机A和B的板卡软件版本必须相同。

5. VSL管理

VSL的链路状态在VSS应用中起着极其重要的作用,它影响VSS的拓扑结构,甚至引起 VSS 分裂和合并,因此需要在任何相邻成员设备之间使用 VSL 链路管理协议(Link Management Protocol,LMP)来实时状态监测VSL。

链路管理协议运行在每条 VSL 的每一条物理成员链路上,VSL 两端的成员设备分别针对每条VSL的每一物理成员链路独立发送和接收协议报文。从而可以确定每条物理成员链路的状态变化,继而得出VSL逻辑链路的状态变化。

值得注意的是由于每一个VSL状态的变化都可能导致VSS拓扑变化,甚至引起VSS分裂和合并的频繁发生。为了防止这种情况的发生,LMP协议提供了灵活的报文发送时间间隔和接收时间间隔,以及相应事件报告控制,如:

Vslp lmp interval interval min_rx min-interval multiplier factor
  1. interval milliseconds:配置最小发送间隔,单位是毫秒。默认为500,参考范围为300毫秒~5 000毫秒。
  2. min_rx milliseconds:配置最小接收间隔,单位是毫秒。默认为500,参考范围为300毫秒~10 000毫秒。
  3. multiplier interval-multiplier:配置接收检测超时的倍数,默认为12,参考范围为3~50。

这个命令实际上提供了一个VSL链路down 延迟上报机制来解决这个问题,其工作原理是如果 VSL链路状态从up 变为down,端口不会立即向系统报告链路状态变化。

经过配置的延迟时间间隔后,如果VSL链路仍然处于down 状态,端口才向系统报告链路状态的变化,系统再做出相应的处理;如果 VSL链路状态从down 变为up,链路管理协议会立即向系统报告,从而避免因端口链路层状态在短时间内频繁改变导致VSS分裂/合并的频繁发生。

6. 拓扑发现

VSS 域可能存在不同的拓扑结构,拓扑发现通过拓扑发现协议(Topology Discovery Protocol,TDP)来实现,TDP通过每个成员设备和直接邻居成员设备交互拓扑发现协议报文来发现整个VSS的拓扑结构。TDP报文会携带拓扑信息,包括成员设备Domain、成员设备编号、成员设备优先级、成员设备的桥MAC等内容,以及最为重要的VSL连接关系。

VSS的每个成员设备都在本地记录自己已知的拓扑信息,并通过TDP报文周期性发送自己已知的拓扑信息。

拓扑发现的基本过程如下。

  1. 在拓扑发现之初每个成员设备在自己的拓扑信息库中只有自身的拓扑信息。
  2. 当VSL端口链路状态变为up后成员设备会将已知的拓扑信息周期性地发送出去。
  3. 每种成员设备收到邻居的拓扑信息后会根据邻居发来的拓扑信息更新本地记录的拓扑信息。
  4. 经过一段时间的收集所有成员设备都会收集到完整的拓扑信息,从邻居成员设备收到的拓扑信息和自己保存的拓扑信息完全相同,这种状态称为“拓扑收敛”。

7. 角色选举

一旦拓扑发现完成,则每个成员设备都拥有所在域的完整拓扑信息,系统将会进入角色选举阶段。基于这些信息每种成员设备基于角色选举规则选举主控设备,每个VSS系统有且只有一个主控设备。

角色选举规则如下:

  1. 当前主控设备优于其他成员设备。
  2. 当成员设备是高端分布式设备时本地主控MPU优于本地备用MPU,原主控设备的备用MPU优于其他成员设备的主控MPU。
  3. 成员优先级大的优先。
  4. 系统运行时间长的优先。
  5. 成员编号小的优先。

按规则次序判断,直到找到唯一的最优结果才停止选举。此最优结果即为VSS的主控设备,对应的MPU为主控MPU;其他设备则均为备份设备。

角色选举结束每种成员设备都知道自己在VSS中的角色和选举结果,一旦主控设备确认了自己的主控身份,则将对每个成员设备的各种板卡硬件和软件信息进行严格的硬件和软件兼容性检查。如果某一成员设备出现硬件兼容性问题,系统将不允许其加入VSS域,并提示用户出现硬件兼容性问题;如果出现软件版本不一致或不兼容,主控设备将提示用户系统将进入软件升级。

如果用户确认升级,则主控设备将升级成员设备的软件。这里需要注意的是对某一成员而言,一旦主控设备发现其设备出现硬件兼容性问题或软件版本问题,该成员设备将被主控系统从VSS中隔离出来。被隔离的成员设备将在解决硬件问题或软件升级后重新启动,并重新以新成员设备的方式加入VSS。

由于 VSS 系统支持多台设备的堆叠,因此 VSS 拓扑存在两种拓扑结构。即链形和环形连接,所以在硬件和软件兼容性检查通过后主控设备将根据收集的拓扑信息和硬件配置信息来确定VSS的工作拓扑。一旦确定,主控设备和成员设备之间一个完整的主从关系才真正形成,上层协议和应用才能正常工作。

在VSS形成后的正常工作中实时掌握主控设备和备份设备之间的主从关系很重要,为了确定这一关系是否正常并且系统能及时检测到可能的各种异常出现,需要在主控设备和成员设备之间定时发送保活报文。

4、VSS数据转发

在VSS中数据可以分为控制管理数据、协议报文数据和普通业务数据,一般情况下所有成员设备都会递交前两种数据给主控设备进行统一处理。并通过VSL链路传输,它们又是堆叠系统或者协议模块正常运行的基础。然而由于将多种设备虚拟成一种设备,因此所有的数据量都将会变得很大,但是VSL链路带宽总是有限的。为了有效地利用带宽资源,将3类数据进行了优先级的归类定义。

控制管理数据是VSS运行的基础,只有保证此类数据正常通信才能形成堆叠系统,因此该类数据拥有最高的优先级。协议报文数据,如OSPF和桥式协议数据单元(Bridge Protocol Data Units,BPDU)是各个协议模块运行的基础,因此赋予较高的优先级。以保证协议模块能够正常运行,相比之下普通业务数据优先级最低。

一般情况下由CPU参与处理控制管理数据或者协议报文数据。与普通的业务数据转发不同,对于业务数据而言,根据业务数据的流向可以分为3类,即卡内转发、设备内跨卡转发及跨设备转发。前两种均与单机设备的转发方式相同,其中卡内转发不需要依靠额外的转发单元支持。

设备内跨卡转发需要依托于存储转发单元(Store and Forward Unit,SFU),如下图所示。

VSS上行数据转发:

VSS下行数据转发: 

SFU和线路协议单元(Line Protocol Unit,LPU)板卡之间通过背板由特定的内部端口连接,内部端口之间封装特殊的非标准以太格式能够包含一些业务处理所需要的额外信息。其转发的原理为从LPU上收到数据后经过L2和L3等查找,判断最终目的为非本卡会以该目的进行跨卡转发表项的查询,最终找到本卡的出口。一般情况下,该出口即为SFU的入口;同样,在SFU上执行相同的查找即可找到目的LPU,然后将业务报文送达目的LPU。

跨设备的业务数据转发首先也在LPU卡上根据报文查找L2和L3,确定目的为远端设备,此时的处理情况要稍微复杂一些,需要多次查找跨卡转发表;此外会有VSL链路参与转发,从一台成员设备转发到另外一台成员设备。甚至可能是经过多台成员设备才能最终到达目的LPU,在LPU上收到一个报文后的处理顺序为LPU→SFU→VSL LPU(设备A)→VSL LPU(设备B)→SFU→LPU。

默认情况下 VSS 系统采用单台设备的流量均衡方式,但这种流量均衡方式对 VSL 链路带宽提出了一定的要求。理论上在最极端的情况下VSL链路带宽应该等于整个虚拟设备上行带宽的50%,但事实上这种业务流量的最佳转发路径是从本地downlink直接转发到uplink。

为此,VSS针对这种情况提供了本地优先转发的策略,如下图所示。 

用户可以根据网络组网结构选择不同流量负载均衡策略优化业务转发路径,而以较少穿越VSL的数据流量,从而减少对VSL链路带宽的要求。 

四、虚拟交换机典型类型

1、IP虚拟交换机

IP 虚拟交换机是面向多服务网络技术研究的一种途径,其目标是为以 IP 报文为载体在互联网上支持包括当前数据服务、传统电信服务,以及将来新的互联网服务在内的各种网络应用提供一种统一、公开及灵活的控制手段。

通过可编程机制将交换机动态分割为针对不同应用网络流进行转发控制和处理的虚拟实体,该虚拟实体称为“虚拟交换闭包”(Virtual Switchlet,VSw)。其控制服务称为“软交换机”(Software Switchlet,SSw),VSw和SSw共同组成虚拟交换服务(Virtual Switch Service,VSS)。

IP虚拟交换机的基本目标是隐藏交换机设备具体的实现技术细节,将其中的数据交换处理与转发软件控制(路由控制、信令控制或服务控制)分离,使其控制平面独立于底层交换平面;同时使得交换功能和控制平面公开可编程,以便通信软件厂商或服务提供商独立地开发和提供各种VSw及其交换服务,灵活而有效地使用和控制交换资源。

IP虚拟交换机的结构如下图所示:

这是一种将多种类型的 VSS映射到一台物理 IP 交换机上的可编程交换体系结构,可以提供与多类网络应用相适应的报文处理和转发机制。从而有效地利用网络资源,提高网络路由/交换节点的处理效能。

IP虚拟交换机的体系结构的一个关键设计原则是控制扩展与转发平面之间的分离,形成相对独立的3个层次,即物理交换平面、虚拟交换抽象平面和交换控制平面。控制平面提供SSw服务激活、运行及控制的可编程支持环境,SSw提供对某类网络数据流的专门转发控制处理操作集合。

其活动空间由相应的VSw内的资源和功能使用所限制,二者结合形成一种完整的VSS。虚拟交换平面抽象交换机的资源或功能,并动态地按需分割资源形成若干个VSw;物理交换平面通过低级控制接口提供可编程使用和控制的硬件和软件资源或功能。

该结构的另一个特征是支持多类报文流交换服务(SSw)共存于同一虚拟交换机环境中,并由控制平面根据网络数据流类型和流量的变化动态加载、切换和调整SSw及其相连的VSw。

IP虚拟交换机体系结构中5个主要部分如下:

  1. 底层IP交换机提供IP硬交换层面的资源:交换机/路由器是核心路由器的分布式结构,由多块线卡、交换/转发模块和交换背板组成。每块线卡具有多个端口并带有分类器,以及处理器(CPU)、排队缓冲区和调度器(算法)等。接口模块自带存储器、快速转发引擎和转发表等,它需要提供可编程接口(IP虚拟交换机资源接口)以实现对交换机资源或功能(算法类型及参数)的控制和利用。
  2. 资源或功能抽象:该部分对硬件资源或功能进行结构化抽象形成交换机的软件抽象模型,实现对交换机底层资源或功能的封装和可编程控制、使用和管理,包括资源或功能的描述、操作方式及运行策略并为上层软交换服务的创建与管理提供开发、统一及灵活的支持。
  3. IP虚拟交换机分割器和控制器:负责划分资源构成多个结构相对独立且交换功能或控制方式不同的 VSw,并动态协调各 VSw,这一部分是虚拟交换服务构成和受控的核心。VSw 是服务及其资源的分割限定器,它限定 SSw 的资源使用并具有一定的资源调整能力。由于IP网络资源具有的统计复用特性,因此应采用按比例复用共享资源的虚拟分割方法(如对报文和进程进行排队调度),以最终达到控制分割关键资源的目的。资源分割粒度决定了分割策略实现的复杂度,针对单个流的细粒度分割会增加操作和状态的复杂性。IP虚拟交换机可以采用基于VSw服务类的粗粒度分割机制,这样简单而有效。
  4. 虚拟交换闭包(VSw):VSw 是分割路由器的一部分资源构成的结构,相对独立且交换功能或控制方式不同的抽象逻辑交换机,多个VSw实现对底层交换机资源的分割复用共享。根据底层具体的交换机资源情况,可以形成比较常用的SSw对应的各类逻辑交换机,如IP 数据(实现常规尽力型业务转发)、IP Phone、IP Video、Diffserv 中的子类、各类常用的VPN类、针对Web流类型,以及实现安全转发保护通路等。
  5. 软交换机(SSw)及其运行和控制机制:该部分支持与应用网络流对应的SSw服务创建并部署于VSw基础之上,是相应网络流转发的软件控制对象。它控制流经VSw的数据流处理,有效地完成与应用报文流相适应的转发控制功能。SSw 关联 VSw 构成 VSS,其中可包括替换或增强的控制通路功能(如队列管理和调度算法)、特殊信令,以及简单的数据通路处理功能扩充,它实际控制实现用户所需要的交换功能。IP虚拟交换机结构支持常用的软交换机控制服务,如尽力型业务转发、Diffserv聚类SSw、IP Phone SSw、IP Video SSw,以及VPN支持类SSw等,并可根据需要和应用的发展添加新的SSw。VSS控制管理器负载下载、认证和校验,以及管理各类常用的 VSw 和 SSw,并可通过无线端口控制器或移动代理等方式加载部署和监控SSw运转。
  6. 软交换服务监控和管理器:IP虚拟交换机的控制和管理可分为两个部分,一是负责维护和管理现有的所有软交换机,以及从远端下载新的软交换机并对其进行安全验证和功能正确性校验,将应用需求的软交换机引入并安装到主虚拟交换机的监控和管理环境;二是负责监控运转中的各类软交换机的状况,使用库结构保存软交换机及其关联的 VSw 的资源分割映射结构,以控制其资源或功能的使用。本地缓存管理最常用的软交换机,并且监控和统计各类软交换机的网络流量负载,以通过 IP 软交换层面在一定的范围内调整软交换机(某些资源、功能及参数);同时还支持对各类应用网络流的监控和统计作为软交换机类型调整的依据。 

2、基于主从角色的虚拟交换机冗余结构

在现实中为了保障计算机局域网能够不间断地工作,通常会在核心层和分布层等关键位置配备两台交换机,以及采取多链路连接的方式实现冗余。并且除了在链路及物理硬件上冗余外,还对交换机进行复杂配置,通常采用二层的技术生成树协议STP、Ether Channel和三层的虚拟路由冗余协议(Virtual Router Redundance Protocol,VRRP)。但是实施这样复杂的策略会带来很大的负担,虚拟交换系统(Virtual Switch System,VSS)能够在达到VRRP和STP所追求的负载平衡及冗余功能的同时在很大程度上简化网络的设计与实施。

1. 虚拟交换系统基本原理

虚拟交换机技术把两台物理上连接在一起的交换机结合在一起,对外呈现一台逻辑上虚拟出的交换机,如下图所示。

在使用VSS技术后可以认为SW3和SW4交换机的双链路连接到同一交换机,之前不能采用的EtherChannel技术(因为链路连接到不同的交换机)可以使用,而EtherChannel可以很容易实现冗余和负载均衡功能;同时由于现在只有一台逻辑交换机,网络拓扑中也不存在交换环路,所以不需要STP和VRRP,从而大大简化了问题的复杂性。

2. 主从交换机

在VSS中的一台交换机(优先级高的)通过竞争成为主交换机(Active Switch,也称“活动交换机”);另一台交换机成为从交换机(Standby Switch,也称“备份交换机”),主从交换机之间通过 VSL 连接。为了保证对外呈现是单一的交换机,主交换机控制 VSS 负责运行所有的二层协议,如STP和虚拟局域网中继协议(VLAN Trunk Protocol,VTP)等,以及三层协议,如RIP和OSPF等各种路由协议;同时它还对外提供网络管理功能。然而对于计算机发送的用户数据,主从交换机都必须处理,因此实际上是 Active-Active模式;否则将会导致从交换机的闲置。

主从交换机之间的VSL在VSS中有非常重要的作用,由于主交换机控制VSS,因此共享的信息,如转发信息库(Forward Information Base,FIB)等通过VSL传输;此外用户数据也可能通过VSL传输。为了防止VSL故障,通常需要在两台交换机之间把多条链路捆绑形成EtherChannel。在VSL上传输的数据帧经过重新的封装多了32个字节的头部。

3. VSS的冗余过程

主从交换机之间通过VSL定期交互,交互的周期为500毫秒,当从交换机发现主交换机故障后将进行角色转换。VSS有两种冗余方式,即状态化和无状态。在状态化冗余方式中,虽然主交换机控制所有二层和三层协议的运行,但是主交换机会实时地把这些协议的状态通过VSL发送到从交换机。

当从交换机成为主交换机时可以从已知的二层和三层协议状态继续运行,这种冗余方式角色的切换时间非常短,通常在秒级;在无状态的冗余方式中主从交换机之间并不同步二层和三层协议的信息,从交换机启动后停顿在初始化状态。主交换机故障后从交换机从初始化状态中脱离出成为主交换机,它将从头开始运行二层和三层协议。

因此这种冗余方式需要较长的时间,通常在分钟级别。很容易得出有状态的冗余方式需要主从交换机在软件上一致;否则协议状态将无效,当主交换机修复后重新接入网络中。由于其优先级较高,所以会重新竞争成为主交换机,从交换机则回到备用状态。

4. 用户数据包的转发过程

在VSS中主从交换机都会处理用户的数据,如下图所示。

计算机2发往计算机1(两计算机在同一VLAN中)的数据到达SW2(从交换机),SW2会查询MAC地址表把数据从VSL发送到SW1,最终到达计算机1。

在下图中计算机2发出的数据到达SW2后,SW2将直接发往SW3,而不是通过VSL发往SW1。在没有采用VSS 时,SW2 如何发送数据将和二层的 STP 配置有关。

如果配置不当,将使得数据绕道而行。 

在下图中计算机1和计算机2不在同一VLAN中,在VSS上需要实现三层交换(通常所说的多层交换)。

由于SW1是主交换机,负责路由协议的运行,因此会把根据路由协议产生的FIB信息通过VSL和SW2同步。计算机1发送的数据由SW2直接处理,数据并不会在VSL上来回,因此可以大大减少VSL上的负载;同样,如果在没有采用VSS时配置三层的VRRP不当,将使得数据在VSL上来回传输。

在VSL上传输的用户数据主要有以下类型。

  1. VLAN上的泛洪数据。
  2. Standby 交换机收到,但是应该由主交换机的软件处理的数据(典型例子是 SW2不启用三层交换,而在SW1使用了单臂路由)。
  3. 由交换机收到目的地为另一交换机的数据。
  4. MAC 表中查不到的目的计算机所在接口上的数据。
  5. 管理流量,如SNMP、Telnet和网管HTTP流量等。

如下图所示,采用VSS后SW1和SW2的链路虽然在物理上连接到不同的交换机,但是逻辑上都连接到了VSS。

因此可以使用EtherChannel技术,即当其中一条或者多条链路故障时流量会自动分配到其余的链路。

  1. 单一链路失败:由于仍然存在到达主从交换机的链路,所以流量会自动分配到其余链路。
  2. 到达主交换机的全部链路故障:流量会自动分配到连接到从交换机的链路,如果数据目的地是主交换机,则数据通过VSL传输。
  3. 到达从交换机的全部链路故障:流量会自动分配到连接到主交换机的链路,如果数据目的地是从交换机,则通过VSL传输。

5. EtherChannel

1)二三层协议在主从交换机中的传递

STP协议由主交换机运行,从交换机收到的STP BPDU将会重定向到主交换机。虚拟局域网中继协议VTP由主交换机运行,从交换机收到的VTP数据包也重定向到主交换机。

路由协议在主交换机中运行,从交换机收到的路由更新信息重定向到主交换机。主从交换机采用分布式硬件转发方式更新路由表后引起FIB变化,新的FIB更新到本地的分布转发控制模块。

同时,通过VSL更新到从交换机的分布转发控制模块,两台交换机依据FIB表来进行三层交换路由。

2)VSS的整体工作步骤

  • 初始化VSL所在的模块和VSL所在的接口。
  • 两台交换机在VSL上协商主从角色,优先级高的成为主交换机。
  • 主交换机完成启动,检查软硬件是否满足状态冗余的要求。
  • 如果满足有状态冗余的要求,从交换机进入有状态变化的备用模式;否则停顿于初始化状态。
  • 主交换机把配置和应用级的数据等同步到从交换机。
  • 交换用户数据,期间主从交换机需要同步二层和三层的信息。

3)VSS的实施策略

VSS 部署在要求有冗余功能的分布层、核心层或者关键应用的接入层(如服务器),如下图所示。

和以往的STP和VRRP等相比,采用VSS具有以下明显的优势。

  1. 大大减少令人烦恼的STP和VRRP等的规划,网络的逻辑拓扑大大简化。
  2. 减少了故障后网络重新收敛的时间,有状态变化的VSS收敛时间在秒以内。
  3. 减少了在两交换机的物理链路上不必要的流量,使得网络带宽得到更有效的利用。
  4. 主从交换机都能转发用户数据,即 Active-Active 模式,使得核心网络处理数据的能力成倍提升。 

3、Xen虚拟交换机的典型架构

Xen 作为一款优秀的开源虚拟化产品越来越得到广泛应用,但是其中的虚拟网络比较简单。它只是借助Linux Bridge实现了多块虚拟网卡共享物理网卡,即只满足了单服务器虚拟化的最基本需求。

在很多大规模虚拟化应用场合还需要更丰富的功能,并且缺乏便捷的配置方法和界面管理,以及安全方面的保障。

通过Xen环境下的虚拟交换机的设计可以解决Xen使用的Linux Bridge功能不足和不便管理的问题,即支持Xen对虚拟交换机VLAN划分和安全管理等高级管理需求。一般用户不需要了解底层的命令和配置文件的格式,通过Web浏览器可以方便地管理虚拟交换机。

1. Xen的系统组件

Xen主要利用Linux Bridge分发虚拟机环境和外部网络之间的数据包,其管理系统的组成如下图所示,其中和虚拟网络相关的组件是 Xend、brctl 和 Linux bridge module。

下面分别介绍图中的各个组件,以了解Xen管理系统的构成。

  1. Xend:这是 Xen 对外提供管理和控制服务的最重要的组件,是处于应用层的一个python实现的应用程序,也是用户管理虚拟机所有操作的真正入口。它对外提供 XML远端处理呼叫(Remote Procedure Call,RPC)协议的API,端口是9363。Xen中受管理的资源,如虚拟机的配置信息、存储设备和网络设备等全部以XML格式的文件存储,由Xend在启动时负责加载。
  2. Linux bridge module:linux bridge的模块,在系统启动时加载到内核。
  3. brctl:linux bridge在应用层的命令行工具,所有和bridge相关的操作,如创建一个bridge和将虚拟机的虚拟网络接口连接到bridge上等都是通过该命令执行完成的,而且Xen对bridge的控制均在Xend中执行brctl命令实现。 
  4. xm:Xen 一个本机的命令执行工具,用户可以执行此命令将输入操作传递给 Xend执行。
  5. Libxenctrl:Xend的一个C库,Xend通过调用此库的库函数得以通过Domain0。
  6. privcmd:Domain0中的驱动程序,Libxenctrl与其通信实现向下访问。
  7. Xen Hypervisor:Xen 的最核心和最基本的软件抽象层,它位于硬件和上层操作系统之间,负责为硬件上运行不同虚拟机提供CPU调度和内存分区等核心功能。

2. 系统的总体架构

Xen虚拟交换系统以 Xen 的原有组件为基础扩展,下图所示为该系统的总体架构,从Web应用层一直到内核层。

说明如下:

1)Xen集群的架构

图中表示Xen集群的架构采用了Master-Slave的结构,该集群不同于常见的Master-Slave结构。它是完全自控,不依赖于任何外部的管理节点。每个节点都作为运行负载的功能节点,只是定义了不同的角色来额外为管理工作服务,并且角色可以互相变换。

一个集群中只有一台服务器是Master角色,其他服务器节点都是Slave角色。Master作为集群对外为一个访问点,同时对所有 Slave 进行管理和监控。外部发起的任何动作都由其接收并决定如何执行和是否同步到其他 Slave上。Master随时更新各个Slave中的数据状态和资源使用情况,二者之间的操作数据传递通过Xend完成。

Master和 Slave的角色可以转换,这有两种情况,一种是人为切换Master的角色。当管理员需要维护Master或硬件升级时必须首先选择一台Slave来代替Master的角色,而原Master则转为Slave角色。然后才能把原Master上的虚拟机负载转移到其他Slave后进行更新,完毕后再恢复作为集群中的Slave继续服务。另一种情况是Master出现故障时为保证集群正常服务,集群中的Slave根据一定的策略快速自动推举出一台Slave转为 Master角色代替,原Master故障恢复后自动转为Slave角色。

之所以选择这样的Master-Slave结构,而不是类似下图所示的VMware的集中管理式结构,因为在 Master-Slave 的自控式集群可以不依赖于任何外部管理节点就可以完全自主的运行并能自动应对节点故障。

在集中管理式结构中所有节点都是平等关系,所有来自用户的请求和多节点作为资源池的管理和控制全部由控制中心来完成,控制中心无可避免地会因为单点故障造成对全局的影响。 

另外,图中没有说明的是一台不属于任何集群的服务器在初始部署Xen环境时该系统定义了一个Single角色,代表它是独立存在的单点虚拟服务器。既可以将其设置为 Master 角色作为构建一个集群的开始,也可以将其深加到一个现有的集群作为Slave来扩大集群规模。

2)Bridge扩展为虚拟交换机

该系统主要在 Linux Bridge基础上扩展功能,实现虚拟环境所需要的虚拟交换机功能。对比Xen的系统组件和本系统的架构图可以看出vsctl代替了brctl作为虚拟交换机在应用层的命令行工具,virtual switch module则是原Linux bridge module扩展实现后的虚拟交换机模块。

虚拟交换机相关的配置数据不分配独立的存储,而是和Xen的配置数据一起存储在XML格式文件中由Xend负责加载。

3)Xend的功能扩展

Xend 是虚拟环境对外提供服务的核心应用层组件,要支持对虚拟交换机的管理,Xend的功能要进行扩展。对上层,要接收请求,并提供一些虚拟交换机信息的查询、创建、修改、删除和状态的监控等;对下层,要向虚拟交换机模块发送指令,并且做好虚拟交换机数据的存储。在系统启动时负责加载,并通知虚拟交换机初始化数据。Xend还负责控制集群中各节点上的虚拟交换机的状态。

4)Web层的支持

Web 层采用轻量级的Apache HTTP Server+物理层协议(PHysical-layer Protocol,PHP)通过XML-RPC向Xend发出请求,并将返回数据以网页形式返回到客户端浏览器。

五、虚拟交换机的生成树协议

1、虚拟交换机系统总体流程

虚拟交换机启动后根据配置进行系统的初始化,其中包括虚拟交换机的分割及初始化、物理端口的分配、虚拟端口的生成和初始化、设置虚拟端口的状态,以及网络拓扑的建立。然后系统在所建立的拓扑结构上运行生成树协议(STP)优化网络拓扑,消除环形链路的同时保证链路的冗余。

最后在优化后的拓扑结构上进行数据的转发,并维护MAC地址映射表,总体流程如下图所示。

2、STP和RSTP

1. STP简介

STP(802.1D)的目的是在保证提供冗余链路的前提下避免产生环路,要实现这个目的,网络中的交换机必须能够相互了解交换机之间的连接情况。为了让其他交换机知道自己的存在,每台交换机向网络中发送一种称为“桥式协议数据单元”(BPDU)的数据帧。

如果网络中的某台交换机能够从两条或者多条链路上收到同一台交换机的 BPDU,则说明它们之间存在冗余路径,会产生环路。此交换机使用生成树算法选择一条链路传递数据,并把某些相关的端口置于阻塞(blocking)状态,以将其他链路虚拟地断开。一旦当前正在使用的链路出现故障,则把某个阻塞的端口打开,以接替原来的链路工作。这样既提供了冗余链路,又避免了环路。

交换机的端口状态如下:

  1. 阻塞状态(Blocking):只侦听BPDU帧,不转发数据帧。
  2. 侦听状态(Listening):只侦听数据帧,不转发数据帧。
  3. 学习状态(Learning):学习地址信息,不转发数据帧。
  4. 转发状态(Forwarding):学习地址信息,并转发数据帧。
  5. 无效状态(Disabled):不进行转发,不侦听BPDU帧。

通常除了处于无效状态下端口的状态的转换顺序是阻塞状态→侦听状态→学习状态→转发状态→无效状态,端口也可以被配置成启动后立即进入转发状态。而不必按照阻塞、学习和转发的顺序进行,这种快速转换到转发状态的方式对于直接连接工作站的端口非常有用。转发状态和阻塞状态可以处于维持状态,最终会转换为转发状态或者阻塞状态。

STP在选举生成树时需要3个时间参数,即Hello Time、Max Age和Forward Delay。针对以上3个参数设置了3个定时器,分别为Hello Timer、Max Age Timer 和 Forward Delay Timer,如下表所示。

2. RSTP(Rapid Spanning Tree Protocol,快速生成树协议)

RSTP是IEEE 802.1D的一个发展,其协议标准是IEEE 802.1W,因此802.1D中的主要术语和参数在802.1W中都保留不变。

RSTP也可以在与运行802.1D协议的交换机在同一网段的端口上使用802.1D协议,但不足之处就是它将失去快速的特性。802.1W最终计算出的拓扑结构和 802.1D 计算的拓扑结构完全一致,但是它可以节约端口状态转变时所需要的时间,不再有转发延迟计时器。

802.1W 定义了 3 种端口状态对应与 3 种可能的运行状态,它把802.1D 定义的侦听状态(Listening)、阻塞状态(Blocking)和无效状态(Disabled)合并为丢弃状态(Discarding);另外两种状态是学习状态(Learning)和转发状态(Forwarding)。

下表所示为802.1D和802.1W端口状态的比较:

802.1D定义了 4种端口状态,即侦听、学习、转发和阻塞。从运行的观点来看,处于阻塞状态和侦听状态的端口没有区别。它们都不转发数据,也不学习地址,不同之处在于802.1D为其指派的角色不同。一旦一个端口处于转发状态,则无法区分它是根端口还是指定端口,RSTP把端口状态和端口角色区分开解决了这个问题。

RSTP计算生成树的最终拓扑,以及使用的选举原则和STP相同,RSTP的端口状态和端口角色使得拓扑收敛更快,比 STP 更能适应动态变化的网络拓扑结构。虚拟交换机构建的网络环境与实际的网络环境有所差别,一旦虚拟交换机之间完成网络拓扑的构建,则不再主动动态修改网络拓扑。而且初始设置为隔离状态的端口的状态不再变化,网络拓扑结构保持相对的稳定。 

3、虚拟交换机信息管理

要在所搭建的网络拓扑中运行生成树协议,虚拟交换机相互之间需要通信,因此需要用MAC 地址唯一标识虚拟交换机。

根据运行成树协议的需要,每一台虚拟交换机对应的信息包括虚拟交换机的MAC地址、优先级Priority、ID(Virtual Switch ID)和角色(Virtual Switch Role),如下图所示。

说明: 

  1. Virtual Switch MAC:虚拟交换机MAC地址(6个字节)是系统在初始化时分配给虚拟交换机的虚拟MAC地址,其中前3个字节为00-00-00;后3个字节从00-00-01起始,无重复依次分配。
  2. Virtual Switch Priority:虚拟交换机优先级(两个字节),此优先级可以自行设置。共有16个,可以为0或者4 096的倍数,默认为32 768。数值越小,优先级越高。
  3. Virtual Switch ID:虚拟交换机ID(8个字节),包括两个字节的虚拟交换机优先级和6个字节的虚拟交换机MAC地址。
  4. Virtual Switch Role:虚拟交换机角色(1个字节),角色有两种,分别用相应值表示。一种是根交换机(Root Virtual Switch),取值为0x00;另一种是指定交换机(Designated Virtual Switch),取值为 0x01。 

4、端口信息管理

1. 端口信息

在每台虚拟交换机的每一个端口都有唯一的端口号作为标识。为了实现虚拟交换机之间逻辑上的隔离,以及互联虚拟交换机之间运行生成树协议的需要,每个端口对应的信息如下图所示。

  1. Root Virtual Switch ID:根交换机ID(8个字节),通过配置BPDU选举产生的根交换机的ID包括根交换机两个字节的虚拟交换机优先级和6个字节的虚拟交换机MAC地址。
  2. Root Path Cost:根路径开销(4个字节),本端口到根交换机所需的最短路径开销。
  3. Virtual Switch ID:虚拟交换机ID(8个字节),本端口所在虚拟交换机的ID。
  4. Port ID:端口 ID(两个字节),本端口的ID,包括1个字节的端口优先级和1个字节的端口号。
  5. Port Priority:端口优先级(1个字节),端口优先级可以自行设置。共有16个,可以为0或者16的整数倍。最大值为240,默认为128。数值越小,优先级越高。
  6. Port Number:端口号(1个字节),从0开始无重复依次设定。
  7. Port Status:端口状态(1个字节),端口状态有6种,分别用相应值表示。一是阻塞状态(Blocking),取值为0x00;二是侦听状态(Listening),取值为0x01;三是学习状态(LearnLearning),取值为 0x02;四是转发状态(Forwarding),取值为 0x03;五是禁用状态(Disabled),取值为0x04;六是隔离状态(Isolated),取值为0x05。
  8. Port Role:端口角色(1个字节),有3种,分别用相应值表示。一是指定端口(Designated Port),取值为0x00;二是根端口(Root Port),取值为0x01;三是既不是根端口,也不是指定端口(Neither Port),取值为0x02。

2. 端口状态变迁

虚拟交换机启动之后根据配置信息,虚拟端口的端口状态将处于隔离状态或者阻塞状态。端口状态默认为阻塞状态,可以将其设置为隔离状态。处于阻塞状态的端口进入侦听和学习这两种状态,最终稳定之后处于转发状态或者阻塞状态。

端口状态变迁如下图所示:

端口状态变迁条件如下:

  1. 阻塞端口长时间没有收到BPDU且Max Age Timer超时,默认为20秒。
  2. 端口未被选为根端口或指定端口且Forward Delay Timer超时,默认为15秒。
  3. 端口被选为根端口或指定端口且Forward Delay Timer超时。
  4. Forward Delay Timer 超时。
  5. 收到根交换机发出表示发生拓扑变化(Topology Change,TC)的 BPDU。

定义端口处于不同状态所具有的功能如下:

  1. 禁用状态(Disabled):定义为物理链路没有连通时的端口状态,处于这种状态下的端口不能接收或者发送数据帧,也不能接收或者发送BPDU。
  2. 阻塞状态(Blocking):处于这种状态下的端口不能接收或者发送数据帧,也不能把MAC地址添加到自己的MAC地址映射表中。而允许端口接收BPDU,不允许发送BPDU,逻辑断开。
  3. 侦听状态(Listening):处于这种状态下的端口要参与生成树的选举,不能接收或者发送数据帧,也不能把 MAC 地址添加到自己的 MAC 地址映射表中。但是能接收和发送BPDU,参与选举根端口和指定端口。
  4. 学习状态(Learning):处于这种状态下的端口不能接收或者发送数据帧,但能接收和发送BPDU开始学习MAC地址。
  5. 转发状态(Forwarding):处于这种状态下的端口是一个具有全部功能的端口,不但能接收和发送BPDU,而且能转发数据帧和学习数据帧中的MAC地址。
  6. 隔离状态(Isolated):处于这种状态下的端口不能接收或者发送数据帧,不能把MAC地址添加到自己的MAC地址映射表中。也不允许端口接收和发送BPDU,逻辑断开。

此状态用于虚拟交换机之间实现逻辑上的隔离,在系统初始化时可以自定义设定,处于该状态的端口不参与生成树的选举。 

5、STP协议的BPDU帧

STP协议采用的帧是BPDU,该帧分为如下两种类型。

  1. 配置BPDU:参与生成树的组建及生成树拓扑的维护。
  2. 拓扑变化通知(Topology Change Notification,TCN)BPDU:当生成树拓扑结构发生变变化时用于通知交换机生成树拓扑结构发生变化。

1. 配置BPDU

配置BPDU参与生成树的组建,其中包含参与生成树选举所需的所有的配置信息,其帧格式如下图所示。

  1. 目的MAC地址(Destination MAC Address,DMA):配置消息的目的MAC地址,这是一个固定的组播地址(01-80-C2-00-00-00)。
  2. 源MAC地址(Source MAC Address,SMA):发送配置消息的虚拟交换机的MAC地址。
  3. 帧长度/帧类型(Length/Type,L/T):用于标识配置BPDU帧的长度。
  4. LLC Header:配置BPDU固定的链路头,固定值为0x42-42-03。
  5. Payload:BPDU帧数据,其中包含参与选举生成树所需的所有信息参数,其含义如下图所示。 

  • Protocol ID:协议的ID号,两个字节。STP协议的取值为0,用于标识配置BPDU与普通数据帧的区别。
  • Version ID:协议的版本号,1个字节。协议的版本有3种,分别为STP,取值为0x00;RSTP,取值为0x01;MSTP,取值为0x10。此协议为STP,所以Version ID的取值为0x00。
  • BPDU Type:BPDU帧的类型,1个字节。BPDU帧的类型有两种,分别为配置BPDU,取值为0x00;配置TCN BPDU,取值为0x80。此BPDU为配置BPDU,所以BPDU Type的取值为 0x00。
  • Flags:标志字节,1 个字节。包括拓扑变化确认标志和拓扑变化标志。其中标志字节中的高位为TC协定(TC Agreement,TCA)位,用于确认收到TCN,取值为0x80;低位为TC位,用于根交换机在收到TCN后通知其他虚拟交换机重新参与生成树的选举,取值为0x01。
  • Root Virtual Switch ID:根虚拟交换机ID,8个字节,通过配置BPDU选举产生的根交换机的ID,其中包括根交换机两个字节的虚拟交换机优先级和6个字节的虚拟交换机MAC地址。
  • Root Path Cost:根路径开销,4个字节,发送此配置BPDU的虚拟交换机到根交换机的最短路径开销。
  • Virtual Switch ID:虚拟交换机ID,8个字节,发送此配置BPDU的虚拟交换机的ID。
  • Port ID:端口 ID,两个字节。发送此配置BPDU的虚拟交换机的端口ID,包括1个字节的端口优先级和1个字节的端口号。
  • Message Age:配置消息生存时间,两个字节,配置消息从生成到当前时间的存活时间。
  • Max Age:BPDU配置消息存活的最大时间,两个字节。取值范围为6秒~40秒,默认为20秒。
  • Hello Time:根交换机定期发送配置BPDU消息的周期时间,两个字节。取值范围为1秒~10秒,默认时间为2秒。
  • Forward Delay:配置 BPDU 转发延迟定时器的值,两个字节。取值范围为 4 秒~30秒,默认时间为15秒。 

2. TCN BPDU

在生成树拓扑结构中全部虚拟交换机都在侦听拓扑结构是否发送改变,当生成树拓扑结构发生变化时侦听到拓扑结构变化的虚拟交换机向根交换机发送TCN BPDU,用于通知根交换机生成树拓扑结构发生变化。

TCN BPDU帧包含4个字节,其格式如下图所示。

  1. Protocol ID:协议的ID号,两个字节,STP协议的取值为0。
  2. Version ID:协议的版本号,1个字节。协议的版本有3种,分别为STP,取值为0x00;RSTP,取值为0x01;MSTP,取值为0x10。此协议为STP,所以Version ID的取值为0x00。
  3. BPDU Type:BPDU帧的类型,1个字节。BPDU帧的类型有两种,分别为配置BPDU,取值为0x00;配置TCN BPDU,取值为0x80。此 BPDU 为 TCN BPDU,所以BPDU Type的取值为0x80。 

6、STP选举生成树的过程

1. 配置消息优先级的比较流程

配置消息优先级的比较流程,如下图所示。

  1. 根交换机ID相对较小的配置消息的优先级较高。
  2. 假如根交换机ID相同,则比较根路径开销的大小。比较的原则为将配置消息中的根路径开销与本端口的对应路径开销相加得到一个值,则值较小所对应的配置消息的优先级较高。
  3. 假如根路径开销相同,则比较虚拟交换机ID的大小,相对较小的配置消息的优先级较高。
  4. 假如虚拟交换机ID相同,则比较端口ID的大小,相对比较小的配置消息的优先级较高。 

2. 最优配置消息的选择

每台虚拟交换机的各个端口都向外发送本地的配置消息,期间也接收其他虚拟交换机发送的配置消息,最优配置消息的选择如下。

1)各个端口接收到配置消息后执行如下操作。

  • 当端口接收到的配置消息的优先级比本端口的配置消息的优先级低时,虚拟交换机则会丢弃接收到的配置消息,不处理此端口的配置消息。
  • 当端口接收到的配置消息的优先级比本端口的配置消息的优先级髙时,虚拟交换机则将此端口的配置消息的内容替换为接收到的配置消息的内容。

2)虚拟交换机比较本机上的所有端口的配置消息,从中选出最优配置消息。

3. 根桥的选择

系统初始化时虚拟交换机信息生成Virtual Switch MAC、Virtual Switch Priority、Virtual Switch ID 和Virtual Switch Role 这 4 个参数,其中 Virtual Switch Role值为0,即为根交换机;虚拟交换机端口信息生成Root Virtual Switch ID、Root Path Cost、Virtual Switch ID、Port ID、Port Priority、Port Number、Port Status和Port Role 这 8 个参数,其中 Root Virtual Switch ID 为 Virtual Switch ID,即本虚拟交换机为根交换机;Root Path Cost取值为0;Port Status取值为0x00,即阻塞状态;Port Role取值为0x00,即指定端口。

虚拟交换机都将本机作为根交换机,当端口状态由阻塞状态转变为侦听状态时虚拟交换机以Hello Time为周期向相邻的虚拟交换机发送配置消息并比较配置消息的优先级,将最高优先级的配置消息所对应的虚拟交换机选举为根交换机。

4. 根端口和指定端口的选择

1)指定交换机的虚拟交换机将各个端口所接收到的配置消息进行比较,将最高优先级配置消息的端口定为根端口。

2)虚拟交换机根据根端口中的配置消息及根端口所对应的路径开销,为各个端口计算出相应的指定端口配置消息。

  • 将Root Virtual Switch ID 替换为根端口配置消息中的 Root Virtual Switch ID。
  • 将Root Path Cost替换为根端口配置消息中的Root Path Cost加上根端口所对应的路径开销。
  • 将Virtual Switch ID 替换为此虚拟交换机的 Virtual Switch ID。
  • 将Port ID替换为此端口的Port ID。

3)虚拟交换机将需要确定端口角色的端口的配置消息与计算得到的配置消息相比较,根据比较结果的不同执行相应的操作。

  • 假如计算得到的配置消息优先级比较高,则虚拟交换机将该端口定为指定端口。该端口的配置信息替换为计算得到的配置消息,然后定期向相邻的虚拟交换机发送更新后的配置信息。
  • 假如端口中的配置消息优先级比较高,则虚拟交换机不再更新此端口的配置消息。并且将该端口的端口状态定为阻塞状态,只接收,但是不发送配置消息。

确定根交换机、根端口和指定端口后意味着生成树的拓扑结构搭建成功。

5. 生成树拓扑结构的改变

生成树协议运行之后每个端口的角色和状态都已经稳定,分别处于转发状态或者阻塞状态,树形网络拓扑结构确立。期间根交换机仍然会根据Hello Time的时间间隔组播配置消息,以维护网络拓扑结构。

指定交换机只有在根端口接收到上一层发送过来的配置消息时才会触发向所有的指定端口发送配置消息,并且会将配置消息中的Message Age递增。启用定时器为这条配置消息计时,如下图所示。

STP虚拟交换机判断拓扑结构是否发生变化遵循以下两个原则。

  1. 处于转发状态的端口转变为Disabled状态。
  2. 处于Disabled状态的端口转变为转发状态。

可以简单地认为端口的故障和启用都会导致虚拟交换机认为生成树的拓扑结构发生改变,并且向根交换机发送TCN BPDU。由于虚拟交换机构建的网络环境与实际的网络环境有所差别,所以一旦虚拟交换机之间完成网络拓扑的构建,则不再主动地动态修改网络拓扑,网络拓扑结构保持相对的稳定。不考虑第2种情况,即处于Disabled状态的端口转变为转发状态而使得生成树拓扑结构发生改变,端口处于 Disabled 状态可以定义为物理链路没有联通。

当虚拟交换机检测到生成树的拓扑结构发生变化时首先判断自己是否是根交换机,假如不是,则从根端口向上一级虚拟交换机发送TCN BPDU。上一级虚拟交换机的指定端口接收到 TCN BPDU 之后会发送一个用于确认的配置 BPDU。

其中 Flag 字段中的 TCA 如下图所示:

同时从根端口继续向上一级虚拟交换机发送TCN BPDU,直到消息传达到根交换机,如下图所示。 

检测到生成树拓扑结构发生了变化的虚拟交换机以 Hello Time 为周期不断地发送 TCN BPDU,直到接收到TCA。

当根交换机收到TCN BPDU后向全网络广播TC BPDU,其中Flag字段中的TC为1。所有的虚拟交换机都会转发TC BPDU,直到全网络都知道拓扑结构发生了变化。根交换机使得TC BPDU传遍整个网络一般需要Max Age+Forwarding Time的时间,如下图所示。 

当虚拟交换机收到TC BPDU后,重新初始化虚拟交换机信息中的Virtual Switch MAC、Virtual Switch Priority、Virtual Switch ID和Virtual Switch Role 共4 个参数,以及端口信息中的Root Virtual Switch ID、Root Path Cost、Virtual Switch ID、Port ID、Port Priority、Port Number、Port Status和Port Role共8个参数。

同时,将虚拟交换机的MAC地址映射表清空。当全网络的虚拟交换机都知道拓扑结构发生变化后重新配置,最后选举产生一棵新的生成树。 

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/128791068
今日推荐