拨云见日:FabricPath—从“交换”到“路由”
IT行业的发展一日千里,竞争的重点已经从参数、指标的追赶,发展到对标准、概念的主导,市场的领导厂商不再拘泥于设备的具体性能,而是通过掌握最有力的话语权来引导整个行业的发展,最终赢得客户的信任。
在这个争夺话语权的过程中,不计其数的技术名词被制造出来,成百上千的白皮书被PO到网上,如果我们连这些名词的真正含义都不清楚,别说赶英超美,可能被人家忽悠完了都浑然不知,因为至少在目前,信息技术的领军人物还在大洋彼岸,而且这个趋势还将持续很长一段时间。
这也是我写《拨云见日》的本意,就是要拨开表面的浮云,真正探究新技术的本质。在有限的篇幅里,我会以我的理解,尽力说明市场名词背后的技术实现,并摸清新技术产生的商业动机和相应的发展脉络。
今天我们来看看FabricPath是个啥。
关键词:FabricPath
厂商:Cisco
领域:数据中心网络
模糊程度:四星
一、为什么需要FabricPath
缘起
众所周知,Cisco正凭借Nexus产品平定整个数据中心网络市场,2010年,Cisco打出了深藏已久的最后一张王牌—FabricPath,至此,Nexus交换机的主要特性已全部面向公众发布,FabricPath为整个计划添上了最后一块基石,进一步稳固了Nexus作为下一代数据中心网络平台的地位。
大部分人(包括我)第一次阅读FabricPath华丽的白皮书后,只朦胧地知道这是一个“能在大型二层数据中心网络实现多路径的东东”,既然FabricPath解决的是数据中心的问题,我们首先需要弄清楚数据中心到底有什么问题。
今天的大部分数据中心网络是遵循标准的层次化理念建设的,分为接入层和汇聚/核心层,接入层和汇聚层之间为二层链路,三层网关设在汇聚或核心,所有的二层链路上都运行生成树协议(STP),当任意两点间有一条以上路径可达时,STP会block多余的路径,以保证两点间只有一条路径可达,从而防止环路的产生。这种模式在过去很长一段时间被大规模采用,因为其部署起来非常简单,接入层设备不需要复杂的配置,大部分的网络策略只要在汇聚层集中部署就能分发到全网。但随着数据中心的规模不断扩张,这种模型逐渐显得力不从心。
未来数据中心内部的横向流量将越来越大,新加入的设备同原有设备之间仍然要运行STP,如果两台服务器之间只有一条链路可行,其余的万兆交换机端口全被block,不但是投资的极大浪费,也无法支持业务的快速扩展;其次,当交叉链路数量增加时,二层网络的设计会变得非常复杂,哪条链路该保留哪条链路该阻断?三层网关设在何处?类似这样的问题会冒出一大堆,这就失去二层网络配置简单的优势;最后,传统的二层MAC地址没有层次化的概念,同一个二层网络内的接入交换机上存储本网段所有设备的MAC地址,这很容易导致边缘设备的MAC地址空间耗尽,特别是在虚拟化的数据中心内,虚拟机的MAC地址数量可能以千计。
如果二层互联不能解决问题,另一种思路是在汇聚交换机和接入交换机上设置IP网关,通过三层路由将所有交换机连接起来,类似的解决方案还包括将网关设置在核心设备上,通过核心设备集中互联。这个做法以前也许勉强可行,但在虚拟化环境中,二层网络是虚拟机迁移的基础。虚拟化的最大特点是可以将业务动态部署到数据中心的任何计算资源上,如果这些计算资源(也就是服务器)被过多的三层网关隔离开来,也就失去了虚拟化的优势。
同时,采用三层接入设备会产生大量的三层网关以及无数个让网管人员抓狂的地址段。动态路由协议的行为往往难以预测,在重要数据中心,为了保证网络行为的可控性,每台交换机的路由策略都要经过仔细琢磨,这个工作量过于庞大;而如果采用静态路由,一旦后期需要改动某个地址段的范围,可能需要改写一大段接入换机的路由表,更不用提相关访问控制策略的变动。
至此,我们走进了死胡同,虚拟化的应用要求基础网络在扩展时保持一个完整的二层环境,而随之而来的STP和地址空间问题又成为绕不开的坎,在接受二层环境的同时,我们基本上也就同一大堆时髦的字眼say byebye了,这些字眼包括但不仅限于“动态扩展”、“多路径”、“快速收敛”、“层次化寻址”等等,仰望IP路由,二层网络就好象一个生活在原始社会的苦行僧,忍受着种种的考验,传统网络在支持虚拟化数据中心扩张时已经越来越吃力。
为了改变这种尴尬的局面,在烧掉大把银子之后,Cisco的FabricPath终于闪亮登场了!
目标
简单说,FabricPath是Cisco Nexus交换机上的一项技术特性,其目标是在保证二层环境的前提下,修复前文所说的缺陷,这个技术需要做到以下几点:
- 实现两点间多条路径同时转发流量EMCP(Equal Cost Multi Pathing);
- 类似IP网络的平滑扩展;
- 快速收敛;
- 防止广播风暴;
- 保持原有二层网络配置的简洁性
更准确地说,我们要摆脱传统二层“交换”的弊端,在二层环境中实现类似三层IP的“路由”行为。
二、FabricPath:从“交换”到“路由”
L2不给里的原因
我们知道FabricPath的目标是为传统二层环境设计一个增强型方案,以屏蔽原来的缺陷,实现对数据帧的“路由”转发。要明白FabricPath是怎么做到这点的,首先要看看layer 2这些不给力的毛病到底是怎么出来的?
传统二层以太网环境中的数据转发是非常简单的,一台二层交换机一辈子干的活可以用以下几句话概括:
1)收到数据帧–>2)查看目的地址–>3)查看MAC地址表–>4)将数据帧从对应端口送出去
偶尔,当这个流程进行到第三步时,交换机会发现目的地址不在自己的MAC地址表中,它会怎么做呢?这台茫然的交换机就会将这个数据帧从所有的端口广播出去!没错,是整个帧从所有端口发送出去,希望其他交换机能知道正确目的地。且不说,这个方式在今天看来是多没有效率,当设备之间存在环路时,这种帧会被无尽地转发下去,最终形成广播风暴。
为了解决这个问题,交换机厂商引入了STP。STP的机制也极其简单,就是通过阻断二层端口来防止环路,并阻止数据帧从其接收到的端口再转发出去。
广播帧在任意节点只会被转发一次,避免了被永远转发下去。但如前所述,运行STP的代价是非常昂贵的,接入设备只有一条上联链路没被block,而且,在复杂的网络连接中,控制STP的行为变得很困难,一旦出现震荡,其收敛效率也非常低下。
另一方面,二层交换机通过学习接收到的数据帧的源地址建立MAC地址表,所有接收到的数据帧源地址都会被放进MAC地址表中,导致一台交换机可能学习到整个网段内的所有二层地址,就算它大部分时间只跟其中的一小部分有联系。
由此可见,今天的二层网络过于简单,交换机只会学习网络地址,不会基于学到的地址规划出一套转发数据的最优方案,它的问题类似于只有一个数据平面,没有控制平面的概念,这就导致二层交换机不可能有效地进行“路由”,从而引入了STP等一系列问题。
FabricPath的实现:新的控制平面
既然二层网络的问题是控制平面的缺失,FabricPath的思路就清晰了,那就是重塑一个控制平面。
为了能够高效地支持数据中心扩展,这个新的控制平面需要具备几个基本功能,包括
- 主动建立邻居关系,并基于链路状态维护一个路由数据库
- 支持等价路由
- 支持灵活的寻址方式
- 保留原有二层网络配置简单的风格
为了构建这样一个控制平面,FabricPath主要做了以下两件事:
1)新增一个二层帧头
2)增加一套简化的IS-IS路由协议
这个新的帧头添加在原有数据帧之外,包含了丰富的信息,其中最重要的三个字段是源地址、目的地址和TTL。
源地址和目的地址来自FabricPath新定义的一个名为switch ID的全新地址空间,任何一个新加入FabricPath网络的设备都会被分配一个1~4094之间的整数,作为唯一的switch ID,用于标识一台交换机的身份,也是节点之间进行路由寻址的依据。
TTL(Time To Live)字段定义了一个数据帧的最长生存周期。当生成一个数据帧时,其TTL字段被写入一个整数,每当其经过一台交换设备TTL就减一,直到TTL为零时,这个帧将被丢弃。TTL的概念是TCP/IP的基础之一,在FabricPath中,TTL承担了同样的任务,保证数据帧不会在成环的链路中被无限次转发,从而使得二层环境不再需要运行STP协议,不再有链路被Block,这是实现两点之间多路径转发的基础。
相较帧结构的变化,FabricPath更重要的改进在于引入IS-IS这样一套完整的路由协议。IS-IS是一个广泛运行于运营商等大型网络的路由协议,同OSPF类似,IS-IS也是一个链路状态协议,会维护一个链路状态数据库,相比MAC寻址这样的距离矢量行为,运行链路状态协议的设备能够在内存中建立一张包含全网设备的拓扑,并且在这个拓扑的基础上挑选当前链路状态下的最短路径来转发数据。IS-IS的效率很高,且IS-IS区域能平滑地平移、分割、合并,但相较OSPF最大的不同在于,IS-IS可以封装在链路层报文中支持多种网络层协议,而OSPF只能封装在IP包中支持IP协议,这就使得IS-IS能够很容易被移植到FabricPath中,为二层数据帧的转发提供路由服务。
FabricPath中实际运行的是一个简化版本的IS-IS协议,不再依赖MAC地址进行寻址,依靠交换机的switch ID工作,在节点之间交换IS-IS信令构建路由表,IS-IS协议会事先计算出最优路径作为数据转发的依据。有了IS-IS的助阵,FabricPath能够轻松地实现两点之间的ECMP、网络拓扑的快速收敛、以及快速的错误诊断等高级路由功能。
新的地址空间加上IS-IS协议,FabricPath基本建立起一个控制平面雏形,数据平面和控制平面各司其职。
如果你是个较真的同学,你的第一个问题该出现了,为什么不延用原有的MAC地址,而要兴师动众地加入一套新地址呢?
问得好!
FabricPath中的IS-IS协议会建立一套逻辑树结构,这个结构说明了任意两点间的最优路径,是交换机转发数据的依据。路由协议在计算逻辑树的过程中往往会用到设备的标识号,由于MAC地址在设备出厂时就固定了,不同设备之间的地址没有任何规律,如果使用MAC地址作为唯一标识,生成的将是一个随机结构,这有可能导致最终的转发路径不是当前的最优路径。由于路由协议的算法是写死的,要避免这种情况只能人工调整各个节点的标识大小,这种情况同部署STP时调整交换机的优先级,以保证最优的转发路径是一个道理。然而,FabricPath设计的初衷就是保留二层配置简洁的优势,如果将STP的老毛病一并带过来,无疑大大削弱了对客户的吸引力,不利于现有网络向FabricPath的迁移。
既然是从头设计一套全新的机制,不如追求一把极致,将所有复杂的工作都隐藏到幕后,只呈现给用户最简洁的一面,这就是FabricPath费尽苦心设计一套地址空间的出发点。
FabricPath的工作模式
上图中,数据帧在进入FabricPath网络时,会被打上新帧头,在FabricPath网络内根据帧头里的switch ID进行转发,离开Fabric Path网络时,脱去帧头,进入传统的以太网交换环境。要加入FabricPath网络,只需在交换机对应端口上启用FabricPath模式即可,所有的地址分配和路由策略都自动生成,无需繁琐的配置。
上图是一个典型的FabricPath组网,汇聚设备同接入设备之间为FabricPath网络,FabricPath网络内没有运行STP,多条链路都能够转发数据,目前版本的FabricPath支持16条等价路由,也就是说在使用万兆链路的情况下,任意两点间的带宽可到2.56Tbps(16条等价链路结合,每条等价链路为16个万兆portchannel)。
接入设备作为网关连接了传统以太网络同FabricPath网络,FabricPath网关上可以进行“基于会话的MAC地址学习”,只有那些目的地址为本地设备的数据帧的源地址会被放入网关的MAC地址表,其他数据帧的源地址以及广播帧的源地址都不会被学习,这就保证了边缘网关设备的MAC地址表里只保存与本地有会话关系的MAC地址,这个举措能够大大缩小虚拟化数据中心内接入设备的MAC地址表体积。
基于IS-IS的特性,FabricPath网络设备的switch ID可以动态修改,而不影响流量转发,当数据中心规模不断扩张时,可以利用FabricPath平滑地扩展其汇聚层,并在接入设备间实现高达16条二层多路径(ECMP)。
第二个问题
OK,这一切都看上去很美,但你有没有觉得哪里不对劲?这就是我对FabricPath的第二个问题,以上说的所有这些东西,新增帧头啦、新的选路机制啦,和VPN不是差不多吗?在今天这个技术过剩的时代,难道找不出一个能解决这些问题的现有技术,非要重新折腾出一套新玩意吗?
现有VPN技术种类繁多,但大多数都使用IP包承载,协议开销较大,这与二层具备的快速转发特性是背道而驰的,仅此一项就将IPSec等三层VPN技术屏蔽在可选项之外。剩下的二层VPN中最常见的是类似MPLS+VPLS的实现方式,MPLS是一个2.5层技术,专门用于大量数据的快速转发,但问题是,MPLS的控制平面仍然需要IP报文进行路由,每个节点仍需要进行IP配置,而部署一个MPLS+VPLS网络你觉得容易吗?反正我看着都觉得头大,如果一种局域网技术需要网管人员先学习一遍MPLS,我觉得这种技术基本也没啥戏可演了。
标准化
FabricPath是Cisco近期在数据中心领域最重要的一个发布,同时也预示着基础网络向下一代模型转型的开始。数据中心内不断增长的横向流量推动了二层多路径技术的迅速发展,FabricPath是这股潮流的重要组成部分,但Cisco不是唯一的声音。
目前致力于实现二层多路径的标准化组织主要有IETF和IEEE,两家的标准分别为TRILL和802.1aq,都采用IS-IS作为路由协议,实现方式大同小异。目前,TRILL和802.1aq都已接近完成,预计2011年底就能够正式标准化。
Cisco在TRILL的制定过程中参与极深,虽然FabricPath是Cisco的私有解决方案,但可以看作一个“增强版的TRILL”,是TRILL的基本功能加上“基于会话的MAC地址学习”、“Vpc+”和“多重拓扑”等高级功能的合集。
Cisco已经发布了支持FabricPath的Nexus 7000板卡,并且承诺现有架构与TRILL标准兼容,当TRILL正式标准化之后,只需要升级现有设备的软件,就能够与标准的TRILL交换机互联互通。
三、结语
随着数据中心内虚拟化应用的不断扩张,底层的数据行为也在悄然发生改变,带动了基础架构的演进。未来的数据中心不仅需要大容量、高密度的网络设备,还要能够顺应这种数据行为的变化,并反过来提供经过优化的网络平台,这种从量到质的变化将深刻影响数据中心技术的发展。
FabricPath是Cisco在这个方向的重要布局之一,结合之前发布的FCoE、OTV、VN-LINK等技术,一个新一代数据中心网络平台已经隐约可见,Cisco只待市场大转型的到来,再次一举确立在网络行业的领导地位。
了解FabricPath有助于我们认识数据中心网络的演进方向,把握整个行业的脉搏,从而形成自己的思考,得出自己的结论。
五分钟Q&A
1)什么是FabricPath?
FabricPath是思科Nexus交换机上的一项特性,能够实现二层多路径数据转发。FabricPath能够在二层环境实现类似三层的路由功能,帮助虚拟化数据中心网络实现平滑扩展。
2)FabricPath有哪些好处?
FabricPath网络不再需要运行生成树协议(STP),没有链路被阻断,大大增加了网络传输带宽,很好地支持了服务器之间迅猛增加的横向流量。同时,FabricPath能够实现类似三层的路由功能,支持二层网络的平滑扩展。
3)FabricPath与现有二层交换冲突吗?
FabricPath的前提是不破坏现有的二层交换行为,FabricPath网络对已部署的接入设备来说是一个透明连接。
4)如何部署FabricPath?
在支持FabricPath的设备上将端口配置为FabricPath模式,系统会自动完成地址分配、路由建立等行为,无需手动干预。
5)什么是TRILL?
为了实现二层多路径功能,IETF在RFC5556中定义了一套方法,命名为Transparent Interconnection of Lots of Links,又名TRILL。
6)FabricPath是私有协议吗?
FabricPath是Cisco的市场词汇,用来表示思科的二层多路径技术,所以,FabricPath不是一项私有协议,但它是思科的私有技术实现。
7)FabricPath同TRILL的关系?
Cisco在TRILL标准制定过程中参与极深,并且积极推动TRILL的最终成型。FabricPath是TRILL正式标准化之前,Cisco推向市场的“Pre-Standard”技术,基本内容与TRILL相同, 增加了“基于会话的MAC地址学习”、“Vpc+”和“多重拓扑”等高级功能。FabricPath架构与TRILL完全兼容,Cisco承诺FabricPath平台将全面支持TRILL协议,TRILL正式标准化之后,通过软件升级,现有FabricPath设备能够与标准的TRILL交换机互联互通。
8)什么设备能够支持FabricPath?
2010年Cisco在Nexus 7000交换机上发布了一块支持FabricPath的32口万兆光纤板卡,以及相应的软件。未来,FabricPath技术会扩展到更多的Nexus 7000和Nexus 5000交换机上。
9)市场上还有那些类似FabricPath的解决方案?
目前没有完全相同的产品,Juniper的QFabric在二层扩展方面与FabricPath类似,但QFabric是一个私有架构,目前也没有开放的时间表。