传统VLAN网络的不足
从虚拟化层的角度来看,VxLAN实现了逻辑网络和物理网络的完全解耦。通过VxLAN的封装,虚拟机之间的通信完全在逻辑网络内部完成,与物理架构的底层架构已经没有任何关系,只有当虚拟机需要通过网络边界层与外界进行通信时,才会考虑与物理网络的路由和交换策略。
从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力。VxLAN网络标识VNI类似VLAN ID,用于区分VxLAN段,不同VxLAN段的虚拟机不能直接二层相互通信。VNI由24比特组成,一个VNI即表示一个租户,因此支持多达2的24次方,16M的租户,数量远远大于4096,并且UDP的封装可以穿越三层网络,显然比VLAN具有更好的扩展性。
UDP是一个无连接的数据包服务,UDP在传输过程中并不保证数据包的送达和有效性验证。数据有可能会乱序到达,有可能会出现冗余,甚至可能出现丢失。这同样意味着传输过程不需要像TCP协议一样有个初始化的握手阶段,也不需要建立一条连接双方的通信管道(如果说应用程序需要有序,可靠的数据流传输,那么就应该选择TCP协议)。由于UDP没有通信管道,所以当进程要向另一个进程发送一批数据时,发送进程必须将目的进程和地址与这些数据联系起来。这样的传输机制有什么好处呢?UDP协议避免了因检查每个报文是否到达而产生的开销,对于那些不需要保证数据交付的应用来说更加的快速有效。
VxLAN的传输过程实际上就是将源主机的MAC地址,IP地址,VLAN信息等通通封装到UDP中再进行转发。在转发过程中,这个数据包只有到了目的地才会被终结掉,数据包在整个过程中保持了内部数据的完整性。这种数据转发机制就叫做隧道机制,可以减少对现有网络拓补的改动,而且方便网络在改动时仍然保持快速传输。可以看出来,与传统VLAN报文传输不同的是,在这个传输过程中,服务器的MAC地址,IP地址和VLAN信息都不会再作为转发依据。
上文所说的目的地指的是一个叫VTEP(VxLAN隧道终结点)的实体,用于实现对VxLAN报文进行封装和解封装,包括ARP请求报文和正常的VxLAN数据报文,在一段封装报文后通过隧道向另一端VTEP发送封装报文,另一端VTEP接收到封装的报文进行解封装。这样两端就可以在基于L3的网络基础上建立起L2虚拟网络。VxLAN报文中源IP地址为本节点的VTEP地址,VxLAN报文中目的IP地址为对端节点的VTEP地址,因此一对VTEP地址就对应着一个VXLAN隧道。
运行在虚拟化hypervisor层上的虚拟交换机是用于连接虚拟机和物理设备的交换设备,主要包括标准交换机和分布式交换机两种,两者的不同点在于前者是运行在一个主机上,而后者则是运行在整个数据中心上。虚拟交换机的运行模式与物理交换机类似,负责监测与虚拟端口相连接的虚拟机,并在虚拟机之间转发流量。虚拟交换机的作用在于,虚拟机之间的网络流量可以在本地进行转发;虚拟机可以通过虚拟交换机访问物理机或集群所连接的外部网络。除此之外,虚拟交换机可以合并多个网络适配器的带宽实现网络带宽的负载均衡额IO控制。
虚拟交换机同样分为管理层和基础数据层两部分,管理层负责为虚拟交换机进行各种配置,而数据层则负责hyoervisor层上的数据交换工作。由于每个主机都有各个MAC地址所属的端口组的相关信息,主机本身也参与控制层的工作,也就是说虚拟交换机和物理交换机一样,控制层和数据层并没有完全分离。最典型的例子是,即便是虚拟化层的控制节点(例如vCenter)出现故障,虚拟交换机依然可以按照制定策略继续工作,原因在于这些控制节点并不负责数据层的工作。
当一个虚拟机添加到一个VxLAN网段时,其所在主机就会向控制层生成一个携带VNI/VTEP映射关系的控制平面信息。控制层收到信息后会生成一个携带这些信息的本地VTEP表项,并转发统一VxLAN网段内的虚拟机所在的所有主机,之后这些主机就知晓其下属虚拟机在本地VxLAN网段中的所有信息。
主机还需要向控制端提供虚拟机连接到具体VNI的MAC地址表,同样的,控制节点也会建立本地的MAC地址表,但是并不会像VTEP信息一样被发送到所有的主机,这就是为什么在VxLAN环境下主机只会关心本地连接虚拟机的MAC地址,大大节省了网络设备中MAC地址表项。
最后一个需要主机提供的表项为虚拟机的IP地址,无论是DHCP地址还是静态地址,用来建立本地的ARP表,并实现ARP抑制功能。该功能允许在虚拟机连接的VxLAN网段中移除可能会泛洪的ARP流量,减少广播流量,有利于提高整个网络架构的稳定性和可扩展性。
如图所示,三个主机组成一个VTEP Segment,每个主机都可以充当这个隧道终结点。其中VM1和VM3连接在VxLAN 5000,VM2和VM4连接在VxLAN 5001,以下是VM1和VM3两个虚拟机建立一个单播通信的过程。
4. Host1接收到了这个信息,更新了自己本地的表项,于是对于VM1来说,VM3的VTEP就是已知的了。
如果控制端没有相关的映射信息,控制端会将这个情况通知给host1,使其可以在VxLAN 5000进行泛洪,以便ARP请求可以到达VM3。VM1会向所有传输范围内所有的虚拟机发送数据包, 由于VM2和VM4在VxLAN 5001上,会直接丢弃这个数据包,是不受影响的;只有VM3最终可用收到这个数据包。
一旦上述工作完成,VM1就有了ARP缓存,就可以将数据流量发送到VM3。转发流程如下所示:
3. Host3收到数据包并解封装,并将这个报文传递给VM3。在这个过程中host3同时也学习到了VM1的位置。
值得注意的是,在这个例子中,三个主机位于一个二层物理网络中。如果主机之间需要三层通信,运行在其上的虚拟机依然可以建立起一个VxLAN传播区域,因为VxLAN是将以太网报文封装在UDP传输层上的一种隧道转发模式,是在三层网络之上叠加的一个二层虚拟网络。
相关文章:
网络虚拟化之SDN,Openflow和Overlay
CPU虚拟化知多少?
SDS软件定义存储技术沙龙随笔
NSX为什么这么火,究竟为哪般?
友情链接