可扩展虚拟局域网 Virtual eXtensible Local Area Network ( RFC7348 )
VXLAN 出现的原因 ...
# 普通VLAN的VLAN_ID只有4096个,无法满足大规模云计算IDC需求,因为目前大部分IDC内部结构主要分2种: L2、L3
# 在L2结构里所有服务器都在一个大的局域网里,TOR透明L2,不同交换机上的机器互通靠MAC,通信和广播的隔离靠VLAN,网关在内网核心上
# 在L3结构里这是从TOR级别上就开始用协议进行互联,网关在TOR上,不同交换机间的互通靠的是IP而不是MAC ...
# 在云计算的IDC中要求服务器做到虚拟化,原来这个服务器挂在TOR-A,随后又需要把它迁移到TOR-B而无需改变IP,这是L2网路的特长
# 因为这个虚拟服务器和外界(网关之外)通信还靠L3,但网关内部的互访走L2,这在L3是无法做到的,因为L3里每个IP都唯一且是位置固定的,除非整网段物理搬迁
# 因此为了实现在L3里传输L2数据就用到了overlay技术,因此VXLAN (可扩展虚拟局域网) 出场,它是基于IP网络之上的
# VXLAN采用 MAC in UDP 的封装方式,是 Network Virtualization over Layer 3 中的一种网络虚拟化技术
# 本来OSI的7层模型就是分层嵌套的,这种和GRE/IPSEC等tunnel技术类似,这种封装技术对中间网络无特殊要求 ...

# --------------------------------------------------------------------------------

为何需要 Virtual eXtensible Local Area Network ...
# 1.虚拟机规模受到网络规格限制:大L2网络里报文通过查询MAC进行转发,MAC表容量限制了虚拟机数量
# 2.网络隔离的限制:普通的VLAN和VPN配置无法满足动态的网络调整需求,且配置复杂
# 3.虚机搬迁受限制:虚机启动后若要在业务不中断的情况下将其迁移到其他机器就需要保持虚机的IP/MAC等不变,这就要求业务网络是个二层网络

Network Virtrualization Edge ...
# NVE 即 Network Virtrualization Edge (网络虚拟边缘节点),它是实现网络虚拟化的功能实体
# VM里的报文经NVE封装后,NVE之间就可以在基于L3的网络的基础上建立起它们的虚拟L2网络
# 网络设备实体以及服务器实体上的VSwitch都能作为NVE,VTEP作为VXLAN隧道的端点封装在NVE中,用于VXLAN报文的封装、解封装 (即flanneld)...
# VTEP与物理网络相连,分配的地址为物理IP。因此其VXLAN报文源IP为本节点的VTEP地址、目的IP为对端节点的VTEP地址,一对VTEP地址对应一个VXLAN隧道
# VXLA的网络标识VNI类似VLAN的ID,用于区分VXLAN的段,不同段的虚机不能直接二层相通,1个VNI表示1个租户,VNI由24bit组成因此支持多达16M租户
# VXLAN协议默认使用的端口为4789,VXLAN的数据包中外层源IP是发送报文的虚机所属的VTEP的IP,目的IP是目的虚机所属的VTEP的IP (VTEP: Vxlan Tunnel End Point)
# VXLAN的数据包中外层目的IP可以是单播、组播:
#   1.单播情况下目的IP为VTEP的IP
#   2.多播的情况下引入VXLAN的管理层,利用VNI(相当于VLAN-ID的作用)和IP多播组的映射来确定VTEP

# -------------------------------------------------------------------------------- VTEP 之间建立连接的几种方式

一、使用多播的方式建立VTEP之间的连接
# 当VXLAN的数据包外层目的IP为应为接收端的VTEP的IP时,假如不知道这个IP,则需执行ARP请求,步骤如下:
# 1.目标IP被替换成与源虚拟机具有相同VNI的多播IP
# 2.所有VTEP端都接收该多播报文,VTEP查找所在主机上的全部虚拟机来匹配源虚拟机的Inner 目的MAC
# 3.目标VTEP的虚拟机会回应该多播包,从而使其获得目标VTEP的IP
# 4.发送端VTEP添加VNI-VTEP-虚拟机MAC的映射关系到自己的VXLAN表中以避免再次组播学习,从而得到目的VTEP的IP
# 注:VXLAN的数据包中外层以太封装:源MAC为发送报文的虚机所属的VTEP MAC,目的MAC为目的虚机所属的VTEP上路由表中下一跳MAC

二、使用分布式控制中心的方式建立VTEP之间的连接
# 从多播的流程可以看出,其实VTEP发送报文最关键的就是知道对方虚机的MAC和虚机所在主机的VTEP IP,如果知道就不需要多播了!
# 在虚机和容器场景中,当它们创建时我们就可以知道它的IP/MAC(例如用某种方式获取或事先控制这两个地址),并且分布式控制中心保存了这些信息
# 除此之外控制中心还保存了每个vxlan网络有哪些VTEP,这些VTEP的地址是多少。有了这些信息VTEP就能发送报文时直接查询并添加头部,因此不再需要多播
# 通常每个VTEP所在节点都会有个agent,它和控制中心通信来获取 VTEP 需要的信息并以某种方式告诉VTEP。具体做法取决于具体实现
# 每种实现可能会更新不同的信息给VTEP,比如 HER(Head End Replication)只是把多播组替换成多个单播报文
# 也就是把多播组所有的VTEP IP地址告诉 VTEP,这样查询的时候不是发送多播,而是给组内每个VTEP发送一个单播报文
# 有些实现只是告诉VTEP目的虚拟机的MAC信息;有些实现告诉MAC对应的VTEP IP,此外什么时候告诉VTEP这些信息也是有区别的
# 一般有两种方式:常见的是一旦知道了虚机的三元组信息就告诉VTEP(即使某个 VTEP 用不到此信息,因为它管理的虚机不会和此地址通信),一般此时第一次通信还没发生
# 另一种方式是在第一次通信时,当VTEP需要这些信息时以某种方式通知agent,然后agent才告诉VTEP信息
# 分布式控制的vxlan是一种典型的SDN架构,也是目前使用最广泛的方式。因为它的实现多样而且每种实现都有些许差距,这里不用具体例子来说明了
# 只要明白了上面的原理,不管是什么样的实现都能很快上手

# -------------------------------------------------------------------------------- VXLAN 技术特点

# 1.位置无关性:    业务可在任意位置灵活部署,缓解了服务器虚拟化后相关的网络扩展问题
# 2.可扩展性:      在传统网络架构上规划新的Overlay网络,同时避免了大二层的广播风暴问题,可扩展性极强
# 3.部署简单:      由 SDN Controller 完成控制面的配置和管理,避免了大规模的分布式部署,同时集中部署模式可加速网络和安全基础架构的配置,提高可扩展性
# 4.适合云业务:    可实现千万级别的租户间隔离,有力支持云业务的大规模部署
# 5.技术优势:      VXLAN利用了现有通用的UDP进行传输,成熟性极高
综述
白话解释Vxlan
# 在一台实体服务器上可以虚拟出一个交换机来,这个交换机就是VSwitch,而这个实体机内的VSwitch下挂的是一个个的VM虚机
# VM就是租户租用的服务器,不同租户间肯定是不能互访的,不然租户数据的安全性不能保障,这个隔离就是靠的VNI这个ID
# 使用VID的目的是为了隔离租户。若一个租户有2个VM的话,那么这2个之间应该可以互访,所以说基于VNI定义的租户,而非基于VM...
# 在一个L2交换机中要跨网访问必然要经过网关,这个网关的IP地址就是VTEP IP
# 在网络上有个概念叫arp-proxy,一般用途是为了保护内部私有网络,外界的所有应答都有网关来代替回答(可以理解为门卫)
# 在这里外界只需要你的VTEP IP即可,对端报文到达VTEP这个网关后自己在内部走L2进行转发
# 因此VXLAN报文中的目的IP就是对端的网关 (VTEP IP),而源地址自然也是自己的网关 (VTEP IP)