本节书摘来自异步社区《思科数据中心I/O整合》一书中的第2章,第2.12节,作者【美】Silvano Gai , Claudio DeSanti,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.12 二层多路径技术(L2MP)
思科数据中心I/O整合
在所有参与传输的交换机中,用二层多路径技术替代STP其他协议,从而可以增加2层网络的带宽。双向带宽得到提高的原因有两个:
不再有拥塞端口,所有链路都处于思发状态;
网络中两点之间的流量可以通过多条路径进行传播。
多路径技术常用于IP网络,如果接入层链路和骨干链路之间的速度受限或者没有差别,那么这种技术将变得特别重要。正如第1章中所介绍的那样,这正是数据中心网络的场景,其中所有链路都是10GE。
多路径技术的另一个优点是降低延迟时间,因为数据帧总是通过最短路径进行转发,而一般情况下,网络跳数越少,延迟时间就会越低。此外,还可以选择负载较低的路径来转发对延迟时间要求高的帧。
多路径解决方案必须与现有协议实现无缝的互操作,特别是与STP协议。
简而言之,所有二层多路径解决方案都要求参与部署的网络交换机变为可寻址的实体。而一般的以太网交换机并没有这个要求,因为交换机是透明的,不需要显式寻址(除非是出于管理用途)。通过将所有交换机变成可寻址设备,所有L2MP解决方案都可以利用链路状态协议计算网络拓扑(例如,交换机的互连方式),然后再通过这个拓扑计算出交换机的转发数据库。
这类似于在光纤通道网络中已经实现的技术,其中FC交换机是可寻址的,运行FSPF就可以计算出网络拓扑。在FC中,交换机地址嵌入在FC_ID中,即光纤通道地址。
但是,以太网的情况则有所不同。交换机的地址需要承载在以太网帧中,同时终端的地址也需要被承载。为此,L2MP的云中需要添加另一个帧头信息。
思科有一个L2MP解决方案L2MP/MIM(L2MP/MAC-In-MAC),而IETF则启动了一个项目TRILL(多链路透明互连),它定义了另一种L2MP解决方案。这两种解决方案非常相似,因此,我们将它们放在一起进行介绍。
本章后面的内容将使用到下面的术语。
术语“DBridge”(数据中心网桥):指支持L2MP/MIM的网桥。
术语“RBridge”(路由网桥):指支持L2MP/TRILL的网桥。
术语“D/RBridge”:指DBridge或RBridge。
为了更好地理解它的工作原理,可以参考图2-23中的例子,其中主机A会向主机B发送数据帧。
位于L2MP云边缘的交换称为入口/出口交换机。入口交换机(D/R1):
从源以太网工作站接收数据帧(主机A);
维护一个MAC地址表(确切的说是过滤数据库),并保存通过反向学习或IS-IS广告获得的终端地址;
查找MAC地址表,确定出口交换机(D/R2);
添加额外的帧头信息,包括出口交换机的地址(源地址为D/R1,目标地址为D/R2)。
使用最短路径,只查询出口交换机地址,将封装的数据帧从L2MP核心网络转发到出口交换机上。在L2MP云中,源以太网终端(主机A)和目标以太网终端(主机B)的地址会被忽略,因为它们位于被封装的原始数据帧中。
出口交换机(D/R2):
删除额外的帧头信息;
在MAC地址表中查询目标以太网MAC(主机B),确定发送帧的端口;
将帧转发到目标以太网终端中(主机B)。
在右边的以太网云中,一个或多个生成树协议实例会终结于D/R2,而且不会传播到L2MP云中。左边的以太网云也存在相同的情况。
L2MP的基本机制
在这一节中,我们将介绍构成L2MP解决方案所必需的基本机制。
1.计算路由与反向学习
典型IEEE网桥不会通过显式计算路由的方式来确定帧的转发目标。默认情况下,它们会转发到所有位置,但是会使用一个反向学习的过程,这个过程通过学习数据帧的源MAC地址而建立一个过滤数据库,该过滤数据库可用于限制一个有特定目标的单播帧的传输。D/RBridge设计的运行方式与更像是路由器:通过运行一个协议来计算转发路径,然后在路径之间建立转发数据库。
2.最优路径计算
第一个解决的问题是选择路由计算的协议(例如,能够确定单播和组播最优转发路径的协议)和等价多路径技术(ECMP)(如果有的话)。所有链路状态协议(如OSPF、FSPF和IS-IS)都会对网络进行图形化建模,并且用Dijkstra算法确定最短路径,以此来解决这个问题。D/RBridge采用的解决方案是基于IS-IS协议的二层协议扩展。
3.中间系统到中间系统(IS-IS)
之所以选择IS-IS,是因为它已经被广泛应用于IP网络,而且能够直接运行在以太网上(例如,可以毫无障碍地运行IP),这些都满足了二层网络要求的特点。这个协议由国际标准化组织(ISO)的开放系统互联(OSI)协议套件所定义,并被IETF的RFC 1142所采纳。通过定义新的类型长度值(Type-Length-Value,TLV)属性,就可以轻松扩展IS-IS。DBridges和RBridges都通过定义相同的TLV来扩展IS-IS。D/RBridge使用与IP协议不同的IS-IS实例。这样就能够更好地实现控制平面分离。事实上,三层网络IS-IS会基于三层网络实体(例如,IP路由器)的系统ID进行路由计算,而二层网络IS-IS则基于二层网络实体(例如,D/RBridge)。
4.等价多路径技术(ECMP)
D/RBridge只支持通过等价路径来实现流量负载均衡(其中,所谓“价”指标是指IS-IS使用的metric)。虽然理论上可以在不等价路径上实现负载均衡,但是这两种解决方案(DBridges和RBridges)都未考虑这种情况,因为它对于数据中心常用拓扑具有边缘优势,但是它会增加复杂性。
5.避免环路(TTL)
STP的优点之一是能够在网络重新配置时避免出现环路。这一点对于二层网络尤为重要,因为数据帧中不包含生存时间(Time To Live,TTL)。IS-IS协议的目标则不同,因为IP帧(IPv4和IPv6)的IP头都包含TTL。D/RBridge采用的方法是在二层协议帧头中添加TTL字段,然后在转发数据帧之前进行衰减。在DBridges中,这个字段被称为TTL;而在RBridges,它被称为跳数(Hop Count)。
TTL可能还会有更广泛的使用方式,可用于防止出现无限循环的帧传递。例如,一个故意或错误配置的(恶意的)D/RBridge,就可以造成这种问题。在这些情况下,TTL可以帮助您解决这个问题。
此外,在入口处检查,确定发出帧的源D/RBridge,也是有效避免出现环路的重要步骤。
6.分层转发
D/RBridge会计算D/RBridge之间的最短路径和ECMP,但不会计算终端之间的路径。以太网帧会通过一个入口D/RBridge进入L2MP云,然后再发送到一个出口D/RBridge。这些D/RBridge只需要知道连接其他D/RBridge的最优路径,而不需要知道通向终端的路径。只有网络边缘(入口和出口)才会启用典型的以太网学习,它会将终端的MAC地址与终端所连接D/RBridge的地址相关联。通过这种关联,就可以实现分层转发(例如,在L2MP域中转发帧时,只使用D/RBridge地址,而不使用终端的MAC地址)。分层转发允许核心层D/RBridge,不连接任何终端以维护较小的MAC地址转发表,因此是一个更具可扩展性的解决方案。
7.封装
所有二层多路径解决方案都会使用某种形式的封装。根据不同的解决方案,基本以太网帧都会添加一两个额外的帧头信息。封装具有以下优点:
它能够提供存储额外信息的空间(例如,TTL);
它会将MAC地址隐藏在封装的以太网帧中,允许D/RBridge减小MAC地址转发表的长度,因为它们不需要学习终端的所有MAC地址;
它在RBridge之间转发流量时可以使用单独的其他VLAN标签,与数据帧的初始VLAN无关。
8.连接类型
DBridge和RBridge都可以连接传统的以太网交换机,但是RBridge可以通过传统以太网交换机建立邻接(例如,交换TRILL封装的流量),而DBridge则要求采用直接的点对点连接。图2-24说明了这两种不同的模型。
在数据中心内,这两种模型的区别并不明显,因为骨干网需要使用L2MP解除带宽瓶颈。在骨干网中,所有D/RBridge都通过点对点的链路连接;而在边缘网络中,两种模型都支持传统以太网交换机。
9.额外的帧头
两种模型的区别会对额外的帧头产生影响(参见图2-25)。
DBridge只使用一个额外入口/出口帧头,其中包含入口和出口DBridge的地址信息、TTL和少数其他字段。
RBridge具有类似的入口/出口帧头和一个下一跳帧头(Next Hop Header),可用于穿越两个RBridge之间的传统以太网云。例如,在图2-24中,RBridge RB1可以通过P1(传统以太网云)到达RBridge RB2、RB3和RB4。RB1会在下一跳帧头的目标MAC地址域中填写相应的MAC地址,以选择发送帧的RBridge。DBridge不存在这个问题,因为每一个L2MP端口只与其他DBridge直接相连。
10.寻址
DBridge会在入口/出口帧头中填写入口和出口DBridge的地址,而且它们不需要下一跳地址,因为它总是与下一个DBridge直接相连。RBridge也有相同的特点,但是它们还会在下一跳帧头中填写下一跳RBridge的地址。如果下一跳RBridge不与当前的RBridge直接相连,也没有使用共享连接的话,那么必须使用这种方法来避免出现帧复制的问题。
11.帧类型
D/RBridge能够处理两种类型的帧:已知单播帧和多目标帧。已知单播帧是指目标以太网终端的目标位置已确定的单播帧,因此它们只需要传输到一个特定的出口D/RBridge即可。这涵盖了大部分的单播流量。多目标帧可能是未知单播帧(例如,目标以太网终端的目标位置未知的单播帧)或者组播/广播帧。它们之所以被称为多目标帧,是因为它们需要传输到多个出口D/RBridge,而且可能是所有的出口D/RBridge。
12.已知单播帧的转发
D/RBridge使用IS-IS计算入口D/RBridge与出口D/RBridge之间的最短路径。如果有两条以上路径具有同等的开销,那么就启用等价多路径技术(ECMP),流量就会通过哈希算法分散到这些路径之中,这个算法会在同一路径中按顺序发送指定流的所有帧,从而避免帧在接收端进行重新排序。
图2-26中显示了一个帧从主机A传输到主机B,该帧会到达SW1,然后在MAC转发表中查找主机B的MAC地址。查找结果包括MAC地址和相应的出口D/RBridge,在这里是SW4。然后,初始帧被封装增加额外的入口/出口帧头,其中额外的入口/出口帧头包括了入口(SW1)和出口(SW4)D/RBridge的地址。当帧通过L2MP云时,每一个D/RBridge都会检查出口RBridge的地址,以确定帧是否属于自己。如果是,它会删除这些额外的帧头,然后转发初始的以太网帧;否则,它会查找出口D/RBridge的地址,然后将帧转发到下一个D/RBridge。在这个例子中,帧可能会通过路径#1或路径#2,因为存在有ECMP等价多路径。
13.多目标帧的转发
D/RBridge使用IS-IS计算一个或多个分发树,通过它们转发多目标帧。DBridge和RBridge树的个数和选择标准会有所不同,但是基本方法是相同的。在如图2-27所示的例子中,计算将得到以SW3为根的树。
当D/RBridge接收到一个多目标以太网帧时,它会关联该帧到一个分发树,并封装入口/出口帧头,其中包括入口D/RBridge的地址和分发树,在这一点上,DBridge和RBridge稍有不同。出口D/RBridge显然并不重要,因为这个帧可能会发送到所有的D/RBridge。
在如图2-27所示的例子中,帧会到达SW1。SW1会封装帧,然后将它发送到唯一可用分发树的SW2和SW3,SW3再将它转发到SW4。
为了避免因拓扑变化引起暂时组播环路,D/RBridge会执行全面检查,以保证多目标帧能够到达预定的链路。简而言之,通过使用IS-IS,D/RBridge可以计算出可能通过指定链路发送数据帧的入口D/RBridge集。如果遇到源不属于这个D/RBridge集的帧,它会拒绝接收;如果拓扑发生变化,D/RBridge会重新设计这个D/RBridge集。
14.按序传输
主要有三个原因可能破坏L2MP网络的按序传输。
ECMP:如果存在多个等价路径,一定要在同一个路径中转发某一数据流的所有帧,才能保证按序传输。数据流之间可以实现负载均衡,但是如果想要实现按序传输,就不能在一个数据流内进行负载均衡。所有D/RBridge都拥有可编程的哈希算法,它们可以选择负载均衡粒度,因此能够在需要时保证按序传输。
从未知单播帧到已知单播帧:未知单播帧是通过分发树传输的多目标帧。当单播目标被学习到(例如,它成为“已知”),那么这些帧就成为已知单播帧,然后它们就开始通过最短路径进行传输。在这个转变过程中,有一些帧可能会被重新排序。这实际上影响并不大,因为当它发送了第一个控制流量(例如,IPv4的ARP帧或FCoE的FIP帧)之后,在开始发送实际数据流量之前,单播目标一般就已经被学习到。
拓扑变化:在拓扑发生变化时,STP不会对帧进行重新排序,但是它会丢弃帧,而且STP通常收敛速度较慢。D/RBridge假定拓扑很少发生变化,由此造成对少量帧进行重新排序还是可以接受的,并且提供了快速拓扑收敛的机制。
L2MP/MIM和L2MP/TRILL都不会对帧进行重新排序,这项工作是由终端完成的。
15.STP兼容性
在网络社区中,如何在ECMP环境中实现STP兼容性的问题备受关注。D/RBridge支持连接使用STP的常规以太网云,在这里可以使用两种模型:终结模型或参与模型。
在终结模型中,D/RBridge丢弃了BPDU(Bridge PDU),而且它也不能在L2MP内部传送。它可能会降低如所涉及的复杂环路检测的效率,例如,以太网集线器,但是这是一种更具前瞻性的方法,因为它支持一开始就在骨干网上消除STP。
参与模型要求D/RBridge参与STP,以及将STP信息传输到L2MP,同时伴随着各种涉及到的终结STP的复杂问题。
DBridge和RBridge都会终止STP,不会将BPDU传输到L2MP。这样就可以实现与现有以太网交换机的互操作(例如,网桥)。
16.终端地址学习
IEEE 802.1网桥通过观察数据帧的源MAC地址,从中学习到MAC地址,而D/RBridge也使用相同的方法。此外,它们还会通过IS-IS学习地址。当存在终端与D/RBridge进行认证的环境,第二种学习地址的方式更为合适。实际上,通过验证来确定D/RBridge的可靠性,MAC地址真实合法而非地址欺骗,因此,它可以通过IS-IS宣告,对比通过观察流量所学习到的地址,该地址有更高的优先级。
17.VLAN
DBridge使用典型的VLAN模型,而且它会在帧中携带一个VID(VLAN ID)。RBridge可能会使用两个VID:内部VID(类似于DBridge所使用VID)和外部VID(位于下一跳帧头中,用于封装帧穿越传统以太网云)。
DBridge通过单点方式或者类似于vPC的技术连接传统以太网云,以太网云仍然保持在L2MP网络的边缘。
RBridge支持在任意位置上部署以太网云,因此处理传统以太网会变得更为复杂。特别地,对于每一个以太网云上的每一个VLAN,TRILL都会选择一个特定的RBridge,作为VLAN转发器。而这个VLAN转发器是唯一能够向该VLAN发送和从中接收传统以太网流量的RBridge。
VLAN转发器的选择过程非常复杂的,因为它一方面需要检查可能出现的VLAN配置不一致性,另一方面减少控制信息使用的数量。
18.VLAN裁剪
所有转发信息都会的计算与VLAN无关。此外,分发树也一样。为了避免将某个特定VLAN的帧发送到不带该VLAN端口的D/RBridge上, D/RBridge必须实现VLAN裁剪。
19.组播侦听(IGMP Snooping)
组播侦听是一种应用广泛的技术,几乎所有以太网交换机都会使用这种技术来处理组播流量。类似地,D/RBridge在L2MP云边缘部署了组播侦听功能,处理IGMP帧,可以确定组播流量的接收者。通过使用专用的控制协议,可以将组成员信息在L2MP云核心中公告。所有D/RBridge会基于这些信息计算发送接口。
20.配置
过去,IEEE网桥的最大优点之一即所谓的即插即用(例如,它们拥有一个默认配置,不需要进行任何的管理操作,就能够自动生成一个网络)。多年来,由于安全问题越来越多,客户开始偏向于禁用交换机的自动配置。手动配置交换机ID及其他参数,这已经称为网络管理员越来越偏好的操作方式。D/RBridge既支持全自动配置又支持手动配置方法。
思科DBridge
这一节将介绍思科DBridge的补充信息。
1.帧格式
图2-28描述了DBridge所使用的帧格式,其中入口/出口帧头是DBridge所使用的唯一额外帧头。
入口/出口头信息的域包括以下内容。
ODA:出口DBridge的MAC地址,48 bits MAC address of the egress DBridge;
OSA:入口DBridge的MAC地址,48 bits MAC address of the ingress DBridge;
Ethertype = DTAG:16比特Ethertype,用于表示帧已经被DBridge封装;
FTAG:10比特转发标签,用于支持多个拓扑;
TTL:6比特,存活时间。
在这些域之后是初始的以太网帧的其他域,但是只有FCS除外,FCS会涵盖入口/出口帧头后重新计算。
2.分层MAC地址
外部目标地址(ODA)和外部源地址(OSA)都是DBridge使用的MAC地址。它们的层次结构如图2-29所示。
DBridge分层MAC地址格式包含以下域。
U/L:1比特,全局或者本地。这个域由IEEE 802定义,设置为1表示本地MAC地址管理。
I/G:1比特,个体/分组。这个域由IEEE 802定义,设置为0表示一个DBridge的地址,设置为1表示一组DBridge的地址。
交换机ID:12比特。它是L2MP云中DBridge交换机的唯一身份标识。DBridge使用一种协议,将交换机ID动态分配给每个DBridge。每个DBridge都拥有一个或多个交换机ID。
子交换机ID:8比特,用于确定模拟交换机中的交换机地址的唯一标识符。
本地ID(LID):16比特。它是一个边界端口标识符,可以确定主机所链接的端口。通过将其设置为与端口ID相同的值,确定转发目标DBridge就非常简单了。这个域是它所属交换机的本地有效的。DBridge不需要进行任何的MAC转发表查询,就可以使用ODA中的LID,将帧发送到相应的边界端口,或者选择忽略这个域,然后进行额外的查询,来确定出方向的端口。
终端节点ID:8比特。它只适用于支持设置分层MAC地址的终端,可以通过使用的协议定义。在服务器虚拟化环境中,一个边界端口之后可能存在许多终端。
ODA中的乱序(OOO):1比特。它可用于设置将帧分散到多个路径上进行传输,这些路径与负载均衡一般使用的哈希算法并没有关联。通常,属于同一个流的帧会通过同一个路径发送,以避免重新排序。但是,如果设置了这个位,那么情况就会不一样了。
OSA不学习(DL):1比特。如果帧设置了这个位,就可以禁用分层MAC地址和一般MAC地址之间的关联学习。
Res:1比特。保留位。
3.FTAG与多拓扑支持
转发TAG(FTAG)是各个帧都包含的一个拓扑标签。它由入口DBridge来进行设置,并且授予给L2MP云中所有后续的DBridge。这是一个重要的域,可以避免在不同的DBridge上由于帧分类的不一致而发生环路。
FTAG支持多个转发拓扑。在现有的以太网网桥中,每一个VLAN或一组VLAN都拥有各自的生成树实例,从而拥有一个专门支持单播流量的转发拓扑。
DBridge也可能有一个类似的机制,其中一个或一组VLAN都拥有由FTAG标识的IS-IS实例,但是这可能不是最佳的方法,因为L2MP自身已实现了多路径,与VLAN无关。
另外,FTAG对于实现不同形式的流量工程(为不同类型用户设置不同的FTAG)也非常重要,这也是DBridge相对于RBridge的一个增值特性。
例如,对于组播流量而言,可以创建不同的组播分发树,并使用FTAG来确定用于传输帧的树。
将来,使用FTAG还可以基于其他标准来确定转发拓扑,如协议类型、入端口或L2/L3/L4信息组合。
4.模拟交换机
起初,L2MP部署在数据中心网络核心位置,其中最重要的问题是双向带宽的问题。在网络边缘,会继续部署传统的以太网交换机和主机,而且它们必须以高可用方式连接到L2MP骨干网。它们的首选方式是通过以太网通道进行连接,与VSS和vPC的情况完全相同。
为了支持以太网通道,两台或者两台以上的DBridge可以构成模拟交换机。模拟交换机与vPC类似,但是它是通过L2MP协议扩展来实现的。
图2-30显示了两对DBridge,构成了两台模拟交换机。右边一个连接一个传统以太网交换机,左边一个连接两台传统以太网交换机和一台主机。
从寻址角度看,每一个模拟交换机都拥有各自的交换机ID,因此,在图2-30中,6台DBridge设置了6个交换机ID,而两台模拟交换机也设置了两个交换机ID。
在模拟交换机中,每一台传统交换机或主机都使用不同的子交换机ID进行标识和寻址,因此模拟交换机#1拥有3个子交换机ID(两台传统访问交换机和一台主机),而模拟交换机#2则只拥有一个子交换机ID。
模拟交换机的控制平面协议分布在属于该模拟交换机的所有DBridge之中,而非仅仅位于主交换机中(Matser)。数据流量会通过ECMP方式(从其他DBridge接收时)或者以太网通道方式(从传统交换机和主机接收流量时)分散到两台DBridge上。
IETF DBridge和TRILL项目
IETF有一个叫做TRILL(Transparent Interconnection of Lots of Links)的项目,它的目标是在兼容IEEE 802.1的多跳任意拓扑以太网网络中,使用IS-IS协议实现二层网络的多路径和最短路径帧转发。
帧格式
RBridge使用如图2-31所示的TRILL帧格式。
与图2-28所示的DBridge帧格式相比,RBridge帧格式增加了下一跳帧头。
NHDA(Next Hop Destination Address,下一跳目标地址)是路径上下一个RBridge的MAC地址,而NHSA(Next Hop Source Address,下一跳源地址)是发送帧的RBridge的MAC地址。
典型的VLAN可用于穿越传统以太网云(Ethertype=CTAG,这是IEEE 802.1在IEEE 802.1Q VLAN中的新术语)。
在TRILL帧头中,RBridge不是通过MAC地址进行寻址,而是通过别名(Nickname,16比特二进制字符串)的方式进行寻址。别名不支持分层(这一点与DBridge不同),而且既可以手动配置,也可以通过IS-IS进行自动配置。
TRILL帧头中还包含了下面所列的其他一些域。
V(版本):2个比特,无符号整数,TRILL协议版本,当前版本为0。
R(保留):2个比特。
M(多目标):如果帧是已知单播帧,则设置为0;如果是多目标帧,则设置为1。
OpL(选项长度):5位无符号整数。它表示是否存在可选的选项头,并且以4字节数目来规定其长度。
Hop_Count:6位无符号整数。转发帧的每一个RBridge都会依次递减这个值。如果Hop_Count到达0,这个帧就会被丢弃。
对于DBridge中的FTAG域在TRILL中消失了。TRILL只支持组播多拓扑,而不支持单播多拓扑。TRILL的单播多拓扑是通过使用TRILL帧头中的M比特和出口别名来实现的。如果设置了M位,则表示它是一个多目标帧,因此不必使用出口别名。在这里,TRILL会通过保存分发树的根的别名,从而在出口别名中保存分发树的标识。