开始讲解数据平面的虚拟化前,我们首先来看一看数据中心网络典型的网络拓扑。左图3层分别为接入、汇聚和核心层,一般来说,接入层负责制定虚拟机的接入策略,汇聚层负责二层的传输,核心层作为网关负责三层的互通。当然了,如果汇聚层设备能够作为网关,也可以简化为右图的两层拓扑。



数据中心传统的虚拟化做法是VLAN+xSTP +自学习,VLAN负责隔离,STP负责拓扑整合,自学习负责转发,三者贯穿于传统数据中心的二层网络。不过三者各有各的问题:VLAN虽然简单成熟,但作为虚网的标签可用的只有4094个;自学习要依靠泛洪这种极度浪费资源的行为来在二层探路,而且汇聚/核心层设备MAC地址表压力太大;xSTP更是老大难的问题——收敛慢、规模受限、链路利用率低、配置复杂等等,还要考虑如何与其他二层协议配合设计。虽然有诸多的问题,但传统数据中心毕竟规模有限,倒也对付的过去。

2006年,亚马逊推出了AWS,开启了公有云的时代,大二层网络的呼声越来越高。面对着越来越多的用户,面对着越来越大的流量压力和被迫闲置的链路带宽,数据中心网络的转型迫在眉睫。虽然结合之前讲过的控制平面虚拟化技术,能够在一定程度上弱化上述问题,不过对于大二层的设计目标来说,底层网络仍然是不够智能、不够灵活的。于是多种多样的隧道技术出现了,逐渐代替了 “VLAN+xSTP+自学习”的铁三角,成为了最近几年炙手可热的新一代数据中心网络技术。

接下来要花很多的章节来讲隧道,因此隧道的模型是数据平面重中之重。关于部分内容,网上有很多的资料,作者之前看过一个大牛写的一个数据中心网络的技术专栏,其中对这部分内容的概括非常精炼、理解十分深刻,所以这里直接引用相关内容。

“Routed Protocol和Routing Protocol两个词很好的对技术组成部分进行了分类。这里的Route可以进行广义理解,不要只限于IP,作者倾向于将Routed解释成封装,Routing解释成寻址。任何一段数据信息从起点A发送到终点B的过程中,中间网络做的事情就是封装与寻址两件事。

由于中间网络只做传输,是不需要了解数据(载荷)信息的,因此要封装一个可以识别的目的地址Tag,这个Tag可以理解为目的IP/目的MAC/MPLS标签等等,所有中间设备只要能识别这个Tag即可,这就是封装。

再说寻址,网络设备能够识别目的Tag后,还需要知道对应的本地出接口在哪才能将报文转发出去。最傻瓜的处理方式有两种,一个是通过手工配置的方式将Tag静态对应到本地出接口上(如静态路由、静态MAC等),再有就是在所有接口广播了(Ethernet)。高级的方式则是使用一种寻址用的动态协议,自动的进行邻居发现、拓扑计算和Tag传递等动作,如使用RIP/OSPF/BGP/ISIS/LDP/PIM/MSDP等等。这里需要注意的是传统Ethernet是通过广播来寻址的,注定规模不能太大。STP的唯一作用就是防止环路,通过拓扑计算将多余的路径阻塞掉,与寻址无关。而前面提到的那些寻址协议主要任务都是传递Tag计算转发路径,大部分协议会通过计算拓扑来防止环路,但也有如RIP这种不计算拓扑的协议,搞些水平分割、毒性逆转和最大跳数等机制来避免环路。

封装解封装技术是网络入口与出口节点在原始数据信息前将Tag进行加载剥离动作,寻址技术则是在网络节点之间运行的交互动作。在很多协议技术中提到的数据平面其实就是封装转发,而控制平面就是标识寻址。


图是不是很眼熟,大部分的网络协议够可以照着这个模型去套的:

对于IP来说,Sender和Receiver就是TCP协议栈,Edge就是IP协议栈,Core就是Router,Payload就是TCP数据,Tag就是IP头中的目的IP;
对于Ethernet来说,Sender和Receiver就是IP协议栈,Edge就是网卡接口,Core就是Switch,Payload就是IP数据,Tag即使Ethernet头中的目的MAC;
对于MPLS来说,Sender和Receiver就是CE,Edge就是PE,Core就是P;Payload就是Ethernet/IP数据,Tag就是MPLS标签;
甚至对于分布式结构机框交换机来说,Sender和Receiver就是接口板转发芯片,Edge就是接口板上的交换接口芯片,Core就是交换芯片,Payload就是Ethernet数据报文,Tag就是目的Slot ID和Port ID(交换芯片转发时只看Slot ID,目的接口板查看Port ID)。

传统的FC/IP/Ethernet技术体系上面已经玩不出来花了,现在新的技术大都是在FC/IP/Ethernet等数据载荷外面增加个新的Tag并设计一套对应的寻址协议机制,或者干脆就还使用原有的IP/MAC作为外层封装Tag,只对寻址进行变化。对于后者,作者喜欢称呼其为嫁接技术,神马MAC in MAC,IP in IP,MAC in IP等等都属于此列。此类技术的好处是兼容,缺点是继承,缝缝补补肯定没有全新设计来得自由。

封装比较好明白,协议理解的难点其实在于寻址。前面说了,静态寻址要手工一条条配置,规模大了能累死人。动态寻址技术配置工作量小了很多,但复杂度就上升了好几个台阶。不劳力就劳心,目前看来大家还是更喜欢劳心一些。回来说动态寻址,除了RIP这种早期的靠广播来传递路由Tag的寻址协议外,后面出来的都是先建邻接,后画拓扑,再传Tag的三步走了,从OSPF/BGP/ISIS到下面要讲到的TRILL/SPB/OTV皆是如此。对寻址技术主要内容简单归纳如下,细的就要看各协议具体实现了。

建立邻居靠Hello(Advertise),拆除邻接等超时。各自为根绘周边,主根扩散画整网。Tag同步传更新,本地过期发删除。”

理解的确实深刻,如果有幸原作者能够看到这个专栏,还望多多指教。