一,什么是vxlan 1, VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网。它是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络。(overlay:简单理解就是在一个实体网络之上搭建一个逻辑网络)
2,VXLAN本质上是一种隧道封装技术。它使用TCP/IP协议栈的惯用手法——封装/解封装技术,将L2的以太网帧封装成L4的UDP数据报,然后在L3的网络中传输,效果就像L2的以太网帧在一个广播域中传输一样,实际上是跨越了L3网络,但却感知不到L3网的存在。
二,VXLAN为了解决什么问题? 一台服务器可虚拟多台虚拟机,每台虚拟机相当于一台主机。主机的数量发生了数量级的变化,这也为虚拟网络带来了如下问题: 1,虚拟机规模受网络规格限制 传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发,而MAC地址表的容量限制了虚拟机的数量。 2, 网络隔离能力限制 当前主流的网络隔离技术是VLAN,在大规模的虚拟化网络中部署存在如下限制: ① 由于IEEE 802.1Q中定义的VLAN Tag域只有12比特(vxlan中VNI占24比特),仅能表示4096个VLAN,无法满足大二层网络中标识大量租户或租户群的需求。 ② 传统二层网络中的VLAN无法满足网络动态调整的需求, 3,虚拟机迁移范围受网络架构限制 虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址保持不变,这就要求业务网络是一个二层网络,且要求网络本身具备多路径的冗余备份和可靠性。
三,VXLAN概念图示
图中从左到右依次介绍,OVI为物理服务器,VM1等表示物理服务器上创建的虚拟机,interface表示在leaf交换机TOR上的物理子接口,每一个Sub interface表示一个vlan,DB表示广播域,每个广播域中可以运行vxlan,三台运行vxlan的设备被称为NVE,每个NVE都有自己的一个VTMP,可以理解VTMP为一个IP,那么三个VTMP就可以建立三条vxlan隧道,在VTMP上创建不同的VNI(就像不同得vlanID一样),每一个NVI都有自己的广播域BD,可以看到每个BD对应一个BDIF(相当于vlan子接口),综上所述,VM1通过虚拟交换机连接子接口Sub interface1,从虚拟机出来的流量OVS会给打一个vlan的标签,该vlanid会个sub interface的vlanid做一个匹配,子接口sub interface1绑定到了BD1下,每个BD对应一个VNI,根据BD和NVI的映射关系就会知道VM1属于VNI1,每个BD都有一个网关BDIF,所以VM1的网关就是BDIF1。
四,VXLAN报文封装格式:MAC IN UDP!!! 从右往左: 1,Original Enternet Frame:原始以太帧,二层头和原始数据,原始以太帧需要封装vxlan需要在其前封装一个VXLAN头部 2,VXLAN Head:大部分比特被保留,图中置R的表示被保留,置I表示VXLAN Head,中间有24位表示NVI,所以VXLAN支持的数量位2^24>1600万个VNI。 3,UDP Header:源目端口组成,Dest Port=VXLAN Port=4789(vxlan),Source Port根据原始以太帧HASH算出来的;深信服超融合VXLAN值选择8472 4,DIP/SIP:隧道的VTMP ip,SIP本端VTMPIP,DIP对端VTMPIP 5,DMAC/SMAC:SMAC根据外层IP查询出接口的MAC,DMAC为下一跳MAC
五:VXLAN网关 传统网络中,跨报文转发数据需要借助vlan mapping或者L3设备进行完成不同的一个vlan之间的一个互通问题,VXLAN一样需要解决一下两个问题: 1,VXLAN和VLAN之间互通,解决VXLAN虚拟网络和传统物理网络之间通信 2,VXLAN和VXLAN之间互通,解决VXLAN网络内部不同租户通信 3,三层网关分类: 1)集中式网关:南北向流量和不同VXLAN之间的通信都通过仅有一台VTMP设备充当集中式网关处理流量,网关压力比较大,而且不同VXLAN之间的流量互通路径不是最优的 2)分布式网关:多台VTMP设备充当网关,对本地站点流量进行三层转发,南北向流量和集中式网关无异,东西向流量路径最优。
六,VXLAN之间如何通信 场景1,相同VXLAN之间VM通信 VM_A、VM_B和VM_C同属于10.1.1.0/24网段,且同属于VNI 5000。此时,VM_A想与VM_C进行通信。 由于是首次进行通信,VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址。
1,通信过程:
1)VM_C上已经学习到了VM_A的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A。 2)VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI。同时,VTEP_3学习MAC_C、VNI和报文入接口(Port_3)的对应关系,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。这里封装的外层源IP地址为本地VTEP(VTEP_3)的IP地址,外层目的IP地址为对端VTEP(VTEP_1)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。 3) 报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时,VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址(IP_3)的对应关系,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。至此,VM_A和VM_C均已学习到了对方的MAC地址。之后,VM_A和VM_C将采用单播方式进行通信。
场景2,不同VXLAN之间VM通信 VM_A和VM_B分别属于10.1.10.0/24网段和10.1.20.0/24网段,且分别属于VNI 5000和VNI 6000。VM_A和VM_B对应的三层网关分别是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24网段和10.1.20.0/24网段的路由。此时,VM_A想与VM_B进行通信。 1,通信过程: 1)VM_A先将数据报文发送给网关。报文的源MAC为MAC_A,目的MAC为网关BDIF 10的MAC_10,源IP地址为IP_A,目的IP为IP_B。 2)VTEP_1收到数据报文后,识别此报文所属的VNI(VNI 5000),并根据MAC表项对报文进行封装。可以看到,封装的外层源IP地址为本地VTEP的IP地址(IP_1),外层目的IP地址为对端VTEP的IP地址(IP_3);外层源MAC地址为本地VTEP的MAC地址(MAC_1),而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP_3。 3) 报文进入VTEP_3,VTEP_3对报文进行解封装,得到VM_A发送的原始报文。然后,VTEP_3会对报文进行处理: VTEP_3发现该报文的目的MAC为本机BDIF 10接口的MAC,而目的IP地址为IP_B(10.1.20.1),所以会根据路由表查找到IP_B的下一跳。发现下一跳为10.1.20.10,出接口为BDIF 20。此时VTEP_3查询ARP表项,并将原始报文的源MAC修改为BDIF 20接口MAC_20,将目的MAC修改为VM_B的MAC(MAC_B)。 报文到BDIF 20接口时,识别到需要进入VXLAN隧道(VNI 6000),所以根据MAC表对报文进行封装。这里封装的外层源IP地址为本地VTEP的IP地址(IP_3),外层目的IP地址为对端VTEP的IP地址(IP_2);外层源MAC地址为本地VTEP的MAC_3,而外层目的MAC地址为去往目的IP的网络中下一跳VTMP_2的MAC地址。 封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。 4)报文到达VTEP_2后,VTEP_2对报文进行解封装,得到内层的数据报文,并将其发送给VM_B。
|