zoukankan      html  css  js  c++  java
  • VXLAN简介(摘抄)

    VXLAN简介

    VXLAN:Virtual eXtensible Local Area Network的缩写,虚拟扩展局域网,现代数据中心的的一种网络虚拟化技术,即在传统的三层IP网络上虚拟出一张二层的叠加网络,本质上是一种大二层的虚拟网络技术,引入一个UDP格式封装的外层隧道作为数据的链路层,原有数据报文内容作为隧道净负荷来传输,使得净荷数据可以轻松在二三层网络中传播。

    VXLAN引入三层IP组播替代以太网广播;

    Open vSwitch是基于软件实现的支持VxLan协议的虚拟网络交换机。

    VXLAN协议标准是IETF发布的RFC 7348文档。

    协议历史

    协议最早由VMware,Arisa网络,思科提出,后期加入华为,博科,Red Hat,Intel等公司支持,IETF 与2012年8月发布第一个RFC Internet Draft版本,最新的标准是2014年8月RFC 7348

    VxLan解决的问题

    VxLan的提出,主要是云计算、现代数据中心的发展要求,主要关注的是现代数据中心的网络基础设施问题。

    • STP协议和VLAN的限制。STP解决二层帧循环转发问题,不支持多路径,无法解决服务器内部虚拟机通信问题;VLAN支持将二层网络划分为最大4094个虚拟局域网(0和4095保留,VLAN ID只有12位),在虚拟化、STP限制以及多租户环境等原因影响下,VLAN不能满足;
    • 多租户环境。公有云服务为多租户提供服务,采用二层或者三层网络隔离租户网络流量。二层网络使用VLAN,在租户过多时,VLAN不够用;三层网络隔离方案因为多用户使用相同的地址集合,需要云服务商提供特有的隔离方法,例如要求所有租户使用IP隔离网络而不是二层,或者使用非IP的3层协议用于内部虚拟机之间通信;
    • ToR交换机MAC地址表大小的限制。典型的ToR交换机可以连接24-48个物理服务器,由于虚拟化,单个物理服务器将有多个虚拟机,实际上等于连接更多的服务器,容易造成MAC表溢出,如果溢出,交换机停止学习新地址直到MAC表有空间;
    • 虚拟机迁移的需要。为保证业务的高可用性,需要迁移虚拟机到新的服务器上,例如跨数据中心,此时需要保证虚拟机IP地址和MAC地址不变,需要业务网络是一个二层网络,并且网络本身具备多路径的冗余备份和可靠性。

    VXLAN协议说明

    • VXLAN报文格式:原有的以太网帧外部加上新的外部以太网头部、IP头部、UDP头部以及新增的VXLAN头部,VXLAN头部只有8字节,其中24位用来标识VXLAN,称为VNI;
    • VTEP:完成VXLAN报文的封装和解封装,VTEP与物理网络相连,分配有物理网络的IP地址,虚拟机中的数据报经过其封装可在Internet上传播,VTEP收到数据报,解封装,按照一定规则交付给后端的虚拟机;
    • VXLAN网关:实现VXLAN虚拟网络之间以及虚拟网络与物理网络之间的通信;
    • VXLAN是在现有的三层网络上覆盖二层网络,单个二层覆盖网络称为一个VXLAN分段;
    • 只有在相同的VXLAN分段的虚拟机之间可以相互通信;
    • VXLAN分段使用24位标识ID号,称为VNI(VXLAN Network Identifier),允许将近1600万的VXLAN分段;
    • VXLAN分段也可以称为VXLAN Overlay Network 覆盖网络,VXLAN是隧道协议,采用三层IP数据包分装VXLAN头部信息和虚拟机产生的MAC帧,VTEP(VXLAN Tunnel End Point)负责填充和解包,虚拟机无法看到VXLAN协议包;VETP可以采用物理的交换机和服务器实现,也可以使用Hypervisor等软件实现;
    • VXLAN控制机制负责VETP IP到虚拟机MAC地址映射学习,典型的有data plane learning,其它还有central autority-/directory-based lookup等;

    VXLAN应用

    虚拟机到虚拟机之间的通信

    虚拟机不知道VXLAN,虚拟机A与不同主机的虚拟机B通信时,过程如下:

    • A与传统一样,发送原始MAC帧给服务器B
    • A所在的服务器主机的VTEP-A完成以下操作: 
      • 寻找虚拟机A所在的VNI(也就是VXLAN号)
        • 判断虚拟机B是否和A的VNI相同,也就判断是否在同一个VXLAN内;
        • 判断是否存在虚拟机B的MAC地址和对应的主机的VTEP-B的映射;
        • 以上条件符合,在A发送的原始MAC帧外面加上外部MAC地址,外部IP头部,UDP头部以及VXLAN头部,组成新的MAC帧,发给远端的VTEP-B;
    • B所在的VTEP-B收到A的VTEP-A发的VXLAN帧,完成如下操作: 
      • 验证VNI是否有效;B的MAC地址是否在VNI中;
      • 以上条件符合,VTEP-B解包VXLAN帧,除去加的VXLAN头部信息,还原原始的MAC帧,发送给目的虚拟机B,这个过程中对虚拟机B透明;
      • VTEP-B学习地址,将内部原始mac帧的源地址MAC:A和外部IP地址VTEP-A映射记录下,当需要响应虚拟机A时,不用再通过发广播去寻找

     广播通信、多播:

    当虚拟机发送ARP广播帧请求时,在non-VXLAN环境下,该帧将被在同一个VLAN多个交换机中广播;对于VXLAN数据包只在其所在的IP多播组广播,为实现该控制需要VXLAN VNI 与 IP多播组的映射关系。VTEP负责维护该映射,提供IGMP管理成员加入或离开;

    对现有设施要求

    • VXLAN主机间IP连通
    • 交换机支持IP多播(组播),支持多播路由协议支持(例如PIM-SM),打开IGMP Snooping功能;
    • VXLAN网络需要分配一个(224.0.0.0-239.255.255.255)IP多播地址
    • VTEP不能对VXLAN包进行分片,路由器对超过帧大小限制的VXLAN包进行分片,目的VTEP对于分片的VXLAN包直接扔掉。为避免分片,物理网络的MTU值应该和VXLAN包适应;

    VXLAN帧格式

    IPv4 VXLAN帧格式由以下几部分组成:其中前四个是VXLAN协议新增的,其余和以太网帧格式一致;

    • Outer Ethernet Header:外部以太网头部,格式和传统的以太网格式一致
    • Outer IPv4 Header:外部IPv4头部
    • Outer UDP Header: 外部UDP头部
    • VXLAN Header:VXLAN头部,8字节长度
    • Inner Ehternet Header:内部以太网头部
    • Payload:以太网数据负荷,也就是实际的数据,这里不包括原始帧的FCS字段
    • Frame Check Sequence:新的帧检测序列,检测Outer以太网帧

    Outer Ethernet Header:

    • Outer Destination MAC Address:6字节,外部目的MAC地址
    • Outer Source MAC Address:6字节,外部源地址
    • OptnlEthtype = C-Tag 802.1Q:2字节,可选,802.1Q,表明支持VLAN
    • Outer.VLAN Tag Information:2字节,支持VLAN时,VLAN ID等信息
    • EtherType=0x0800:以太网数据类型,0x0800表示IPV4数据包

    Outer IPv4 Header:

    参见IPv4协议格式,主要包括IP数据类型(TCP、UDP)、源IPv4地址、目的IPv4地址;

    • Source IP address:源IP地址,VTEP的源地址
    • Destination IP address:目的IP地址,可以是单播地址或多播地址,单播地址时填的是目的方的VTEP地址

    Outer UDP Header:

    • Source Port:2字节,源端口,推荐使用inner Ethernet frame header的hash值,端口号范围49152-65525
    • Dest Port : 2字节,VXLAN Port,IANA已经指定4789作为VXLAN UDP默认端口
    • UDP Length:2字节,UDP首部和数据长度
    • UDP Checksum:2字节,UDP校验和,校验和可以设置为0,这样不在校验,当设置不为0时,UDP报文将被校验

    VXLAN Header:

    • Flag:1字节,其中第5 比特位设为1,表明是VNI有效,其余保留,设为0
    • Reserved 1:3字节,保留字段,设置为0
    • VXLAN Network Identifier/Segment ID(VNI):3字节,VXLAN网络号,不同的VNI无法通信
    • Reserved 2:1字节,保留字段,必须设为0

    VXLANARP协议过程

    例如有两个虚拟机VM1,VM2,其中VM1部署在服务器server1,VM2部署在服务器Server2;server1支持VXLAN协议,由VTEP1实现功能, server2 也只支持VXLAN协议,由VTEP2实现功能;

    ARP请求:

    • VM1发送ARP请求,请求中包含自身MAC地址,目标地址全部设为1,广播给同一VLAN
    • server1的VTEP1负责封装上面请求报文,封装的头部填写目标IP地址为多播IP,源IP为VTEP1的IP地址
    • 报文在VXLAN中被多播,到达VTEP2所在的本地网络
    • VTEP2对报文进行解封装,学习 VM1 MAC-VTEP的映射关系,并在本地局域网广播报文

     ARP应答:

    • VM2准备ARP响应报文向VM1发送
    • VTEP2收到该报文,封装IP单播报文中,根据学习到的映射表,填充VTEP 1的IP地址和MAC地址,单播发送给VTEP1
    • VTEP1收到单播报文,学习VM2-VTEP2之间的地址映射,并解封装转发报文给VM1
    • VM1收到ARP应答报文,ARP交互结束

    VXLAN报文转发

    VM之间通信模式三种:同一个VXLAN下的不同VM,不同VNI下的跨网通信,VXLAN和非VXLAN之间访问。其中第一种通过二层网关支持,后两种需要三层网关支持。

     

     

     

  • 相关阅读:
    因为这几个TypeScript代码的坏习惯,同事被罚了500块
    如何设计好分布式数据库,这个策略很重要
    线程、多线程和线程池,看完这些你就能全部搞懂了
    章方:征服耶鲁教授的算法大神程序媛
    从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的
    c# 优化代码的一些规则——用委托表示回调[五]
    mysql 重新整理——索引优化explain字段介绍一 [九]
    mysql 重新整理——索引优化explain简单介绍 [八]
    mysql 重新整理——索引简介[七]
    mysql 重新整理——七种连接join连接[六]
  • 原文地址:https://www.cnblogs.com/good-study/p/10329462.html
Copyright © 2011-2022 走看看