在上一期《分布式任意播网关》中,我们提出了两个问题:
同网段的虚拟机,如何跨越虚拟交换机(OVS)通信?
不同网段的虚拟机,又如何跨越OVS通信呢?
今天我们将为大家揭开谜底。
首先,我们知道,在同一台宿主机下,同一网段的虚拟机可以直接通讯,而在同一个二层域内,跨宿主机的虚拟机通讯则需要OVS在上连方向增加VLAN TAG,如图所示:
那么,我们是不是将整个数据中心网络配置为二层网络,并为每个网段分配对应的VLAN,就可以实现虚拟机跨宿主机任意通信了呢?
当然不是的。
同学们回顾一下《计算机网络》课程中提到的以太网通信机制,对于以太网,每个BUM报文(Broadcast, Unknown-unicast, Multicast),都将在网络中泛洪,也就是说,网络中每个二层节点都将向收到该报文的端口以外的所有端口复制该报文。
可能有的同学会问,这种机制,不是已经经受过了历史的考验吗?当然。在一个小规模的子网中,如果终端数量不超过200个,是没有问题的。但是,如果子网规模达到1000个以上,每个终端每秒发送1个BUM报文,将导致子网中每秒钟需要传输1,000,000个报文,也就是说,子网中的BUM泛洪包数量,与终端数成平方正比关系。
看到这里,有的扎实掌握了以太网技术的同学已经发现问题所在了。是的,千兆以太网每秒钟最多只能传输1,488,095个数据报文,当子网规模较大时,网络中大部分的资源将被BUM报文泛洪消耗,这是不可接受的。
我们可以判断,在数据中心大规模虚拟化的趋势下,虚拟化终端在以太网泛洪机制下制造的平方律增加的泛洪数据包,与线性提升的以太网交换能力之间的矛盾,已经上升为数据中心网络的主要矛盾。
大二层技术就是解决这一矛盾的主要手段。
常见的大二层技术,有Trill、NVGRE、FabricPath、SPB等。在大浪淘沙中,VXLAN技术以其良好的兼容性和扩展性成为了大二层技术的主流。
VXLAN技术的实现,是将以太网数据包封装在UDP内,当以太网数据包进入VXLAN隧道时,VXLAN隧道端点(VTEP, Vxlan Tunnel End Point)为以太网数据包添加外层IP/UDP头部,另一端的VTEP拆除之,如下图所示:
如图,VLAN 100内的两个VM通信时,OVS扮演VTEP的角色,在以太网数据包外面增加一层以太网/IP/UDP数据包头。外层IP的源地址/目的地址分别为两端OVS的IP。
VXLAN采用UDP端口4789作为目的端口,而源端口通过内层数据包的头部进行Hash计算得出,便于实现负载均衡。
原来,VXLAN并不神秘,通过VXLAN实现的二层转发也很简单。
执行VXLAN二层转发工作的VTEP,我们叫它VXLAN二层网关,或VXLAN网桥。
明天,我们将介绍VXLAN三层路由的概念,为大家详细介绍虚拟机跨网段转发的机制。