VLAN、VXLAN基础篇(下)

五、VLAN、VXLAN转发原理

5.1.VLAN的转发原理

VLAN的转发原理,其实就是说交换机是如何转发VLAN报文的,先说一下交换机端口的类型:
1. access端口:交换机与终端之间连接的端口,该类型端口配置成access,只属于一个vlan,也就是其配置的vlan。
2. trunk端口:交换机与交换机之间连接的端口,该类型端口配置成trunk,允许配置的多个vlan报文通过。
3. access端口收报文:收到报文判断是否有vlan信息,如果没有打上PVID并进行转发;如果有则直接丢弃(缺省)
4. access端口发报文:将报文vlan tag剥离,直接发送。
5. trunk端口收报文:收到报文判断是否有vlan信息,如果没有打上PVID,并进行转发;如果有vlan tag,进一步判断是否允许该vlan通过,如果可则转发,否则丢弃。
6. trunk端口发报文:比较端口的PVID和将要发送报文的VLAN信息,如果相同,剥离VLAN信息,再发送;如果不相同则直接发送。
VLAN、VXLAN基础篇(下)_第1张图片
5.2.VXLAN的转发原理

5.2.1、数据层面、控制层面转发解析
之前说的vlan转发是在TCP/IP处于二层,其实就是交换机端口进行vlan tag的判断,然后进行相应的转发。
但是vxlan是一种将二层报文用三层协议进行封装的技术,也就是说可以将二层网络在三层环境下进行扩展,所以有必要分清vxlan数据平面和控制层面的转发原理。
1. 数据平面:采用隧道机制,VTEP为虚拟机的数据包加上了一层外层包头,这层包头只有在数据到达目的的VETP才会被解封装,中间所有经过的网络设备只会根据外层包头内的目的地址进行数据转发,对于转发路径上的网络来说,vxlan的数据包跟一个普通的ip包没有任何区别
2. 控制层面:vxlan不会再虚拟机之间放置一个长连接,所以vxlan需要一个表再控制平面来记录对端地址的可达情况。控制层面的表为:VNI、内层MAC、外层VTEP_IP。vxlan学习地址的时候任然有二层协议的特征,也就是还是通过ARP请求和组播来获取路径信息。也就说控制层面会有一张表,来记录收到的VETP的信息。

5.2.2、ARP请求原理

VXLAN ARP请求原理:初始化、ARP请求、ARP应答
VLAN、VXLAN基础篇(下)_第2张图片
上图中,VM1和VM4进行通信,那么最初加入VXLAN网络中,会进行ARP请求过程如下:
第一步:VM1、VM4初始接入VXLAN的网络,会自动加入ip多播组239.119.1.1
第二步:VM1以广播形式发送ARP请求,本地VTEP1封装报文,封装本地VNI1000,外层IP头等信息,DA是多播组地址,SA是VTEP的ip地址。然后VETP1在多播组内进行多播。对端VTEP2收到多播报文,记录对应VNI和IP信息,然后再对端VNI1000内进行广播,这样VM4收到VM1的ARP响应;
第三步:VM4响应,跟上一步过程一样,唯一区别的是回应的DA是IP单播(VTEP1的ip地址)
第四步:ARP交互结束。VM1和VM4都知道了对方的MAC地址和VNI对应的关系。
5.2.3、数据转发原理
VXLAN数据传输:使用TCP通信,用UDP的方式进行转发
第一步:有了之前的ARP请求过程,两端的VM知道了对方的MAC地址和VNI对应关系,所以VM1向对端VM4通信时(VM1向VM4通信是以TCP方式通信的),VETP1收到VM1发送的数据包,用MAC地址从对应表中检查VM1和VM4是否属于同一个VNI,并且VETP1已经知道了对方VM4的所有地址信息(MAC地址和VETP2的IP)。然后VETP1封装新的数据包(封装内容:内层MAC和IP、VNI信息、UDP包头、外层VETP的IP、外层MAC)。交给自己上联的交换机。
第二步:上联交换机收到服务器发来的UDP包,对比目的地址和自己的路由表,进行相应的转发(此时可以当做是一个正常的IP通信)。
第三步:目的VETP2收到数据包后检查VNI,如果UDP包中VNI和VM4的VNI一致,那么VETP2进行将数据包解封装以后交给VM4处理。这样整个VM1和VM4的一次数据包交互完成。
特别注意:
a、整个VXLAN网络中,中间可能要穿过N个网关,但是这对与VM来说是透明的,VM不需要关心中间穿越了什么。
b、VM1和VM4虽然是TCP通信,但是在VXLAN网络中,数据包始终是以UDP的方式转发的,两端的VETP不会检查数据的正确性、顺序的完整性,所以只有在VM1和VM4收到解封装的TCP包后才会做这些工作。也就说被UDP封装的是TCP连接,UDP和TCP是两个独立的协议栈各自工作,相互之间没有交互。

六、VXLAN网关

VXLAN网关的存在其实就是让VXLAN网络和VLAN网络进行很好的连接,VXLAN网关提供VXLAN ID和VLAN ID之间的映射和路由。因为不可能的网络都是VXLAN网络,所以需要一种机制,当收到VXLAN网络到普通网络的数据时,VXLAN网关需要将外层包头去掉,根据内层的原始帧转发的普通的端口上去。当有普通的网络进入VXLAN网络时,VXLAN网关负责打上外层包头,并根据原始VLAN ID对应的一个VNI,同时去掉内层的VLAN ID信息。
如果一个VXLAN
网关收到一个VXLAN包头里面有VLAN ID信息,会直接将这个包丢弃,因为VLAN ID是一个本地信息(局域网内),仅在一个地方的二层网络中起作用,VXLAN是隧道机制,并不会依赖VLAN ID进行转发,也无法检查VLAN ID是否正确。
所以这就有一个重点:VXLAN网关连接传统网络的端口必须配置access口。

七、VXLAN部署和使用场景

7.1、纯VXLAN部署场景
对于连接到VXLAN网络的虚拟机来说,由于虚拟机的vlan信息不再作为转发的依据,虚拟机的迁移不再受三层网关的限制,可以实现跨越三层网关的迁移。

7.2、VXLAN和VLAN混合部署场景
在前面VXLAN网关已经说过了,最主要的就是VXLAN网关连接VLAN网络的端口必须配置access模式。

7.3、使用场景
7.3.1、Leaf-Spine架构中基于vxlan的实现
VLAN、VXLAN基础篇(下)_第3张图片
Leaf-Spine架构中Overlay基于vxlan隧道实现,根据不同的需求环境,对vxlan隧道的封装点选择也不同。
例如:选择vSwitch到vSwitch进行vxlan隧道封装点
Underlay网络对Overlay网络一无所知,物理网络只负责Underlay的转发。这跟上面说的纯vxlan架构部署一样,业务功能在vSwitch上实现。
选择leaf到leaf进行vxlan隧道封装点
vSwitch通过vlan送到物理网络leaf上,laef通过vxlan封装,送到另一个leaf上,这样的好处是降低了隧道的数量,因为vlan里面可以有更多的虚拟机,可以复用隧道,通过vlan和VNI的映射实现。这就是上面说的vxlan和vlan混合部署在leaf-spine的架构中的应用。
在leaf-spine的架构中,关于vxlan的封装点,还有好多种选择,至于选择哪种,完全看业务场景的需求。

7.3.2、Neutron的基于vxlan的overlay实现
VLAN、VXLAN基础篇(下)_第4张图片
Neutron采用的是分布式架构,包括Neutorn Server、各种plugin/agent、database 和message queue。其中Neutron 通过plugin 和agent 提供的网络服务,Type driver支持Local、Fat、Vlan、Vxlan、GRE等多方式。
以计算节点1内部不同VM之间通信为例,本地流量通过bri-int转发,通过vlan ID区别不同的VM。
如果计算节点1内的VM与计算节点2内的VM通信,那么就要通过bri-tun转发,通过vlan ID与VNI的映射,完成通信。
其实Neutron网络服务架构中,涉及的vxlan的场景很多,比如:计算节点内部通信、跨计算节点内部通信、跨计算节点通信、分布式路由部署、集中式路由部署等等。南北向流量和东西向流量的业务场景是Neutron架构中基于vxlan实现overlay的关键。

7.3.3、OpenDaylight的基于vxlan的overlay实现
ODL的网络架构跟Neutron的网络架构基本差不多,区别是br-int和br-tun全部通过br-int来实现,也就说br-int上同时实现了交换、路由、NAT、ACL等等配置(所以br-int会维护好多表项),当然也包括vxlan的配置。

7.3.4、阿里云CPE端到端的Vxlan方案实现
VLAN、VXLAN基础篇(下)_第5张图片
参考:2018年杭州云栖大会(数据平面包转发示意图)
阿里云CPE解决方案正是基于Vxlan的端到端解决方案很好的应用,因为中间有一段经过互联网,所以使用IPsec,确保数据安全。

备注:因VLAN的使用场景比较简单,此处就不一一阐述了,另外,如果大家对以上vxlan的overlay实现架构和方案有任何疑问可以留言或者私信我。


转自:搞网络就是一把梭

你可能感兴趣的:(交换)