技术■网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)( 二 )


本文插图

(MAC in UDP也即L2 over L4) , 二层报文用三层协议进行封装 , 可实现二层网络在三层范围


VxLAN是基于IP网络之上 , 它采用的是MAC in UDP技术 , 其实它与GRE/IPSEC等tunnel技术类似 , 这种封装技术对中间网络没有特殊要求 , 只要可以识别IP报文就可以传送 。
VTEP对VM发送的原始以太帧进行“封装” , 从上至下封装如下所示:

  • VXLAN Header
增加VXLAN头(8字节) , 其中包含24比特的VNI字段 , 用来定义VXLAN网络中不同的租户 。 此外 , 还包含VXLAN Flags(8比特 , 取值为00001000)和两个保留字段(分别为24比特和8比特) , 增强可扩展性 。
  • UDP Header
VXLAN头和原始以太帧一起作为UDP的数据部分 。 UDP头的目的端口号(VXLAN Port)固定为4789(可以修改) , 源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值 。
  • Outer IP Header
封装外层IP头 , 其中的源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址 , 目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址 。
  • Outer MAC Header
封装外层以太帧头 。 其中的源MAC地址(Src. MAC Addr)为源VM所属VTEP的MAC地址 , 目的MAC地址(Dst. MAC Addr)为到达目的VTEP的路径上下一跳设备的MAC地址 。
  • 当目的IP为接收端的VTEP的IP时 , 假如不知道这个IP地址 , 则需要执行ARP请求来获取 , 步骤如下:
1.目标IP被替换成与源虚拟机具有相同VNI的多播组IP地址;
2. 所有VTEP端都接收该多播报文 , VTEP查找所在主机上的全部虚拟机来匹配源虚拟机的Inner 目的MAC 。
3. 目标VTEP的虚拟机会回应该多播包 , 从而获得目标VTEP的IP地址 。
4. 发送端VTEP添加VNI-VTEP-虚拟机MAC的映射关系到自己的VXLAN表中 , 以避免再次组播学习 。
VxLAN的部署
  • VxLAN存在underlay及overlay的概念 , 它是在原有的网络架构上再overlay新增了一层网络(不影响原有网络) 。 因为是架构在IP层之上 , 两站点只需要IP可达 , 就可以建立VxLAN隧道(部署VxLAN) 。
对于CE系列交换机而言 , BD与VNI是1:1的映射关系 , 这种映射关系是通过在VTEP上配置命令行建立起来的 。 配置如下:
#
bridge-domain 20 //表示创建一个“大二层广播域”BD , 其编号为20
vxlan vni 2000 //表示在BD 20下指定与之关联的VNI为2000
#
VTEP会根据以上配置生成BD与VNI的映射关系表 , 该映射表可以通过命令行查看 , 如下所示:
display vxlan vni
Number of vxlan vni : 1
VNI BD-ID State
----------------------------------
5000 10 up
有了映射表后 , 进入VTEP的报文就可以根据自己所属的BD来确定报文封装时该添加哪个VNI 。 那么 , 报文根据什么来确定自己属于哪个BD呢?
  • 报文根据什么去确定自己属于哪个BD呢?
二层子接口或者物理接口根据配置来检查哪些报文需要进入VXLAN隧道 , 同时对检查通过的报文做怎样的处理 。
以华为的交换机为例:
技术■网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
本文插图

default类型允许所有报文进入VXLAN隧道 , dot1q和untag类型的只允许某一类报文进入 。


  1. 经过同一物理接口的报文既有带VLAN Tag的 , 又有不带VLAN Tag的 , 并且他们各自要进入不同的VXLAN隧道 , 则可以在该物理接口上同时创建dot1q和untag类型的二层子接口 。
  2. default类型(应用于均需要走同一条VXLAN隧道的场景 , 下挂的VM全部属于同一BD)的子接口允许所有报文进入VXLAN隧道 , dot1q和untag类型的子接口只允许某一类报文进入 。 也即意味着前者不可与后者在同一子接口 。 (不然报文到了接口之后如何判断要进入哪个二层子接口)


    推荐阅读