精华内容
下载资源
问答
  • H3C基于多租户的云计算Overlay网络 VXLAN_IS-IS技术 VXLAN技术基础 VXLAN技术知识点梳理 数据中心Overlay解决方案汇报
  • H3C VXLAN详细配置知道

    2017-10-22 10:06:52
    详细介绍了 华三VXLAN的概念,配置指导,配置案例,以及使用场景,适合数据中心SDN虚拟化以及小型局域网整网设计应用的技术
  • H3C VXLAN实验

    千次阅读 2020-01-11 20:19:29
    1.如图在HCL模拟器中搭建好拓扑 2.说明:R1,R2,R3(Underlay)网络,也就是底层网络,底层网络用OSPF协议,实现LookBack地址之间可达 左侧部分:SW1的G1/0/1端口...3.R1具体配置如下: [R1]display CU version 7.1...

    1.如图在HCL模拟器中搭建好拓扑
    在这里插入图片描述
    2.说明:R1,R2,R3(Underlay)网络,也就是底层网络,底层网络用OSPF协议,实现LookBack地址之间可达
    左侧部分:SW1的G1/0/1端口使用Trunk放行业务VLAN实现与R1的互联,R1的G0/1端口使用子接口的当时与SW1互联,右侧部分
    和左侧配置相同。

    3.R1具体配置如下:
    [R1]display CU

    version 7.1.075, Alpha 7571

    sysname R1

    ospf 1 router-id 1.1.1.1
    area 0.0.0.0
    network 1.1.1.1 0.0.0.0
    network 10.0.0.0 0.0.0.3

    vlan 1

    l2vp enable

    vsi vxlan
    vxlan 10
    tunnel 1

    interface LoopBack0
    ip address 1.1.1.1 255.255.255.255

    interface GigabitEthernet0/0
    port link-mode route
    combo enable copper
    ip address 10.0.0.1 255.255.255.252

    interface GigabitEthernet0/1
    port link-mode route
    combo enable copper

    interface GigabitEthernet0/1.10
    vlan-type dot1q vid 100
    xconnect vsi vxlan
    注意:R1,R3配置基本相同

    4.Vxlan手动建立成功
    在这里插入图片描述
    5.在PC1(192.168.1.1)上ping PC2地址(192.168.1.2)
    在这里插入图片描述
    6.使用Wireshark抓包软件进一步查看VXLAN的报文在这里插入图片描述
    特别说明:没有抓到ARP的包,只抓到了ICMP的

    展开全文
  • VxLAN 集中式模型介绍 VXLAN网络基础架构 基于VxLAN的OverLay网络模型 VXLAN网络构建 VXLAN二层转发配置 如果是Vxlan ip GW呢? 集中式VXLAN IP网关配置举例 转发流程是如何呢? 加入控制器后 OVSDB-VTEP泛洪代理...
  • H3C-VXLAN,H3设备的基础配置,其中里面有一部分扫盲配置,并带有相关基础配置,包括vxlan运行机制、配置vxlan
  • h3c和思科融合Vxlan

    2019-03-01 15:12:11
    H3C VSR2000 或者msr36-20配置Vxlan 开启L2×××能力 [SH6800]l2*** enable 创建VSI实例***a和Vxlan10011 [SH6800]vsi ***a [SH6800-vsi-***a]vxlan 10011 [SH6800-vsi-***a-vxlan-10011]qui [SH6800-...

    h3c和思科融合Vxlan

    cisco N9k配置

    N9k-1

    vlan 11
      vn-segment 10011
    
    interface Vlan11
      no shutdown
      ip address 11.1.1.254/24
      ip router ospf 1 area 0.0.0.0
      hsrp version 2
      hsrp 11 
        preempt 
        ip 11.1.1.252
    
    interface nve1
      no shutdown
      source-interface loopback0
      member vni 10011
        ingress-replication protocol static
          peer-ip 2.2.2.7
    
    interface Ethernet1/2
      no switchport
      ip address 1.1.1.1/24
      ip router ospf 1 area 0.0.0.0
      no shutdown
    
    interface Ethernet1/1
      switchport mode access
        switch acc vlan 11
    
    interface loopback0
      ip address 2.2.2.1/32
      ip router ospf 1 area 0.0.0.0
    line console
    line vty
    router ospf 1
      router-id 2.2.2.1

    H3C VSR2000 或者msr36-20配置Vxlan

    开启L2×××能力

    [SH6800]l2*** enable 

    创建VSI实例***a和Vxlan10011

    [SH6800]vsi ***a 
    [SH6800-vsi-***a]vxlan 10011 
    [SH6800-vsi-***a-vxlan-10011]qui
    [SH6800-vsi-***a]quit

    配置接口loopback0 地址,作为隧道的源端地址

    [SH6800]interface LoopBack 0 
    [SH6800-LoopBack0]ip add 2.2.2.7 255.255.255.255
    [SH6800-LoopBack0]quit

    在SH6800和N9K-1之间建立Vxlan隧道

    • 创建模式为Vxlan的隧道接口Tunnel1
    • 指定隧道的源端地址为本地接口loopback0的地址
    • 指定隧道目的端地址N9K-1的loopback0地址
    [SH6800]interface Tunnel 1 mode vxlan 
    [SH6800-Tunnel1]source 2.2.2.7 
    [SH6800-Tunnel1]destination 2.2.2.1 
    [SH6800-Tunnel1]quit

    配置Tunnel1与Vxlan10011关联

    [SH6800]vsi ***a
    [SH6800-vsi-***a]vxlan 10011
    [SH6800-vsi-***a-vxlan-10011]tunnel 1
    [SH6800-vsi-***a-vxlan-10011]quit
    [SH6800-vsi-***a]quit

    在接入服务器接口上与VSI实例***a关联。

    #当只有一个vlan通过的时候可以用这个方法。这里只有vlan11。
    [SH6800]interface GigabitEthernet 1/0
    [SH6800-GigabitEthernet1/0]port link-mode route 
    [SH6800-GigabitEthernet1/0]xconnect vsi ***a 
    [SH6800-GigabitEthernet1/0]quit
    
    #当有多个vlan通过Vxlan通信,就需要匹配vlan
    [SH6800]interface GigabitEthernet 1/0
    [SH6800-GigabitEthernet1/0]port link-mode route 
    [SH6800-GigabitEthernet1/0]quit
    
    [SH6800]interface GigabitEthernet 1/0.1 
    #vid之后跟的是匹配的vlan
    [SH6800-GigabitEthernet1/0.1]vlan-type dot1q vid 11 
    #vsi之后跟的是相应的vsi实例
    [SH6800-GigabitEthernet1/0.1]xconnect vsi ***a
    [SH6800-GigabitEthernet1/0.1]quit
    
    #例如还有一个vlan12 
    [SH6800]interface GigabitEthernet 1/0.2
    [SH6800-GigabitEthernet1/0.2]vlan-type dot1q vid 12
    [SH6800-GigabitEthernet1/0.2]xconnect vsi ***a12
    [SH6800-GigabitEthernet1/0.2]quit
    
    #以下是6800的接口与VSI实例关联方法
    # 在接入服务器的接口HundredGigE1/0/1上创建以太网服务实例1000,该实例用来匹配VLAN 2的数据帧。
    [SwitchC] interface hundredgige 1/0/1
    [SwitchC-HundredGigE1/0/1] service-instance 1000
    [SwitchC-HundredGigE1/0/1-srv1000] encapsulation s-vid 2
    # 配置以太网服务实例1000与VSI实例***a关联。
    [SwitchC-HundredGigE1/0/1-srv1000] xconnect vsi ***a
    [SwitchC-HundredGigE1/0/1-srv1000] quit
    [SwitchC-HundredGigE1/0/1] quit 
    

    H3C设备验证VTEP设备

    查看tunnel 1 接口信息

    [SH6800]display interface Tunnel 1 
    Tunnel1
    Current state: UP
    Line protocol state: UP
    Description: Tunnel1 Interface
    Bandwidth: 64kbps
    Maximum Transmit Unit: 64000
    Internet protocol processing: disabled
    Output queue - Urgent queuing: Size/Length/Discards 0/100/0
    Output queue - Protocol queuing: Size/Length/Discards 0/500/0
    Output queue - FIFO queuing: Size/Length/Discards 0/75/0
    Last clearing of counters: Never
    Tunnel source 2.2.2.7, destination 2.2.2.1
    Tunnel protocol/transport UDP_VXLAN/IP
    Last 300 seconds input rate: 78 bytes/sec, 624 bits/sec, 0 packets/sec
    Last 300 seconds output rate: 0 bytes/sec, 0 bits/sec, 0 packets/sec
    Input: 1735 packets, 162159 bytes, 0 drops
    Output: 440 packets, 43082 bytes, 0 drops

    查看VSI信息,可以看到VSI内创建的VXLAN、与VXLAN关联的VXLAN隧道、与VSI关联的以太网服务实例等信息。

    [SH6800]display l2*** vsi verbose 
    VSI Name: ***a
      VSI Index               : 0
      VSI State               : Up
      MTU                     : 1500
      Bandwidth               : -
      Broadcast Restrain      : -
      Multicast Restrain      : -
      Unknown Unicast Restrain: -
      MAC Learning            : Enabled
      MAC Table Limit         : -
      MAC Learning rate       : -
      Drop Unknown            : -
      Flooding                : Enabled
      Statistics              : Disabled
      VXLAN ID                : 10011
      Tunnels:
        Tunnel Name          Link ID    State  Type
        Tunnel1              0x5000001  Up     Manual
      ACs:
        AC                               Link ID    State   
        GE1/0                            0          Up    

    验证主机ping

    VPCS> sh ip 
    
    NAME        : VPCS[1]
    IP/MASK     : 11.1.1.3/24
    GATEWAY     : 11.1.1.252
    DNS         : 
    MAC         : 00:50:79:66:68:0b
    LPORT       : 20000
    RHOST:PORT  : 127.0.0.1:30000
    MTU         : 1500
    
    VPCS> ping 11.1.1.1
    
    84 bytes from 11.1.1.1 icmp_seq=1 ttl=64 time=52.298 ms
    84 bytes from 11.1.1.1 icmp_seq=2 ttl=64 time=43.287 ms
    84 bytes from 11.1.1.1 icmp_seq=3 ttl=64 time=56.294 ms
    84 bytes from 11.1.1.1 icmp_seq=4 ttl=64 time=54.209 ms
    84 bytes from 11.1.1.1 icmp_seq=5 ttl=64 time=44.216 ms
    
    VPCS> ping 11.1.1.252
    
    84 bytes from 11.1.1.252 icmp_seq=1 ttl=255 time=42.977 ms
    84 bytes from 11.1.1.252 icmp_seq=2 ttl=255 time=128.824 ms
    84 bytes from 11.1.1.252 icmp_seq=3 ttl=255 time=29.194 ms
    84 bytes from 11.1.1.252 icmp_seq=4 ttl=255 time=39.773 ms
    84 bytes from 11.1.1.252 icmp_seq=5 ttl=255 time=67.956 ms
    

    转载于:https://blog.51cto.com/506554897/2356776

    展开全文
  • 解读VXLAN----新华三H3C

    2020-12-19 15:15:13
    原文链接:http://www.h3c.com/cn/d_201811/1131076_30005_0.htm 1 起源-Origin 传统的交换网络解决了二层的互通及隔离问题,这个架构发展了几十年已经相当成熟。而随着云时代的到来,却渐渐暴露出了一些主要的...

    原文链接:http://www.h3c.com/cn/d_201811/1131076_30005_0.htm

     

    1 起源-Origin

    传统的交换网络解决了二层的互通及隔离问题,这个架构发展了几十年已经相当成熟。而随着云时代的到来,却渐渐暴露出了一些主要的缺点。

    多租户环境和虚拟机迁移

    为了满足在云网络中海量虚拟机迁移前后业务不中断的需要,要求虚拟机迁移前后的IP不能变化,继而要求网络必须是大二层结构。传统的二层网络技术,在链路使用率、收敛时间等方面都不能满足需要。

    VLAN的局限

    随着云业务的运营,租户数量剧增。传统交换网络用VLAN来隔离用户和虚拟机,但理论上只支持最多4K个标签的VLAN,已无法满足需求。

    2 竞争-Competition

    为了解决上述局限性,不论是网络设备厂商,还是虚拟化软件厂商,都提出了一些新的Overlay解决方案。

    网络设备厂商,基于硬件设备开发出了EVI(Ethernet Virtualization Interconnect)、TRILL(Transparent Interconnection of Lots of Links)、SPB(Shortest Path Bridging)等大二层技术。这些技术通过网络边缘设备对流量进行封装/解封装,构造一个逻辑的二层拓扑,同时对链路充分利用、表项资源分担、多租户等问题采取各自的解决方法。此类技术一般要求网络边缘设备必须支持相应的协议,优点是硬件设备表项容量大、转发速度快。

    虚拟化软件厂商,从自身出发,提出了VXLAN(Virtual eXtensible LAN)、NVGRE(Network Virtualization Using Generic Routing Encapsulation)、STT(A Stateless Transport Tunneling Protocol for Network Virtualization)等一系列技术。这部分技术利用主机上的虚拟交换机(vSwitch)作为网络边缘设备,对流量进行封装/解封装。优点是对网络硬件设备没有过多要求。

    通过表1,我们可以看到这几种Overlay技术对比。 其中,虚拟化软件厂商提出的Overlay技术由于天然支持vSwitch,在云计算网络中更有优势。

    表1 各种Overlay技术比较

    通过表2,可以看到VXLAN、NVGRE、STT这三种技术的区别。 与NVGRE相比,VXLAN不需要改变报文结构即可支持L2~L4的链路负载均衡;与STT相比,VXLAN不需要修改传输层结构,与传统网络设备完美兼容。由此,VXLAN脱颖而出,成为了SDN环境下的主流Overlay技术。

    表2 VXLAN、NVGRE及STT对比

    VXLAN是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,采用MAC-in-UDP的报文封装模式,可实现二层网络在三层范围内进行扩展,满足数据中心大二层虚拟机迁移的需求。在VXLAN网络中,属于相同VXLAN的虚拟机处于同一个逻辑二层网络,彼此之间二层互通;属于不同VXLAN的虚拟机之间二层隔离。

    VXLAN最初只在虚拟交换机实现,但虚拟交换机天然具有转发性能低下的缺点,并不适合大流量的网络环境。于是,各硬件厂商也纷纷推出支持VXLAN的硬件产品,与虚拟交换机一起,共同成为网络边缘设备,最终使VXLAN技术能够适应各种网络。

    3 数据平面-Data Plane

    3.1 VXLAN基本概念

     

    图1 VXLAN网络基本模型

    • VNI(VXLAN Network Identifier,VXLAN网络标识符):VXLAN通过VXLAN ID来标识,其长度为24比特。VXLAN 16M个标签数解决了VLAN标签不足的缺点。

    • VTEP(VXLAN Tunnel End Point,VXLAN隧道端点):VXLAN的边缘设备。VXLAN的相关处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN、基于VXLAN对数据帧进行二层转发、封装/解封装报文等。VTEP可以是一台独立的物理设备,也可以是虚拟机所在服务器的虚拟交换机。

    • VXLAN Tunnel两个VTEP之间点到点的逻辑隧道。VTEP为数据帧封装VXLAN头、UDP头、IP头后,通过VXLAN隧道将封装后的报文转发给远端VTEP,远端VTEP对其进行解封装。

    • VSIVirtual Switching Instance,虚拟交换实例):VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例。VSI可以看作是VTEP上的一台基于VXLAN进行二层转发的虚拟交换机,它具有传统以太网交换机的所有功能,包括源MAC地址学习、MAC地址老化、泛洪等。VSI与VXLAN一一对应。

    • VSI-Interface(VSI的虚拟三层接口):类似于Vlan-Interface,用来处理跨VNI即跨VXLAN的流量。VSI-Interface与VSI一一对应,在没有跨VNI流量时可以没有VSI-Interface。

    图2 VTEP中的对应关系

    现有VTEP设备中,一般用“接口+VLAN”的方式来区分流量与VSI的对应关系,而VSI与VXLAN Tunnel之间既可以建立全连接,也可以根据需求进行关联。

    3.2 VXLAN帧格式

    3.2.1 RFC7348封装

    RFC7348规定了VXLAN报文的格式:

    图3 VXLAN报文一般封装

    • Outer MAC Header:封装外层以太头,14字节,如果有VLAN TAG则为18字节。其中,源MAC地址(Outer Source MAC Address)为源VM所属VTEP的MAC地址,目的MAC地址(Outer Destination MAC Address)为到达目的VTEP的路径上下一跳设备的MAC地址。类型字段为0x0800,指示内层封装的是IP报文。

    • Outer IP Header:封装外层IP头,20字节。其中,源IP地址(Outer Source IP Address)为源VM所属VTEP的IP地址,目的IP地址(Outer Destination IP Address)为目的VM所属VTEP的IP地址。协议字段为0x11,指示内层封装的是UDP报文。

    • UDP Header:UDP报文头,8字节。其中,UDP目的端口号(UDP Destination Port)固定为4789,指示内层封装报文为VXLAN报文。UDP源端口号(UDP Source Port)为随机任意值,可以用于VTEP之间多路径负载分担的计算。

    • VXLAN Header:VXLAN协议新定义的VXLAN头,8字节。

    • Flags8 bit,RRRRIRRR。“I”位为1时,表示VXLAN头中的VXLAN ID有效;为0,表示VXLAN ID无效。“R”位保留未用,设置为0。

    • VXLAN ID(VNI:24 bit,用于标识一个单独的VXLAN网络。

    • Reserved:分别为24 bit和8 bit。保留位。

    • Original L2 Frame:原始以太网报文。

    从报文的封装可以看出,VXLAN头和原始二层报文是作为UDP报文的载荷存在的。在VTEP之间的网络设备,只需要根据Outer MAC Header和Outer IP Header进行转发,利用UDP Source Port进行负载分担,这一过程,与转发普通的IP报文完全相同。这样,除了VTEP设备,现网的大量设备无需更换或升级即可支持VXLAN网络。

    不过,新增加的VXLAN报文封装也引入了一个问题,即MTU值的设置。

    一般来说,虚拟机的默认MTU为1500 Bytes,也就是说原始以太网报文最大为1500字节。这个报文在经过VTEP时,会封装上50字节的新报文头(VXLAN头8字节+UDP头8字节+外部IP头20字节+外部MAC头14字节),这样一来,整个报文长度达到了1550字节。而现有的VTEP设备,一般在解封装VXLAN报文时,要求VXLAN报文不能被分片,否则无法正确解封装。这就要求VTEP之间的所有网络设备的MTU最小为 1550字节。

    如果中间设备的MTU值不方便进行更改,那么设置虚拟机的MTU值为1450,也可以暂时解决这个问题。

    3.2.2 VXLAN GPE封装

    RFC7348中规定的VXLAN内部的载荷报文必须是以太网报文,这就限制了VXLAN协议的使用范围。为了让VXLAN能够更广泛的支持其他协议报文的Overlay传输,RFC草案正在探索VXLAN Generic Protocol Encapsulation (GPE)即VXLAN通用协议封装。

    图4 VXLAN报文GPE封装

    GPE封装使用了原FRC7348中规定的一些保留位。

    • Version(Ver):指示VXLAN GPE协议版本。初始值为0。

    • Next Protocol Bit (P bit): 如果P位为1,则Next Protocol域有效。

    • BUM Traffic Bit (B bit): 如果B位为1,则表示VXLAN内部的封装报文为BUM报文。

    • OAM Flag Bit (O bit): 如果O位为1,则表示VXLAN内部的封装报文为OAM报文。

    • Next Protocol: 8位。表示VXLAN内部的封装报文的协议格式。

    VXLAN的GPE封装还处于草案阶段,读者只需要了解VXLAN协议还在不断的发展中,暂时不必深究GPE封装的格式和应用。

    3.3 BUM报文转发

    BUM(Broadcast, Unknown-unicast, Multicast)即广播、未知单播、组播流量。根据对泛洪流量的复制方式不同可分为单播路由方式(头端复制)和组播路由方式(核心复制)两种。

    3.3.1 单播路由方式泛洪(头端复制)

    图5 单播路由方式泛洪(头端复制)

    在头端复制方式下,VTEP负责复制报文,采用单播方式将复制后的报文通过本地接口发送给本地站点,并通过VXLAN隧道发送给VXLAN内的所有远端VTEP。

    如图5所示,当VTEP 1上的VM 1发出BUM报文后,VTEP 1判断数据所属的VXLAN,通过该VXLAN内所有本地接口和VXLAN Tunnel转发报文。通过VXLAN Tunnel转发报文时,封装VXLAN头、UDP头和IP头,将泛洪报文封装于单播报文中,发送到VXLAN内的所有远端VTEP。

    远端VTEP收到VXLAN报文后,解封装报文,将原始数据在本地站点的VXLAN内泛洪。为避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。

    3.3.2 组播路由方式泛洪(核心复制)

    图6 组播路由方式泛洪(核心复制)

    组播路由方式的组网中同一个VXLAN内的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)在IP网络上为该组播建立组播转发表项,VTEP上相应生成一个组播隧道。

    如图6所示,当VTEP 1上的VM 1发出BUM报文后,VTEP 1不仅在本地站点内泛洪,还会为其封装组播目的IP地址,封装后的报文根据已建立的组播转发表项转发到IP网络。

    在组播报文到达IP网络中的中间设备时,该设备根据已建立的组播表项对报文进行复制并转发。

    远端VTEP(VTEP 2和VTEP 3)接收到报文后,解封装报文,将原始的数据帧在本地站点的指定VXLAN泛洪。为了避免环路,远端VTEP从VXLAN隧道上接收到报文后,不会再将其泛洪到其他的VXLAN隧道。

    由于泛洪流量使用了组播技术,所以整个组网中的网络设备需要支持组播路由协议(如PIM等)来建立组播路径以便组播报文转发。

    3.4 单播报文转发流程

    下面,我们用实际的例子帮助大家理解VXLAN是如何完成报文转发的,其中,BUM报文采用头端复制的方法进行泛洪。

    3.4.1 同VNI单播报文转发流程

    图7 ARP请求报文转发流程

    • ARP请求报文转发流程

    1. VM 1与VM3的IP地址在同一网段。VM 1想要与VM 3进行通信,但发现没有VM 3的MAC地址,于是发起VM 3的ARP请求报文。ARP请求报文的源IP是VM 1的IP,目的IP是VM 3的IP,源MAC是VM 1的MAC,目的MAC则是全0字段,表示希望获得VM 3的MAC信息。外层封装以太网头,其中目的MAC为全F,表示这是一个广播报文。

    2. Leaf A收到了VM 1发来的ARP请求报文,根据其入端口和VLAN信息,判断出这个报文应该匹配VXLAN 10。将VXLAN、MAC、入端口和VLAN信息写入相应的VSI MAC表中。

    3. Leaf A发现ARP请求报文是一个广播报文,于是将这个报文在本地和远端所有VXLAN 10的端口进行广播。由于本流程广播采用头端复制的方法,Leaf A将给Leaf B和Spine C各发送一份VXLAN报文。Leaf A发送给Leaf B的报文,最外层是以太网头,接着是IP头,其中源IP是Leaf A的IP,目的IP是Leaf B的IP。再往内是UDP头和VXLAN头,其中VNI为10。最内层是VM 1的ARP请求报文。Leaf A发给Spine C的报文封装相同,不同之处在于外层目的IP是Spine C的IP,外层目的MAC根据下一跳不同而不同。

    4. Spine C收到Leaf A发来的报文,发现外层目的IP是自己,于是将其解封装。发现UDP的目的端口是4789,于是将UDP的上层报文进行VXLAN解封装处理。根据VXLAN报文的信息,将VXLAN、内部MAC、入端口等信息写入相应的VSI MAC表中。再发现内部原始二层报文是一个广播报文,根据水平分割的要求,不再往其他VTEP设备转发,只在本地的VXLAN 10端口内进行广播。由于Spine C上没有连接服务器,所以Spine C对这个报文不再进行后续处理,予以丢弃。

    5. 同样的,Leaf B也收到Leaf A发来的报文,解封装后,将VXLAN、内部MAC、入端口等信息写入相应的VSI MAC表中。由于报文是从Tunnel 1中收到的,所以端口信息为Tunnel 1。根据VXLAN 10的映射关系表,将原始二层报文在本地所有VXLAN 10端口进行广播.

    6. 最终VM 3收到了VM 1的ARP请求报文,将VM 1的IP和MAC对应关系写入自己的ARP表项,准备进行ARP应答。

    图8 ARP应答报文转发流程

    • ARP应答报文转发流程

    1. VM 3给VM 1发送ARP应答报文。ARP应答报文的源IP是VM 3的IP,目的IP是VM 1的IP,源MAC是VM 3的MAC,目的MAC是VM 1的MAC。外层封装以太网头,源MAC是VM 3的MAC,目的MAC是VM 1的MAC,表示这是一个单播报文。

    2. Leaf B收到VM3发来的ARP应答报文,根据其入端口和VLAN信息,判断出这个报文应该匹配VXLAN 10。将VXLAN、MAC、入端口和VLAN信息写入相应的VSI MAC表中。

    3. Leaf B发现ARP应答报文是一个单播报文,其目的MAC是MAC 1,于是在VXLAN 10中查找。发现MAC 1的条目存在,其对应的端口为VXLAN Tunnel 1,于是把原始报文进行VXLAN封装。最外层是以太网头,接着是IP头,其中源IP是Leaf B的IP,目的IP是Leaf A的IP。再往内是UDP头和VXLAN头,其中VNI为10。最内层是VM 3的ARP应答报文。

    4. Leaf A收到Leaf B发来的报文,发现外层目的IP是自己,于是将其解封装。发现UDP的目的IP是4789,于是将UDP的上层报文进行VXLAN解封装处理。根据VXLAN报文的信息,将VXLAN、内部MAC、入端口等信息写入相应的VSI MAC表中。发现原始二层报文的目的MAC为MAC 1,于是在VXLAN 10中查找,找到MAC 1的对应表项,将报文从对应端口发送出去。

    5. VM 1收到了VM 3的ARP应答报文,将VM 3的IP和MAC写入ARP表项中,完成了此次ARP的学习。

    图9 同VNI单播报文转发流程

    • 同VNI单播报文转发流程

    1. 在进行ARP报文的交互后,VM 1上已经存在VM 3的ARP表项,VM 3上也有VM 1的ARP表项。之后,VM 1和VM 3的通信就走单播报文转发流程了。

    2. VM 1将发给VM 3的单播报文发送出去。Leaf A收到VM 1发来的报文,发现其目的MAC为MAC 3,在VXLAN 10中查找到MAC 3后,进行VXLAN封装后通过Tunnel 1发送出去。

    3. Leaf B收到Leaf A发来的报文,解封装后在VXLAN 10中找到MAC 3表项,将其在对应的本地端口和VLAN中发出去。

    4. VM 3收到报文后,往VM 1发送单播报文的流程相同,在此不再赘述。

     

    3.4.2 跨VNI单播报文转发

    图10 跨VNI单播报文转发

    跨VNI的流量需要经过VXLAN L3 Gateway(VXLAN L3 Gateway用于转发跨VXLAN的流量,后文有详细介绍)来转发,这里采用集中式网关的模式进行说明。有关集中式网关和分布式网关的内容,在后文中会说明。

    由于是首次进行通信,且VM 1和VM 4处于不同网段。VM 1的网关VSI-Interface 10的IP为IP G10,MAC为MAC G10;VM4的网关VSI-Interface 20的IP为IP G20,MAC为MAC  G20;VSI-interface 10 和VSI-interface 20均在Spine C上。VM 1需要先发送ARP广播报文请求网关(VSI-Interface 10)的MAC,获得网关的MAC后,VM 1先将数据报文发送给网关;之后网关也将发送ARP广播报文请求VM 4的MAC,获得VM 4的MAC后,网关再将数据报文发送给VM 4。以上MAC地址学习的过程与同子网互通中MAC地址学习的流程一致,不再赘述。现在假设VM 1和VM 4均已学到网关的MAC、网关也已经学到VM 1和VM 4的MAC,下面就让我们来看下数据报文是如何从VM 1发送到VM 4的。

    1. VM 1先将报文发送给网关。报文的源MAC是VM 1的MAC,目的MAC是网关VSI-Interface 10的MAC,源IP是VM 1的IP,目的IP是VM 4的IP。

    2. Leaf A收到VM 1发来的报文,识别此报文属于VXLAN 10,查找目的MAC G10的表项,就报文进行VXLAN封装后从Tunnel 2发送出去。其中,VXLAN头中的VNI为10;外层源IP地址为Leaf A的IP,外层目的IP地址为Spine C的IP;外层源MAC地址为Leaf A的MAC,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

    3. Spine C收到Leaf A发来的报文,发现外层目的IP是自己,于是对报文进行解封装。解完封装后,Spine C发现原始二层报文的目的MAC为本机VSI-interface 10的MAC,目的IP是IP4,于是根据路由表查找IP 4的下一跳。发现一下跳为Leaf B,出接口为VSI-Interface 20。再查询ARP表项,并将原始二层报文的源MAC修改为VSI-interface 20的MAC,将目的MAC修改为VM 4的MAC。报文到达VSI-interface 20接口时,识别到需要进入VXLAN 20隧道,所以根据MAC表对报文进行封装。这里封装的VXLAN头中的VNI为20,外层源IP地址为Spine C的IP地址,外层目的IP地址为Leaf B的IP地址;外层源MAC地址为Spine C的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

    4. Leaf B收到Spine C发来的报文后,解封装,得到原始二层报文。在VXLAN 20内找到目的MAC为MAC 4的表项,并将报文从对应的接口和VLAN中发送出去。最终VM 4收到了来自VM 1的报文。

    5. VM 4发送给VM 1的过程与此类似,在此不再赘述。

    4 VXLAN三层网关-L3 Gateway

    VXLAN三层网关提供了VXLAN的三层转发功能,通过将VXLAN关联VSI虚接口(VXLAN虚接口)的方式实现,在VSI虚接口指定IP地址作为VXLAN内所有虚拟机的网关。

    VXLAN三层网关的主要功能:

    • 实现VXLAN内虚拟机与非VXLAN网络的互访

    • 完成跨VXLAN的虚拟机互访

    VXLAN三层网关根据其部署方式不同,有集中式和分布式两种。

    4.1 集中式三层网关

    图11 集中式三层网关

    集中式网关,即网关都集中在Spine设备。如图10所示,VSI-interface 10和VSI-interface 20都在Spine C设备上。所有跨VXLAN的流量,VXLAN与非VXLAN的互访流量都需要经过Spine。如图10中VM 1访问VM 4时,需要通过Spine设备,并经过两段VXLAN Tunnel,即VXLAN Tunnel 2和VXLAN Tunnel 3。而VM 1访问VM 2,也需要绕行Spine设备,同样需要历经从A到C和从C到A两次VXLAN封装。

    集中式网关的优点是流量均会经过Spine设备,能比较容易实现流量控制、自动引流等功能。缺点是Spine设备压力过大,不利于大规模部署。

    4.2 分布式三层网关

    在分布式VXLAN 三层网关方案中,每台VTEP设备都可以作为VXLAN IP网关,对本地站点的流量进行三层转发。分布式三层网关可以很好地解决流量集中而导致Spine设备压力过大的问题,在组网上也可以做到灵活扩展。

    图12 分布式三层网关

    在分布式网关组网中,Spine设备一般不是VTEP,仅为Underlay网络的一部分,承担普通IP报文的转发功能。

    VXLAN的三层网关分布在所有的Leaf设备上。如图12,Leaf A和Leaf B上均有相同的VSI-Interface。VM 1访问VM 4为跨网段通信,VXLAN流量只需要在Leaf A和Leaf B之间直接交互,而不用Spine设备参与。VM 1访问VM 2也是跨网段通信,由于VM 1和VM 2都直连在Leaf A下,VXLAN流量甚至不用出Leaf A就能完成互访。由此,我们能看出,分布式网关的部署方式大大减少了Spine设备的压力。

    4.3 ARP抑制

    ARP流量是数据网络中最常见的BUM报文。为了尽量减少ARP广播对带宽的影响,一般会在VXLAN网络中开启ARP抑制功能。

    ARP抑制方法有两种,我们称之为ARP代理和ARP代答。

    4.3.1 ARP代理

    在ARP代理模式中,VTEP设备会用网关自身的MAC地址进行回应ARP请求。

    图13 ARP代理模式

    1. VM 1想要和同网段的VM 3进行通信,于是VM 1发起了ARP请求寻找VM 3的MAC。

    2. Leaf A开启了ARP代理模式,于是将VSI-Interface 10的MAC回应给VM 1,VM 1上生成了IP 3和MAC G10对应的ARP表项。

    3. Leaf A若是没有VM 3的ARP表项,则会在VXLAN中的所有本地和远端端口广播。Leaf A将ARP请求报文的源MAC地址修改成本地地址MAC A,再封装成VXLAN报文发送出去。

    4. Leaf B收到Leaf A发来的报文,解封装后,将IP 1与MAC A的对应关系写进表项。发现请求的是本地直连网段的ARP,于是将ARP请求报文中的源MAC地址修改成本地VSI-Interface 10的MAC,发送出去。

    5. VM 3收到Leaf B发来的ARP请求报文,将IP 1和MAC G10的对应关系写进自己的ARP表。然后开始回送ARP应答报文,一路回送,最终Leaf A学到了IP 3与MAC B的对应表项。

    6. VM 1发送数据报文给VM 3,目的MAC地址为Leaf A上的网关MAC。Leaf A收到报文后,发现目的MAC地址是VSI-interface 10的MAC,于是进行三层查表转发。找到IP 3对应的表项,将目的MAC改为Leaf B的MAC后,再把报文进行VXLAN封装发送给Leaf B。

    7. Leaf B解封装VXLAN报文后,发现目的MAC是自己,于是进行三层查表转发。找到IP 3对应的表项,将目的MAC改为VM 3的MAC后,发送给VM 3。VM 3收到VM 1发来的数据报文,回送过程不再赘述。

    在ARP代理模式下,网关设备在回应ARP时,只会以自己的网关MAC进行回应,这就将所有下挂的服务器MAC进行了屏蔽,实现了ARP抑制的作用。而在数据转发时,由于报文的目的MAC是自己,所以每一跳都会进行三层查表转发。

    4.3.2 ARP代答

    在ARP代答模式中,VTEP设备会将用请求虚拟机的实际MAC回应ARP请求。

    图14 ARP代答模式

    ARP代答模式下的首次ARP请求和前文“同VNI单播报文转发流程”章节中的过程相同。在VM 1和VM 3已经在经过flood-learn的过程后,VM 1和VM 3已经可以正常通信,且沿途的设备均已建立正确的表项。

    此时,处于同一网段的VM2,同样想要和VM 3通信时,就需要发送ARP请求报文来寻找VM 3的MAC信息。Leaf A已经开启了ARP代答功能,且此时Leaf A上已经有了VM 3的IP和MAC对应表项,那么Leaf A会直接将表项中的MAC 3回应给VM 2,而不需要再经过一次泛洪。这样,ARP代答就可以大大减少ARP泛洪流量。而ARP代答若是配合可以在全网VTEP同步IP和MAC信息的VXLAN控制平面,那么ARP泛洪流量对带宽的影响可以降至最低。

    5 控制平面-Control Plane

    RFC7348只规定了VXLAN协议的数据平面,对控制平面未做任何要求。这样做的好处是,可以使各类设备无须做较大改动就能互相兼容。如前文所述,和传统VLAN网络数据平面一样,数据经过未知单播泛洪->MAC表项及ARP表项建立->单播转发的过程,我们称之为自学习模式。但自学习方式过于简单,其大量的泛洪报文以及无法智能调整的缺点,使得这样的控制平面构建方式不适合SDN网络。

    于是,各厂商纷纷探索更为先进的控制平面实现方法。

    5.1 控制平面的功能

    VXLAN控制平面必须实现的功能:

    • VTEP邻居发现。VXLAN网络中的VTEP数量众多,类型不同,纯手工配置VTEP非常困难也不利于大规模部署。VXLAN的控制平面应该具有自动发现VTEP邻居、自动建立VXLAN Tunnel、自动进行关联等功能。

    • 虚拟机信息同步。虚拟机信息同步主要是指MAC及ARP的同步。上线的虚拟机信息需要在各VTEP上同步,下线的虚拟机信息要能够在各VTEP上删除或老化,迁移的虚拟机信息要能够从旧VTEP转移到新VTEP。

    除了以上两点之外,不同的控制平面协议还能实现自动部署、灵活调整、策略下发等功能。

    5.2 基于Controller的控制平面

    SDN最大的特点就是转控分离,集中控制。按照这个指导思想,将控制功能单独剥离出来成为一个单独的设备便是很自然的事了。这个设备就是 Controller。

    Controller可以是一个或者一组硬件设备,也可以是一套软件。Controller与网络中所有设备建立连接,整个VXLAN网络的数据转发都由Controller来管理。Controller与设备连接的接口称为南向接口,可以使用OpenFlow、Netconf等协议;对用户提供服务的接口称为北向接口,也可以提供API以便与其他管理平台对接或进行深度开发。

    基于Controller的控制平面,其SDN网络的功能几乎都依赖于Controller本身的特性,根据Controller的不同,会有不同的实现方式和功能。

    图15 基于Controller的控制平面

    5.3 基于VXLAN-ISIS的控制平面

    基于VXLAN-ISIS的控制平面利用ENDP(Enhanced Neighbor Discovery Protocol,增强邻居发现协议)和VXLAN-ISIS两个协议共同完成VXLAN所需的自动建立隧道和信息同步功能。这种控制平面利用ISIS协议的可扩展特性来同步VXLAN建立和流量转发所需要的信息,是早期VXLAN控制平面探索时期的成果之一。

    5.4 基于EVPN的控制平面

    RFC7432(BGP MPLS-Based Ethernet VPN)定义了EVPN。EVPN架构是在现有的BGP VPLS(RFC4761)方案上,参考了BGP/MPLS L3 VPN(RFC4364)的架构提出的。

    EVPN构建在MP-BGP之上,依靠MP-BGP来传递EVPN信息。EVPN规定了控制平面需要完成的功能,数据平面可以选择MPLS、PBB和VXLAN中的任意一种。

    用VXLAN构建数据平面,用EVPN配合来构建控制平面,是当下较为流行的一种方式。

    图16 EVPN+VXLAN共同构建SDN网络

    EVPN利用MP-BGP实现邻居发现,自动发现VXLAN网络中的VTEP,并在有相同VXLAN ID的VTEP之间自动创建VXLAN隧道,自动关联VXLAN隧道和VXLAN。

    EVPN利用MP-BGP扩展路由类型报文完成MAC地址同步、主机路由同步。

    有关EVPN技术的更详细的内容,后续文章会有相应介绍。

    5.5 各控制平面特点

    最后,我们来比较一下各控制平面的特点。

    表3 各控制平面特点

    6 未来-Future

    VXLAN由于其简单的数据平面,良好的兼容性,已经成为了当下SDN Overlay技术的最好选择,但VXLAN未来还有很长的路要走。比如探索VXLAN GPE封装是一个方向,解决VXLAN隧道的QoS也是一个方向。而控制平面要做的更多,如何更好的实现按需定制,如何实现智能流量调整,如何更好的兼容异构设备等等。相信未来会给我们一个更好的答案。

    展开全文
  • H3C_CAS_VXLAN操作指导书 H3C_CAS_JMeter性能测试操作指导书 H3C_CAS_LDAP帐号同步特性说明书 H3C_CAS_NetFlow特性操作指导书 H3C_CAS_SRM操作指导书 H3C_CAS_DRX特性增强说明书 H3C_CAS_FT特性操作指导书 H3...
  • vxlan

    千次阅读 2016-01-17 15:39:08
    一、深入理解 VXLAN VXLAN 是非常新的一个 tunnel 技术,它是一个 L2 tunnel。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很的扩展性,同时解决了很多其它问题。 一,GRE tunnel ...

    转自:http://www.tuicool.com/articles/6zMJRn

    一、深入理解 VXLAN

    VXLAN 是非常新的一个 tunnel 技术,它是一个 L2 tunnel。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很的扩展性,同时解决了很多其它问题。

    一,GRE tunnel 的不足

    网络很多介绍 VXLAN 的文章都没有直接告诉你相比较 GRE tunnel,VXLAN 的优势在哪里,或者说 GRE tunnel 的不足在哪里。为了更好的了解 VXLAN,我们有必要看一下 GRE tunnel 的不足。

    在我前面写的介绍 GRE tunnel 的文章中,其实并不容易看出 GRE tunnel 的不足之处。根本原因是图中给出的例子不太好,只有两个网络的话 GRE tunnel 的不足凸显不出来,让我们看看有三个网络的情况如何用 GRE tunnel 互联,如下图所示:


    这下子就很明显了,要让这三个网络互联,我们需要建立三个 GRE tunnel。如果网络数量再增长,那么需要的 tunnel 数量更多。换句话说,GRE tunnel 的扩展性太差,从根本上讲还是因为它只是一个 point to point 的 tunnel。

    二,VLAN 的不足

    其实 VLAN 在某种程度上也可以看作一个 L2 over L2 的 tunnel,只不过它多了一个新的 VLAN header,这其中有12 bit 是 VLAN tag。所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。

    第二个不足就是,VLAN 这个所谓的 tunnel 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。同时,VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的。

    三,VXLAN 的引入

    VXLAN 是 Virtual eXtensible LANs 的缩写,所以顾名思义,它是对 VLAN 的一个扩展,但又不仅限于此。

    从数量上讲,它确实把 12 bit 的 VLAN tag 扩展成了 24 bit,所以至少暂时够用的了。从实现上讲,它是 L2 over UDP,它利用了 UDP 同时也是 IPv4 的单播和多播,可以跨 L3 边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活。

    四,VXLAN 的实现

    VXLAN 的配置可以参考内核文档 Documentation/networking/vxlan.txt,本人目前还没有环境测试,所以只能做一些代码分析了。

    Linux 内核中对 VXLAN 的实现是在 drivers/net/vxlan.c 源文件中,是由 Stephen Hemminger (iproute2 的维护者)完成的。代码质量相当高,所以可读性也很好,强烈推荐阅读一下。

    看代码之前先看 VXLAN 的头是一个怎样的结构,如下图所示(图片来自参考资料4):



    好了,现在我们可以看代码了。先看发送端,vxlan_xmit() 函数。首先需要说的是发送之前内核会检查目的地址,如果是L2 multicast,那么应该发送到 VXLAN group 组播地址,否则,如果 MAC 地址是已知的,直接单播到对应的 IP;如果未知,则广播到组播地址。代码如下,比文档还要好读。:-)

    C:
    1. static __be32 vxlan_find_dst ( struct vxlan_dev * vxlan, struct sk_buff * skb )
    2. {
    3.         const struct ethhdr * eth = ( struct ethhdr * ) skb - >data;
    4.         const struct vxlan_fdb * f;
    5.  
    6.         if ( is_multicast_ether_addr ( eth - >h_dest ) )
    7.                 return vxlan - >gaddr;
    8.  
    9.         f = vxlan_find_mac ( vxlan, eth - >h_dest ) ;
    10.         if ( f )
    11.                 return f - >remote_ip;
    12.         else
    13.                 return vxlan - >gaddr;
    14.  
    15. }

    剩下的基本上就是一层一层的往外添加头了,依次添加 VXLAN header,UDP header,IP header:

    C:
    1. //...
    2.         vxh = ( struct vxlanhdr * ) __skb_push ( skb, sizeof ( * vxh ) ) ;
    3.         vxh - >vx_flags = htonl ( VXLAN_FLAGS ) ;
    4.         vxh - >vx_vni = htonl ( vxlan - >vni << 8 ) ;
    5.  
    6.         __skb_push ( skb, sizeof ( * uh ) ) ;
    7.         skb_reset_transport_header ( skb ) ;
    8.         uh = udp_hdr ( skb ) ;
    9.  
    10.         uh - >dest = htons ( vxlan_port ) ;
    11.         uh - >source = htons ( src_port ) ;
    12.  
    13.         uh - >len = htons ( skb - >len ) ;
    14.         uh - >check = 0 ;
    15.  
    16.         __skb_push ( skb, sizeof ( * iph ) ) ;
    17.         skb_reset_network_header ( skb ) ;
    18.         iph             = ip_hdr ( skb ) ;
    19.         iph - >version     = 4 ;
    20.         iph - >ihl         = sizeof ( struct iphdr ) >> 2 ;
    21.         iph - >frag_off   = df;
    22.         iph - >protocol   = IPPROTO_UDP;
    23.         iph - >tos         = vxlan_ecn_encap ( tos, old_iph, skb ) ;
    24.         iph - >daddr       = dst;
    25.         iph - >saddr       = fl4. saddr ;
    26.         iph - >ttl         = ttl ? : ip4_dst_hoplimit ( & rt - >dst ) ;
    27.  
    28.         vxlan_set_owner ( dev, skb ) ;

    正如 GRE tunnel,比较复杂的地方是在接收端。因为 VXLAN 利用了 UDP,所以它在接收的时候势必需要有一个 UDP server 在监听某个端口,这个是在 VXLAN 初始化的时候完成的,即 vxlan_init_net() 函数:

    C:
    1. static __net_init int vxlan_init_net ( struct net * net )
    2. {
    3.     struct vxlan_net * vn = net_generic ( net, vxlan_net_id ) ;
    4.     struct sock * sk;
    5.     struct sockaddr_in vxlan_addr = {
    6.         . sin_family = AF_INET,
    7.         . sin_addr . s_addr = htonl ( INADDR_ANY ) ,
    8.     } ;
    9.     int rc;
    10.     unsigned h;
    11.  
    12.     /* Create UDP socket for encapsulation receive. */
    13.     rc = sock_create_kern ( AF_INET, SOCK_DGRAM, IPPROTO_UDP, & vn - >sock ) ;
    14.     if ( rc < 0 ) {
    15.         pr_debug ( "UDP socket create failed \n " ) ;
    16.         return rc;
    17.     }
    18.     /* Put in proper namespace */
    19.     sk = vn - >sock - >sk;
    20.     sk_change_net ( sk, net ) ;
    21.  
    22.     vxlan_addr. sin_port = htons ( vxlan_port ) ;
    23.  
    24.     rc = kernel_bind ( vn - >sock, ( struct sockaddr * ) & vxlan_addr,
    25.               sizeof ( vxlan_addr ) ) ;
    26.     if ( rc < 0 ) {
    27.         pr_debug ( "bind for UDP socket %pI4:%u (%d) \n ",
    28.               & vxlan_addr. sin_addr , ntohs ( vxlan_addr. sin_port ) , rc ) ;
    29.         sk_release_kernel ( sk ) ;
    30.         vn - >sock = NULL ;
    31.         return rc;
    32.     }
    33.  
    34.     /* Disable multicast loopback */
    35.     inet_sk ( sk ) - >mc_loop = 0 ;
    36.  
    37.     /* Mark socket as an encapsulation socket. */
    38.     udp_sk ( sk ) - >encap_type = 1 ;
    39.     udp_sk ( sk ) - >encap_rcv = vxlan_udp_encap_recv;
    40.     udp_encap_enable ( ) ;
    41.  
    42.     for ( h = 0 ; h <VNI_HASH_SIZE; ++ h )
    43.         INIT_HLIST_HEAD ( & vn - >vni_list [ h ] ) ;
    44.  
    45.     return 0 ;
    46. }

    由此可见内核内部创建 socket 的 API 是sock_create_kern(),bind() 对应的是 kernel_bind()。注意到这里实现了一个hook,vxlan_udp_encap_recv(),这个正是接收端的主要代码。

    发送端是一层一层往外填,那么接收端一定就是一层一层外里剥:

    C:
    1. /* pop off outer UDP header */
    2.     __skb_pull ( skb, sizeof ( struct udphdr ) ) ;
    3.  
    4.     /* Need Vxlan and inner Ethernet header to be present */
    5.     if ( ! pskb_may_pull ( skb, sizeof ( struct vxlanhdr ) ) )
    6.         goto error;
    7.  
    8.     /* Drop packets with reserved bits set */
    9.     vxh = ( struct vxlanhdr * ) skb - >data;
    10.     if ( vxh - >vx_flags != htonl ( VXLAN_FLAGS ) ||
    11.         ( vxh - >vx_vni & htonl ( 0xff ) ) ) {
    12.         netdev_dbg ( skb - >dev, "invalid vxlan flags=%#x vni=%#x \n " ,
    13.                ntohl ( vxh - >vx_flags ) , ntohl ( vxh - >vx_vni ) ) ;
    14.         goto error;
    15.     }
    16.  
    17.     __skb_pull ( skb, sizeof ( struct vxlanhdr ) ) ;
    18.  
    19.     /* Is this VNI defined? */
    20.     vni = ntohl ( vxh - >vx_vni ) >> 8 ;
    21.     vxlan = vxlan_find_vni ( sock_net ( sk ) , vni ) ;
    22.     if ( ! vxlan ) {
    23.         netdev_dbg ( skb - >dev, "unknown vni %d \n " , vni ) ;
    24.         goto drop;
    25.     }
    26.  
    27.     if ( ! pskb_may_pull ( skb, ETH_HLEN ) ) {
    28.         vxlan - >dev - >stats. rx_length_errors ++ ;
    29.         vxlan - >dev - >stats. rx_errors ++ ;
    30.         goto drop;
    31.     }

    在重新入栈之前还要做一些准备工作:

    C:
    1. /* Re-examine inner Ethernet packet */
    2.     oip = ip_hdr ( skb ) ;
    3.     skb - >protocol = eth_type_trans ( skb, vxlan - >dev ) ;
    4.  
    5.     /* Ignore packet loops (and multicast echo) */
    6.     if ( compare_ether_addr ( eth_hdr ( skb ) - >h_source,
    7.                    vxlan - >dev - >dev_addr ) == 0 )
    8.         goto drop;
    9.  
    10.     if ( vxlan - >learn )
    11.         vxlan_snoop ( skb - >dev, oip - >saddr, eth_hdr ( skb ) - >h_source ) ;
    12.  
    13.     __skb_tunnel_rx ( skb, vxlan - >dev ) ;
    14.     skb_reset_network_header ( skb ) ;
    15.     skb - >ip_summed = CHECKSUM_NONE;

    另外需要特别指出的是:1) 加入和离开组播地址是在 vxlan_open() 和 vxlan_stop() 中完成的;2) Linux 内核已经把 bridge 的 L2 learn 功能给抽出来了,所以 VXLAN 也实现了对 L2 地址的学习和转发:

    C:
    1. static const struct net_device_ops vxlan_netdev_ops = {
    2.     . ndo_init       = vxlan_init,
    3.     . ndo_open       = vxlan_open,
    4.     . ndo_stop       = vxlan_stop,
    5.     . ndo_start_xmit     = vxlan_xmit,
    6.     . ndo_get_stats64     = vxlan_stats64,
    7.     . ndo_set_rx_mode     = vxlan_set_multicast_list,
    8.     . ndo_change_mtu     = eth_change_mtu,
    9.     . ndo_validate_addr   = eth_validate_addr,
    10.     . ndo_set_mac_address     = eth_mac_addr,
    11.     . ndo_fdb_add         = vxlan_fdb_add,
    12.     . ndo_fdb_del         = vxlan_fdb_delete,
    13.     . ndo_fdb_dump       = vxlan_fdb_dump,
    14. } ;

    附注:openvswitch 中的 VXLAN 的实现: http://openvswitch.org/pipermail/dev/2011-October/012051.html

    参考资料:

    1. http://tools.ietf.org/html/draft-mahalingam-dutt-dcops-vxlan-02
    2. http://blogs.cisco.com/datacenter/digging-deeper-into-vxlan/
    3. http://www.yellow-bricks.com/2012/11/02/vxlan-use-cases/
    4. http://www.borgcube.com/blogs/2011/11/vxlan-primer-part-1/
    5. http://www.borgcube.com/blogs/2012/03/vxlan-primer-part-2-lets-get-physical/
    6. http://it20.info/2012/05/typical-vxlan-use-case/




    二、vxlan隧道技术介绍——转自:http://blog.csdn.net/freezgw1985/article/details/16354897

    一 . 为什么需要Vxlan

    1. vlan的数量限制
       4096个vlan远不能满足大规模云计算数据中心的需求

    2. 物理网络基础设施的限制
       基于I P子网的区域划分限制了需要 二层网络连通性的应用负载的 部署

    3. TOR交换机MAC表耗尽
        虚拟化以及东西向流量导致更多的MAC表项

    4. 多租户场景
        IP地址重叠?
    二. 什么是Vxlan

    1. Vxlan报文
        vxlan(virtual Extensible LAN)虚拟可扩展局域网,是一种overlay的网络技术,使用MAC in UDP的方法进
    行封装,共50字节的封装报文头。具体的报文格式如下:


    (1) vxlan header
        共计8个字节,目前使用的是Flags中的一个8bit的标识位和24bit的VNI(Vxlan Network identifier),
    其余部分没有定义,但是在使用的时候必须设置为0x0000。

    (2) 外层的UDP报头
         目的端口使用4798,但是可以根据需要进行修改。同事UDP的校验和必须设置成全0。

    (3) IP报文头
         目的IP地址可以是单播地址,也可以是多播地址。单播情况下,目的IP地址是Vxlan Tunnel End Point
    (VTEP)的IP地址。在多播情况下引入VXLAN管理层, 利用VNI和IP多播组的映射来确定VTEPs。???
    • protocol:设置值为0x11,显示说明这是UDP数据包
    • Source ip: 源vTEP_IP;
    • Destination ip: 目的VTEP IP。
    (4) Ethernet Header
    • Destination Address:目的VTEP的Mac 地址,即为本地下一跳的地址(通常是网关Mac 地址);
    • VLAN: VLAN Type被设置为0x8100, 并可以设置Vlan Id tag(这就是vxlan的vlan 标签)。
    • Ethertype:设置值为0x8000,指明数据包为IPv4的。
    补充:VTEP的作用?    
         用于对VXLAN报文进行封装/解封装,包括ARP请求报文和正常的VXLAN数据报文,在一段封装报文
    后通过隧道向另一端VTEP发送封装报文,另一端VTEP接收到封装的报文解封装后根据封装的MAC地址
    进行装法。VTEP可由支持VXLAN的硬件设备或软件来实现。

       从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有
    24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,比VLAN有更好的扩展性。

    2. Vxlan的数据和控制平面
      (1) 数据平面---隧道机制
         已经知道,VTEP为虚拟机的数据包加上了层包头,这些新的报头之有在数据到达目的VTEP后才会被去掉。
    中间路径的网络设备只会根据外层包头内的目的地址进行数据转发,对于转发路径上的网络来说,一个Vxlan
    数据包跟一个普通IP包相比,出了个头大一点外没有区别。
         由于VXLAN的数据包在整个转发过程中保持了内部数据的完整,因此VXLAN的数据平面是一个基于隧道
    的数据平面。

    (2) 控制平面----改进的二层协议
         VXLAN不会在虚拟机之间维持一个长连接,所以VXLAN需要一个控制平面来记录对端地址可达情况。控制
    平面的表为(VNI,内层MAC,外层vtep_ip)。Vxlan学习地址的时候仍然保存着二层协议的特征,节点之间不会
    周期性的交换各自的路由表,对于不认识的MAC地址,VXLAN依靠 组播来获取路径信息(如果有SDN Controller,
    可以向SDN单播获取)。
        另一方面,VXLAN还有自学习的功能,当VTEP收到一个UDP数据报后,会检查自己是否收到过这个虚拟机的
    数据,如果没有,VTEP就会记录源vni/源外层ip/源内层mac对应关系,避免组播学习。


    3. 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, 内层mac地址,外层Ip地址),并在本地VXLAN标识为100的范围内
           广播(是VXLAN的用武之地)。
       5) VM2对接收到的ARP请求进行响应;

    (3) ARP应答

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

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

           3)VTEP1接收到单播报文后,学习内层MAC到外层ip地址的映射,解封装并根据被封装内容的目的MAC地址转发给VM1

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

    4  数据传输
        (1)  ARP请求应答之后,VM1知道了VM2的Mac地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2发送数据的)。
    VTEP1 收到VM1发送数据包,用MAC地址从流表中检查VM1与VM2是否属于用一个VNI。两个VM不但位于同一个VNI中
    (不在同一个VNI中出网关),并且VTEP1已经知道了VM2的所有地址信息(MAC和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将做为两个独立的协议栈各自工作,相互之间没有交互。
        
    5 Vxlan网关


     如果需要VXLAN网络和非VXLAN网络连接,必须使用VXLAN网关才能把VXLAN网络和外部网络进行桥接和
    完成VXLAN ID和VLAN ID之间的映射和路由,和VLAN一样,VXLAN网络之间的通信也需要三层设备的支持,
    即VXLAN路由的支持。同样VXLAN网关可由硬件和软件来实现。

     从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有
    24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,比VLAN有更好的扩展性。

    6.部署
    (1) 纯VXLAN部署场景
      对于连接到VXLAN内的虚拟机,由于虚拟机的VLAN信息不再作为转发的依据,虚拟机的迁移也就
    不再受三层网关的限制,可以实现跨越三层网关的迁移。


    (2) VXLAN与VLAN混合部署

       为了实现VLAN和VXLAN之间互通,VXLAN定义了VXLAN网关。VXLAN网关上同时存在两种类型的端口:VXLAN端口
    和普通端口。
       当收到从VXLAN网络到普通网络的数据时,VXLAN网关去掉外层包头,根据内层的原始帧头转发到普通端口上;当有数据
    从普通网络进入到VXLAN网络时,VXLAN网关负责打上外层包头,并根据原始VLAN ID对应到一个VNI,同时去掉内层包头
    的VLAN ID信息。相应的如果VXLAN网关发现一个VXLAN包的内层帧头上还带有原始的二层VLAN ID,会直接将这个包丢弃。
    之所以这样,是VLAN ID是一个本地信息,仅仅在一个地方的二层网络上其作用,VXLAN是隧道机制,并不依赖VLAN ID进行
    转发,也无法检查VLAN ID正确与否。因此,VXLAN网关连接传统网络的端口必须配置ACCESS口,不能启用TRUNK口。

    展开全文
  • 专家精品课堂 之 H3C SecPath WEB应用及数据库安全产品 专家精品课堂 之 H3C云等级保护设计 专家精品课堂 之 macsec技术漫谈 专家精品课堂 之 VXLAN技术演进详解 专家精品课堂 之 VXLAN集中 分布式模型介绍 ...
  • 05 H3C SDN网络overlay组网Oracle 11g RAC集群业务无法正常运行经验案例 06 SDN集中控制模式网络Overlay组网网关上做静态路由负载均衡失败处理经验案例 07 SDN网络VCFC强控方案下S9800部分流量三层转发不通问题...
  • 图 基于VDC的多租户隔离 支持基于VXLAN的网络虚拟化技术 通过VXLAN技术实现虚拟网络和物理网络的解耦合、灵活的网络策略以及安全策略的同步跟随,并将隔离网络数量从4K扩展到16M,突破了VLAN方案4K个隔离网络的限制...
  • h3c comware7 netconf接口资料,比较全的,APR BGP SNMP SSH VRRP VXLAN syslog 基本上所有的接口都有自己独立的文档 23.4MB
  • 目录: 1 EVPN技术专题 2 MPLS SR技术专题 3 VXLAN技术专题 4 组播VPN技术专题
  • H3C维护宝典.rar

    2021-08-27 08:44:01
    1 重剑无锋,“老”设备也能玩转新网络——无控制器VXLAN典型组网 2 易筋洗髓之WLAN网络优化 3 虚拟机性能优化 4 小M路由器SIP故障排查大法--注册篇 5 向左走,向右走 6 嘻哈探长破案录之S1224同传的惊声尖叫 7 网络...
  • H3C配置指导.rar

    2020-06-16 19:22:28
    H3C配置手册,包含二层三层技术配置指导,安全配置指导,VXLAN配置指导,基本网络管理与监控的配置指导,综合H3C ICG系列
  • H3C S5820X&S5800; 第02章节 IRF配置指导 基础配置指导
  • h3c的教材 详细讲解了数据中心 对于了解学习数据中心较有帮助
  • VXLAN简介

    万次阅读 多人点赞 2019-03-04 22:13:51
    VXLAN简介 作为一个网络盲程序猿,要整理这样的文章还是稍稍有点吃力。文章中有不对的地方,还望路过的大神斧正,感激不尽! 1、前菜 VXlAN是搭建在三层网络上的虚拟二层网络。呃,暂停一下,我这里有几个问题需要...
  • 4 H3C SDN Overlay模型设计·······················································································...
  • 3集 交换机arp攻击排查 第4集 交换机内存检测 第5集 设备重启问题分析 第6集 交换机之镜像事件 第7集 3G4G故障排查 第8集 如何排查L2TP故障 第9集 金融POS故障排查 第10集 拥塞管理故障排查 第11集 MPLS L2...
  • 3集 交换机arp攻击排查 第4集 交换机内存检测 第5集 设备重启问题分析 第6集 交换机之镜像事件 第7集 3G4G故障排查 第8集 如何排查L2TP故障 第9集 金融POS故障排查 第10集 拥塞管理故障排查 第11集 MPLS L2...
  • VXLAN详解

    万次阅读 2018-06-12 13:02:12
    VXLAN技术是目前SDN解决方案中最流行的技术,在SDN的学习和测试过程中,我也对VXLAN技术进行了一些深入的理解和研究,而在讲VXLAN技术前也必须先介绍下overlay网络架构,下面简单说说我对overlay组网以及vxlan协议的...
  • g03 EVPN VXLAN技术白皮书pdf g04MDC技术白皮书pdf 905RBAC技术白皮书pdf 906NQA技术白皮书pdf 907SNMP技术白皮书pdf g08EAA技术白皮书,pdf g09DHCP技术白皮书pdf 0NAT技术白皮书 11RPng技术白皮书,pdf 12OSPF3技术...
  • 01 EVPN VXLAN技术白皮书,pdf 02DRN技术白皮书,pdf 203MDC技术白皮书pd 04RBAC技术白皮书pdf 055SU技术白皮书pdf 206NQA技术白皮书pdf 207SNMP技术白皮书,pdf 08EAA技术白皮书pdf 09 MAC VLAN技术白皮书pdf 10 PVLAN...
  • g04 EVPN VXLAN技术白皮书pdf g05 Segment Routing之概述pdf 06 Segment RoutingePvi6sR概述pdf 907 Segment Routing ZMPLS SR pdf 08集中式备份分布式CGN技术介绍,pdf 09智能提速技术介绍,pdf 10 oE Web无感知认证...
  • H3C 运营级城域网解决方案 ppt格式
  • vxlan技术文档

    2019-01-21 13:00:42
    vxlan技术文档资料!!!
  • VXLAN介绍

    万次阅读 多人点赞 2018-05-30 08:19:28
    3) 通过IS-IS协议学习:VXLAN扩展了IS-IS协议来发布本端的MAC地址信息,在VTEP上运行IS-IS协议,通过VXLAN隧道将本地MAC地址及其所属的VXLAN信息通告给远端VTEP,远端VETP接收到该信息后,将其添加到对应的VXLAN...
  • vxlan primer

    千次阅读 2014-08-15 16:15:40
    VXLAN Primer-Part 1 http://www.borgcube.com/blogs/2011/11/vxlan-primer-part-1/ There has been a lot of chatter in the bloggersphere about the advent of Virtual eXtensible Local Area Network

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,870
精华内容 748
关键字:

h3cvxlan