云数据中心网络与SDN:1.7.1 TRILL
1.7 消除STP——Underlay L2MP
前一节插叙了虚拟机的接入技术,本节将回到之前的话题上,开始对大二层技术展开介绍。跨设备链路聚合技术中,能够聚合的设备数量较为有限,限制了网络的规模。而且,跨设备链路聚合在本质上只是欺骗了STP,并没有在根本上消除STP所带来的问题,因此需要按照一定的结构进行连接,在组网的灵活性上也比较受限。实现大二层的思路,自然就是直接摆脱掉STP,根除它所带来的链路利用率低下的痼疾,实现二层的多路径传输。
二层的多路径传输,说学术界叫做L2MP,业界更多地称其为L2 Fabric技术。标准的L2 Fabric技术主要以TRILL和SPB为代表,厂商私有的Fabric技术主要有Cisco的FabricPath、Juniper的QFabric以及Brocade的VCS。
1.7.1 TRILL
TRILL(Transparent Interconnection of Lots of Links,RFC 6325)是一种把三层的链路状态路由技术应用于二层流量传输的协议。TRILL为二层网络添加了基于IS-IS路由协议的控制平面,这种基于路由的寻址方式使得二层网络的转发变得更加智能,同时也使得二层网络摆脱了STP的束缚,获得了高效性和可扩展性。
图1-13是TRILL的标准封装格式。TRILL的封装在本质上是一种路由封装,它的寻址发生在网络层,因此不妨将TRILL比对着IP路由来看。TRILL设备被称作RB(Routing Bridge),可类比IP路由器。外层以太网的DA/SA为Egress/Ingress RB的MAC地址,在转发过程中逐跳重写。TRILL Header可类比为IP Header,其中Ingress/Egress Nickname唯一标识了Egress/Ingress RB的网络层地址,类比于源/目的IP地址,是TRILL进行寻址的依据,M位用于BUM流量的转发,Hop Count类似于TTL,用于环路避免。
TRILL控制平面的工作可概括如下:首先在RB间建立邻居,生成RB拓扑,然后生成RB Nickname路由表,这些都是通过对IS-IS进行扩展来完成的。可通过ESADI协议维护虚拟机MAC地址和其所在RB的Nickname间的映射关系。
图1-13 TRILL的标准封装格式
数据平面转发流程可概括如下:收到虚拟机的原始帧后,Ingress RB为Original Frame封装TRILL header,根据原始帧的目的MAC地址标记Egress Nickname,并根据Egress Nickname路由给下一跳的Transit RB,Transit RB继续逐跳路由到Egress RB,最后Egress RB剥掉外层以太网和TRILL Header,根据原始帧的目的MAC地址进行转发。TRILL域中,单播流量匹配的是RB Nickname路由表,组播流量匹配的是组播分发树MDT。图1-14给出了TRILL域中,终端A向终端C发送单播的完整通信流程,和IP的路由过程基本上是一致的,只不过网络层用的是RB Nickname。
TRILL是独立于IP的网络层协议,是一套庞大的协议集。除了上述的转发过程外,还规范了RB间点对点的PPP封装、Nickname的动态配置协议DNCP(类似于DHCP)、Nickname的解析机制(类似于ARP)、RB发现机制TRILL Hello、Nickname的单播路由协议TRILL IS-IS、多路径负载均衡机制、MAC地址分发协议ESADI、组播分发树计算、路径MTU探测机制等。TRILL还考虑了RB间通过以太网交换机互联可能产生的种种问题,支持TRILL RB与以太网交换机的混合组网。
TRILL的技术细节是没有办法通过一节内容都说清楚的,下面列出RFC 6325中的一些技术点,供读者参考。
RB的MAC地址学习分为本地VM学习和远端VM学习。本地学习机制同传统二层自学习,维护(VLAN,MAC,Local Port)的转发表。远端VM学习维护(VLAN,MAC,Remote RB Nickname)的转发表,可以通过很多方式进行学习,必选的方式包括两种:①同传统二层自学习,解封装后学习内层源MAC地址和外层源Nickname的映射关系;②通过ESADI(End-Station Address Distribution Information)协议进行学习。
图1-14 TRILL对单播的转发
ESADI协议封装在TRILL的标准数据帧(TRILL Data)中,包含了RB Nickname和该RB本地的MAC地址信息。它使用All-ESADI-RBridges Multicast Address作为内层的MAC地址,在所有参与ESADI学习的RB中进行组播,能够透传以太网设备。ESADI支持对VM迁移的感知。
RB的Nickname与MAC地址的解析通过TRILL Hello实现。
RB之间可以通过点对点进行互联,也可以通过以太网进行点对多点的互联。通过以太网互联的RB间需要选举出一个DRB,负责确定以太网中TRILL Hello、TRILL IS-IS、TRILL Data和普通以太网帧所使用的VLAN,并确定一个Appointed VLAN-X Forwarder。Appointed VLAN-X Forwarder负责避免以太网上的环路,监听STP BPDU、IGMP等以太网信令,生成、转发ESADI消息等功能。
TRILL Data帧在以太网上传输时,外层帧中的VLAN ID应该与内层原始帧的VLAN ID保持一致。TRILL的控制信令在以太网上分配的VLAN应该使用较高的优先级。
基于哈希,支持16条路径的ECMP。
整个TRILL域只计算一棵以某个RB为根的分发树,其余RB间的通信都依赖于这棵树。可以通过IGMP、MLD或者MRD进行per VLAN MDT Optimization。
不支持头端复制的伪广播。
有两种防环机制:一种是Hop Decrement;另一种是RPF,用于避免分发树中的环路。
规定了两种新的IS-IS消息用于路径MTU发现——MTU-probe和MTU-ack。
标准的TRILL使用VLAN作为租户的标签,在租户数量上受到了很大的限制。因此,TRILL工作组在RFC 7172中提出了对TRILL中VLAN标签的扩展技术FGL(Fine-Grained Labelling),其封装格式如图1-15所示,Inner Label High Part和Inner Label Low Part中的后12位,合起来提供了1600万的租户数量。
由于TRILL在封装中使用了新字段,就避免不了要设计新的芯片来提供支持,而且TRILL增加了路由的报头,因此路径上每一跳RB都需要使用TRILL专用的设备,而且TRILL的OAM机制不是很成熟,这也是TRILL最大的问题。TRILL在2010~2014年间被讨论得比较多,一些大型客户(比如石油和银行)在私有的数据中心做了落地。不过TRILL的市场窗口比较短,VxLAN发展起来之后(见1.12节),TRILL的热度就迅速降下来了,目前厂商方面基本上就只剩下华为还在支撑TRILL的演进。
- 点赞
- 收藏
- 关注作者
评论(0)