VXLAN概述

VXLAN是一种将二层报文用三层协议进行封装的技术,可以对二层网络在三层范围进行扩展。每个覆盖域被称为VXLAN segment,它的ID是由位于VXLAN数据包头中的VNI标识来区分的。VNI字段包含24bits,故segments最大数量为2的24次方,并且只有在相同的VXLAN segments才能通信。


它是一种在UDP中封装MAC的简单机制,可以创建跨多个物理IP子网的虚拟2层子网(也就是在三层子网中跑2层)

其实EtherIP和GRE也可以实现在IP中封装MAC,但是它们都无法做到VLAN逻辑标记

根据VXLAN的封包模式,也可以将它看作一种隧道模式的网络覆盖技术,这种隧道是无状态的。隧道端点VTEP一般位于拥有虚机的hypervisor宿主机中,因此VNI和VXLAN隧道只有VTEP可见,对于虚机来说是透明的。那么不同的VXLAN segments就可以有相同的MAC地址的虚机。并且VTEP也可以位于物理交换机或物理主机中,甚至可以用软件来定义

VTEP之间完全是通过L3协议交互的,也就意味着VTEP之间可以由Router相连,而非类似于GRE封装模式的固定端到端隧道连接。

实例:


VM1要向VM2发送数据前,必须要知道VM2的MAC地址,其获取过程如下:

1、VM1发送ARP请求包,请求192.168.0.101[VM2_IP]的MAC地址;

2、ARP请求包被VTEP1封装成多播包,发给VNI=864的多播组;

3、所有的VTEP接收此多播包,并添加(VNI–VTEP1–VM1_MAC Address)映射关系到自己的VXLAN表中;

4、目的主机上的VTEP2接收到多播包后将其解开,并向本主机上VNI=864的所有虚拟机发送广播包;

5、VM2看到了ARP包后,回应了自己的MAC地址;

6、VTEP2再次封装回应的单播包,通过路由发给VTEP1;

7、VTEP1解包,并将包传给VM1,则最终获取了VM2的MAC地址;

8、VTEP1将(VNI–VTEP2–VM2_MAC Address)映射关系添加到自己的VXLAN表中;


VM1获知VM2的MAC地址后,发送数据包,过程如下:

1、  VM1发送IP数据包到VM2,即192.168.0.100 到 192.168.0.101;

2、  VTEP1查找自己的VXLAN表知道要发给VTEP2,然后依次封装以下数据包头;

            a)VXLAN包头,VNI=864;

            b)标准UDP包头,校验和checksum为0x0000,目标端口号4789;

            c)标准IP包头,目标地址为VTEP2的IP地址,协议号设为0x11表面为UDP包。

            d)标准MAC数据包,目标地址为下一跳设备的MAC地址00:10:11:FE:D8:D2,可路由到目标隧道端VTEP2。

3、  VTEP2接收数据包,根据UDP的destination端口找到VXLAN数据包。接着查找所有所在VXLAN的VNI为864的端口组,找到VM2的

4、  VM2接收并处理数据包,拿到Payload数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 11,183评论 1 13
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 14,493评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 10,494评论 0 8
  • Teredo 原理概述 http://www.ipv6bbs.cn/thread-144-1-1.html (出处...
    我是叶问小盆友阅读 6,727评论 0 1
  • “咱们手法不如老师娴熟,着急就用大脚把鼓踹漏了也行。” 乐队排练过程中,脚下最大的鼓突然坏了。 这种老旧的架子鼓,...
    溪水音阅读 3,421评论 5 15

友情链接更多精彩内容