当前位置: 代码迷 >> 综合 >> A brief introduction to VXLAN
  详细解决方案

A brief introduction to VXLAN

热度:15   发布时间:2023-12-06 17:21:22.0

A brief introduction to VXLAN

VXLAN从IETF草案上的声明——“This document describes Virtual extensible Local Area Network(VXLAN), which is used to address the need for overlay networks within virtualized data centers accommodating multiple tenants. The scheme and the related protocols can be used in cloud service provider and enterprise data center networks.”——可以看出,它所主要是用来满足数据中心中对网络overlay的需求。因此VXLAN所要解决的问题,来自数据中心中应用STP和VLAN带来的限制问题(STP对与端口和网络链路的浪费和VLAN的数量限制)以及对于多用户组环境的需要和ToR交换机上的流表数量不足的问题(估计VM的数量很大的情况下才会有次问题)。

VXLAN使用MAC in UDP的方法进行封装,并在中间添加了一层VXLAN Header。VLXAN的封装结构如下图所示,

        VXLAN Header:+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|R|R|R|R|I|R|R|R|            Reserved                           |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                VXLAN Network Identifier (VNI) |   Reserved    |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1. VXLAN Header:
共计8个字节,目前被使用的是Flags中的一个标识位和24bit的VXLAN Network Identifier,其余的部分没有定义,但是在使用的时候必须设置为0x0000。
2. 外层的UDP报头:
目的端口使用4789,但是可以根据需要进行修改。 同时UDP的校验和必须设置成全0
3. IP报文头:
目的IP地址可以是单播地址,也可以是多播地址。
单播情况下,目的IP地址是VXLAN Tunnel End Point(VTEP)的IP地址。
在多播情况下引入VXLAN管理层,利用VNI和IP多播组的映射来确定VTEPs。
从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,因此比的VLAN更好的可扩展性。
VM之间的通信模型
单播(VM <—> VETP <——-> VETP <—> VM)
1. VTEP首先会去检查发送报文的VM所对应的VNI,
2. 查看报文的MAC地址是不是和某个已知的VTEP存在对应关系
2.1. 如果存在,则在报文外部添加VXLAN所需要的外层报文,
2.2. 如果不存在,则会去多播这个报文,这里需要引入VXLAN的VNI和IP多播组的管理层概念
3. VTEP接收到VXLAN报文之后,会通过类似网桥自学习的方式建立VTEP和内层MAC的映射。
多播或者广播
1. 在支持多播的情况下,VTEP可以通过IGMP来加入或者离开VXLAN多播组
2. 可以通过PIM-SM或者PIM-bidir来建立多播树
3. 在不支持多播的情况下,VTEP需要通过广播的方式封装,不过可以预见的是网络的性能会显著下降
这里存在一个问题:在外层网络支持多播的情况下,VXLAN中的VNI数量可能大于多播地址。
一些需要关注的问题:
1. 需要改变外层网络的MTU,因为对内层网络的添加了外层的报文头,因此需要增加MTU的值。
2. 外层网络的组播支持