在大家的祝福之下,云和网络经历了红娘撮合(EVPN信令平面)、领证(层次化端口绑定),终于要过上幸福的小日子了——也就是业务转发。
我们知道,交换机作为VXLAN网关的硬件VXLAN,和前面我们提到的OVS作为VXLAN网关的软件VXLAN,转发平面的差异主要就是让交换机专用硬件(ASIC)接管了OVS进行VXLAN的处理,从而大大提升网络转发平面工作效率。
让我们看一看,交换机专用硬件具体是如何处理虚拟化网络数据转发的呢?
首先,让我们看最简单的情况——同一个OVS下的二层转发。
如图,由于VM100和VM200在同一个网段,都连接在OVS上,OVS可以直接转发两个VM之间的数据通信。在有了DPDK的条件下,这种二层转发效率还是比较高的,不需要在VM和宿主机之间进行数据拷贝。
那么,如果VM100和VM200属于不同的网段呢?
如图,VM 100和VM 200分别在VLAN 100和VLAN 200内,它们的默认网关分别是VLAN 100和VLAN 200的VLAN Interface IP地址。
OVS会将来自VM 100的数据包打上VLAN Tag,发送到硬件交换机,硬件交换机的VLAN Interface收到这个数据包,做三层跨VLAN转发,送回到OVS。OVS剥离VLAN Tag后,将数据包发送到VM 200。
大家发现,这和园区网中的跨VLAN三层转发工作原理完全相同,并不涉及VXLAN。
什么情况会涉及VXLAN呢?
让我们回忆一下,硬件VXLAN与软件VXLAN实现的最大区别是——
对了,是硬件交换机作为VXLAN网关(VTEP),也就是说,只有跨TOR交换机的数据转发,才会涉及VXLAN!
我们先看看跨TOR交换机的虚拟机二层互通——
哈哈,这个图是不是很复杂?那好吧,让我们细细分解——
首先,来自VM的数据包,在VLAN 100中,被OVS打上了VLAN 100的VLAN TAG。TOR交换机收到这个数据包以后,首先,会按照目的MAC地址查找转发表。
由于这个数据包是跨交换机转发的,显然,目的MAC在VXLAN隧道的另一端。交换机的MAC表项中,出方向接口是VXLAN的VSI接口,又叫Tunnel口。交换机会对所有从VXLAN Tunnel口发送的数据包进行VXLAN封装。
VXLAN封装用的外层源IP和目的IP是哪里来的呢?源IP很好理解,是VSI接口自身的IP地址,而目的IP用对端VTEP的IP地址就行了。
由于同一个网段的虚拟机,有可能位于多个VTEP下面,所以,理论上如果有n个VTEP,那么,每个VTEP上会有n-1个属于该网段(VXLAN ID)的VXLAN隧道。怎么样确定这个数据包应当被送到哪个VXLAN隧道呢?
我们回想一下EVPN一节中学到的内容。对端的VM上线的时候,VTEP可以获取到它的IP地址和MAC地址,并通过EVPN通告给网络中其他VTEP,其他VTEP收到相关信息以后,就会建立相关的MAC表项,将这个MAC地址的出接口,指向去往它所在的VTEP的隧道。
当目的VM所在的VTEP收到VXLAN数据包之后,它也会查找VXLAN隧道内部的MAC地址,发现它的出方向接口之后,会转换为对应的VLAN,并发送到宿主机,由OVS负责将数据包送到VM。我们管剥离VXLAN数据包头后的出方向接口,叫做VXLAN AC(Attach Circult)口。
是不是很神奇?
别急,我们还有更神奇的。
对于跨网段跨VTEP的转发,也就是VXLAN三层路由,实现方式是什么样的呢?
如图,我们回忆一下OVS实现的分布式任意播网关下,三层VXLAN路由的实现:
看,VXLAN 8100还是那个VXLAN 8100,两个OVS下的VM也还是那两个属于VLAN 100和VLAN 200的VM。唯一不一样的,是OVS和TOR之间为VLAN。
在VXLAN三层路由场景,TOR收到来自VM100的数据包,发现它的MAC地址指向自身VXLAN VSI接口。TOR会根据目的IP查找关联的对端VTEP,并将数据包封装两端VTEP的IP地址作为源IP和目的IP——
等等,少了什么?
对了,VLAN 100是如何映射到VXLAN 8100的?
——TOR会根据目的IP查找关联的对端VTEP……
这条表项中,也记录了三层互通用的VXLAN 8100啊!
目的IP关联的VTEP,以及需要转换的VXLAN ID (8100),这些信息是哪来的呢?对,就是由对端VTEP通过EVPN昭告天下的。
好了,让我们小结一下今天的收获:
交换机作为VXLAN网关时,有两类接口:Attached Circult口和Tunnel口(或VSI口),从前者进后者出时,封装进入VXLAN隧道,反之,剥离VXLAN隧道;
交换机做二层VXLAN转发时,查找的是目的MAC地址,做三层VXLAN路由时,先查找目的MAC地址对应接口(指向本地VSI口),再通过IP地址查找VXLAN隧道的目的地址,进行VXLAN封装;
来自VXLAN隧道的数据包,在交换机上进行解封装,查找目的IP/MAC地址,从AC口发送到本地的OVS,最后送到VM;
所有隧道远端的VM的MAC/IP信息,均来自远端EVPN通告。
5. 再好的CP,过日子也要明算账。层次化端口绑定和EVPN让所有VTEP表项和云平台同步,才能让云与网络这对CP天长地久。
今天大家不但学到了SDN,还学到了人生哲学。明天我们将解决一个挖了很久的坑——怎么样让数据包走出数据中心网络呢?