博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VxLAN
阅读量:5052 次
发布时间:2019-06-12

本文共 2027 字,大约阅读时间需要 6 分钟。

VxLAN: Virtual Extensible LAN. It's overlay with MAC in UDP encapsulated in L3.

1. 格式

(1) Vxlan header共8字节。 目前只用VXLAN Flags和VNI,保留字节全置0。VNI 24比特远大于12比特的VLAN ID.

(2)Outer UDP header目的端口默认4798,可改。 UDP Checksum必须置0。

(3)Inner Ethernet header

      Destination Address: 目的VTEP MAC
      VLAN Type: 0x8100
      Ethernet Type: 0x8000(IPv4)

(4)Inner IP header目的IP可以是单播或多播地址。 单播时:     

      protocol: 0x11 (UDP)
      IP Destination Address: 目的VTEP IP地址
      IP Source Address: 源VTEP IP地址

2. 传输

 

VTEP 作用: (Vxlan Tunnel End Point)

      打包/解包VxLAN ARP报文和正常VxLAN请求报文

VTEPs之间节点的传输根据Outer Ethernet/IP header进行数据转发

VxlanARP请求

      (1) vxlan初始化
     

      VM1和VM2连接到VXLAN网络(VNI)100,两个VXLAN主机加入IP多播组239.119.1.1

      (2) ARP请求

1) VM1以广播的形式发送ARP请求;

2) VTEP1封装报文, 打上VXLAN标识为100,外层IP头DA为IP多播组(239.119.1.1),SA为IP_VTEP1.

3) VTEP1在多播组内进行多播;

4) VTEP2解析接收到多播报文, 填写流表(VNI 100, 内层MAC1,外层IP_VTEP1地址),并在本地VXLAN标识为100的范围内广播(VXLAN是广播的主要应用)

5)VM2对接收到的ARP请求进行响应

(3) ARP应答

1) VM2准备ARP响应报文后向VM1发送响应报文

2)VTEP2接收到VM2的响应报文后把它封装在IP单播报文中(VXLAN标识依然为100),然 后向VM1发送单播

3)VTEP1接收到单播报文后,学习内层MAC2到外层IP_VTEP2地址的映射,解包并根据包内目的MAC1地址转发给VM1

4)VM1接收到ARP应答报文,ARP交互结束

数据传输

(1) ARP请求应答之后,VM1知道了VM2的MAC地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2发送数据的)。VTEP1 收到VM1发送数据包,用MAC地址从流表中检查VM1与VM2是否属于用一个VNI。两个VM不但位于同一个VNI中(不在同一个VNI中出网关),并且VTEP1已经知道了VM2的所有地址信息(MAC2和VTEP2_IP)。VTEP1封装新的数据包。然后交给上联交换机。

(2) 上联交换机收到服务器发来的UDP包,对比目的IP地址和自己的路由表,然后将数据报转发给相应的端口。

(3) 目的VTEP收到数据包后检查器VNI,如果UDP报中VNI与VM2的VNI一致,则将数据包解封装后交给VM2进一步处理。至此一个数据包传输完成。整个Vxlan相关的行为(可能穿越多个网关)对虚拟机来说是透明的,虚拟机不会感受传输的过程。虽然VM1与VM2之间启动了TCP来传输数据,但数据 包一路上实际是以UDP的形式被转发,两端的VTEP并不会检查数据是否正确或者顺序是否完整,所有的这些工作都是在VM1和VM2在接收到解封装的 TCP包后完成的。也就是说如果说如果被UDP封装的是TCP连接,那么UDP和TCP将做为两个独立的协议栈各自工作,相互之间没有交互。

Vxlan网关

用于VXLAN网络和非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口,不能启用TRUNK口。

转载于:https://www.cnblogs.com/digithunter/p/5375437.html

你可能感兴趣的文章
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>
java学习笔记之String类
查看>>
pymysql操作mysql
查看>>
Linux服务器删除乱码文件/文件夹的方法
查看>>
牛腩记账本core版本源码
查看>>
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>