VXLAN 大二层实验与分析(HCL)

 网络拓扑

在现代数据中心和企业网络中,传统的VLAN技术因其扩展性和灵活性的限制,逐渐难以满足大规模、多租户环境的网络需求。VXLAN(Virtual eXtensible Local Area Network)作为一种先进的网络虚拟化技术,通过在三层IP网络上构建大二层网络,突破了VLAN的4096个ID限制,支持跨地域的二层通信,广泛应用于数据中心互联、云服务和SDN(软件定义网络)架构。

本文将通过一个基于VXLAN的大二层实验,深入讲解如何利用VXLAN技术构建一个跨交换机的二层广播域,实现多站点间的无缝二层通信。实验基于四台交换机(Switch A、Switch B、Switch C 和 Switch D)的配置,模拟一个典型的数据中心网络场景,其中三台交换机(A、B、C)作为VXLAN隧道端点(VTEP),通过OSPF协议建立Underlay网络,承载VXLAN隧道;一台交换机(D)作为核心交换机,负责Underlay网络的IP路由。

实验目标与内容

本文的目标是通过一个精心设计的实验,展示VXLAN的工作原理、配置方法以及在大二层网络中的应用。实验将重点讲解以下内容:

  • VXLAN基础概念:介绍VXLAN的封装机制、VNI(VXLAN Network Identifier)、VTEP以及与传统VLAN的区别,帮助读者理解VXLAN的核心优势。
  • 网络拓扑设计:详细描述实验的网络架构,包括三台VTEP交换机(Switch A、B、C)通过VXLAN隧道互联,核心交换机(Switch D)提供IP路由支持,以及客户端设备如何接入二层广播域。
  • Underlay网络搭建:展示如何使用OSPF协议在Switch A、B、C、D上配置IP路由,确保VTEP之间的三层连通性,为VXLAN隧道提供可靠的底层网络。
  • VXLAN隧道配置:深入讲解Switch A、B、C上VXLAN隧道的静态配置,包括VSI(Virtual Switch Instance)、服务实例(Service Instance)以及VLAN到VXLAN的映射,突出配置的关键点和注意事项。
  • 二层通信验证:通过客户端设备(连接到Switch A、B、C的接入接口)的通信测试,验证VXLAN大二层网络的连通性,展示PC间如何在同一VNI(VXLAN ID 10)内实现二层互通。

实验背景与意义

本实验模拟了一个典型的数据中心或企业分支网络场景,其中多个站点(由Switch A、B、C代表)需要通过二层网络互联,以支持虚拟机迁移、分布式应用或跨地域的业务连续性。Switch D作为核心交换机,模拟了Underlay网络的骨干路由设备,确保VTEP之间的IP可达性。实验使用的VXLAN ID 10和VSI vpna构建了一个统一的二层广播域,客户端设备通过VLAN 2接入,映射到VXLAN网络,实现跨站点的二层通信。

通过本文的讲解,读者将:

  • 掌握VXLAN的基本原理和应用场景,理解其在现代网络中的重要性。
  • 学习如何在实际设备上配置VXLAN隧道,包括Underlay网络的OSPF路由、VTEP的隧道设置以及服务实例的VLAN映射。
  • 了解如何验证和调试VXLAN网络,解决常见的配置和通信问题。
  • 获得可复现的实验指导,适合网络工程师、数据中心管理员或学习网络虚拟化的学生。

实验步骤

1、接口IP地址配置

Switch-D

vlan 10 to 12
#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255
#
interface Vlan-interface10
 ip address 10.1.1.1 255.255.255.252
#
interface Vlan-interface11
 ip address 10.1.1.5 255.255.255.252
#
interface Vlan-interface12
 ip address 10.1.1.9 255.255.255.252

Switch-A

vlan 10
#
interface LoopBack0
 ip address 1.1.1.2 255.255.255.255
#
interface Vlan-interface10
 ip address 10.1.1.2 255.255.255.252

 Switch-B

vlan 11
#
interface LoopBack0
 ip address 1.1.1.3 255.255.255.255
#
interface Vlan-interface11
 ip address 10.1.1.6 255.255.255.252

Switch-C

vlan 12
#
interface LoopBack0
 ip address 1.1.1.4 255.255.255.255
#
interface Vlan-interface12
 ip address 10.1.1.10 255.255.255.252

IP配置非常简单,我们接着下一步 

2、OSPF配置

Switch-D

ospf 1 router-id 1.1.1.1
 area 0.0.0.0
  network 1.1.1.1 0.0.0.0
  network 10.1.1.0 0.0.0.3
  network 10.1.1.4 0.0.0.3
  network 10.1.1.8 0.0.0.3

Switch-A

ospf 1 router-id 1.1.1.2
 area 0.0.0.0
  network 1.1.1.2 0.0.0.0
  network 10.1.1.0 0.0.0.3

Switch-B

ospf 1 router-id 1.1.1.3
 area 0.0.0.0
  network 1.1.1.3 0.0.0.0
  network 10.1.1.4 0.0.0.3

Switch-C

ospf 1 router-id 1.1.1.4
 area 0.0.0.0
  network 1.1.1.4 0.0.0.0
  network 10.1.1.8 0.0.0.3

验证

OSPF正常建立邻居,这里一些MD5验证、P2P的功能我就不去配置了,主要咱们就讲解VXLAN大二层的转发

3、VXLAN核心配置 

Switch-A

 l2vpn enable                  //全局启用二层虚拟专用网络
#
interface Tunnel2 mode vxlan  // 进入Tunnel2接口并配置为VXLAN模式,用于创建VXLAN隧道
 source 1.1.1.2              // 设置VXLAN隧道的源IP地址为1.1.1.2(通常为本地VTEP的Loopback接口IP)
 destination 1.1.1.3         // 设置VXLAN隧道的目标IP地址为1.1.1.3(对端VTEP的IP地址)
#
interface Tunnel3 mode vxlan  // 进入Tunnel3接口并配置为VXLAN模式,用于创建另一条VXLAN隧道
 source 1.1.1.2              // 设置VXLAN隧道的源IP地址为1.1.1.2(与Tunnel2相同,表示本地VTEP)
 destination 1.1.1.4         // 设置VXLAN隧道的目标IP地址为1.1.1.4(另一个对端VTEP的IP地址)
#
vsi vpna                     // 创建或进入名为vpna的虚拟交换实例(VSI),用于定义VXLAN的二层广播域
 vxlan 10                    // 指定VSI vpna关联的VXLAN网络标识符(VNI)为10,用于标识VXLAN二层网络
  tunnel 2                   // 将Tunnel2接口绑定到VSI vpna,表示该隧道的流量属于此VSI
  tunnel 3                   // 将Tunnel3接口绑定到VSI vpna,表示该隧道的流量也属于此VSI
  • l2vpn enable 命令用于在交换机或路由器上全局启用二层虚拟专用网络(L2VPN)功能。
  • VXLAN隧道(Tunnel2和Tunnel3)
    • 命令:interface Tunnel2 mode vxlan, source 1.1.1.2, destination 1.1.1.3(以及Tunnel3的类似配置)。
    • 作用:创建两条VXLAN隧道,连接本地VTEP(IP 1.1.1.2)与两个远程VTEP(1.1.1.3和1.1.1.4)。
    • 机制:VXLAN通过UDP(默认端口4789)封装二层帧,隧道定义了封装的源和目标IP,数据通过Underlay IP网络传输。Tunnel2连接一个远程站点,Tunnel3连接另一个,形成多点VXLAN网络。
    • 意义:隧道是VXLAN的数据平面,负责将二层帧封装为UDP数据包并传输到对端。
  • 虚拟交换实例(VSI vpna)
    • 命令:vsi vpna
    • 作用:创建VSI vpna,作为虚拟交换机,管理一个独立的二层广播域,类似于VLAN的扩展。
    • 功能:VSI负责MAC地址学习、广播/未知单播/多播(BUM)流量处理,并将客户端的二层帧映射到VXLAN网络。
  • VXLAN网络标识符(VNI 10)
    • 命令:vxlan 10
    • 作用:为VSI vpna指定VNI 10,唯一标识该VXLAN二层网络。
    • 机制:VNI嵌入VXLAN头部,允许在同一Underlay网络上隔离多个二层网络。VNI 10内的设备(跨所有VTEP)如同在同一广播域。
    • 意义:VNI提供网络隔离和扩展性,支持大规模二层网络。
  • 隧道与VSI绑定
    • 命令:tunnel 2, tunnel 3
    • 作用:将Tunnel2和Tunnel3绑定到VSI vpna,关联隧道流量与该二层广播域。
    • 机制:绑定确保VSI vpna的二层帧通过Tunnel2(到1.1.1.3)或Tunnel3(到1.1.1.4)封装传输,反之亦然。
    • 意义:实现多站点二层互联,VSI vpna的流量可通过多个隧道分发。

Switch-B


 l2vpn enable
#
interface Tunnel2 mode vxlan
 source 1.1.1.3
 destination 1.1.1.2
#
interface Tunnel3 mode vxlan
 source 1.1.1.3
 destination 1.1.1.4
#
vsi vpna
 vxlan 10
  tunnel 2
  tunnel 3

Switch-C

 l2vpn enable
#
interface Tunnel2 mode vxlan
 source 1.1.1.4
 destination 1.1.1.2
#
interface Tunnel3 mode vxlan
 source 1.1.1.4
 destination 1.1.1.3
#
vsi vpna
 vxlan 10
  tunnel 2
  tunnel 3

配置完成后,Switch A、B、C 会形成一个 VXLAN 大二层网络(VNI 10,VSI vpna),通过 Tunnel2 和 Tunnel3 互联。PC1、PC2、PC3、PC4 就像在同一个局域网里,能互相 ping 通、发 ARP 请求,感觉不到它们其实隔着三层网络。

验证

4、VXLAN 接入配置

Switch-A

vlan 1000
#
interface GigabitEthernet1/0/2
 port link-mode bridge             // 将接口设置为二层桥接模式,处理二层帧
 port link-type trunk             // 配置接口为 Trunk 模式,允许传输多个 VLAN 的流量
 port trunk permit vlan 1 1000    // 允许 VLAN 1 和 VLAN 1000 的流量通过该接口
 port trunk pvid vlan 1000        // 设置无标签帧的默认 VLAN 为 1000(PVID)
 combo enable fiber               // 启用接口的光纤模式(针对 Combo 端口的物理连接)
#
service-instance 1000
 encapsulation s-vid 1000         // 定义服务实例 1000,期望接收 VLAN 1000 标签的帧
 xconnect vsi vpna               // 将服务实例绑定到 VSI vpna,将 VLAN 1000 流量映射到 VXLAN 网络

Switch-B

vlan 1000
#
interface GigabitEthernet1/0/2
 port link-mode bridge
 port link-type trunk
 port trunk permit vlan 1 1000
 combo enable fiber
 #
 service-instance 1000
  encapsulation s-vid 1000
  xconnect vsi vpna

Switch-C

vlan 1000
#
interface GigabitEthernet1/0/2           // 进入 GigabitEthernet1/0/2 接口配置模式
 port link-mode bridge                   // 将接口设置为二层桥接模式,处理二层帧
 port access vlan 1000                   // 配置接口为 Access 模式,并指定默认 VLAN 为 1000,接收和发送的帧属于 VLAN 1000
 combo enable fiber                      // 启用接口的光纤模式,适配 Combo 端口的物理连接(如光纤)
#
service-instance 1000                    // 创建或进入服务实例 1000,用于处理特定流量并映射到 VXLAN
 encapsulation untagged                  // 配置服务实例接收无 VLAN 标签的帧(剥离 VLAN 标签后处理)
 xconnect vsi vpna                      // 将服务实例绑定到 VSI vpna,将无标签流量映射到 VXLAN 网络(VNI 10)

Access-1

vlan 1000
#
interface GigabitEthernet1/0/1
 port link-mode bridge
 port link-type trunk
 port trunk permit vlan 1 1000
 combo enable fiber
#
interface GigabitEthernet1/0/2
 port link-mode bridge
 port access vlan 1000
 combo enable fiber

解释

首先声明一下,模拟器中交换机与pc互联的配置直接按照官网的文档进行配置是无法正常通信的,需要在交换机接入pc的接口上打上标签才可以正常通信,在实际中对于有些服务器直接配置trunk是能够正常通信的,大家根据现实情况来配置就行了,这个看实际使用的服务器接收数据包是带标签还是不带标签的

说明

1、Switch-A

  • 接口是 Trunk 模式,支持多个 VLAN(VLAN 1 和 1000)。
  • 客户端(PC)发送无标签帧,port trunk pvid vlan 1000 分配 VLAN 1000。
  • 接收带 VLAN 1000 标签的帧,送入 VSI vpna。

2、Switch-C

  • 接口是 Access 模式,只处理 VLAN 1000 的流量。
  • 客户端(PC)发送无标签帧,接口自动分配 VLAN 1000。
  • 服务实例 encapsulation untagged 接收无标签帧(因为 Access 模式会剥离 VLAN 1000 标签),直接送入 VSI vpna。
  • Switch-C也可以使用encapsulation s-vid 1000,但是使用encapsulation untagged也不影响

encapsulation s-vid 1000 的工作原理

  • 作用
    • 服务实例 1000 配置 encapsulation s-vid 1000,表示它只处理带 VLAN 1000 标签的二层帧。
    • 帧进入服务实例后,VLAN 1000 标签会被剥离,原始帧送入 VSI vpna,然后通过 VXLAN 隧道(Tunnel2/3)封装为 VXLAN 数据包(VNI 10)发送到其他 VTEP(比如 1.1.1.3 或 1.1.1.4)。

encapsulation untagged 的工作原理

  • 作用
    • 服务实例 1000 配置 encapsulation untagged,表示它处理 无 VLAN 标签的帧(或者从接口接收后已剥离标签的帧)。
    • 帧进入服务实例后,直接送入 VSI vpna,无需处理 VLAN 标签,然后通过 VXLAN 隧道封装发送。

3、Switch-B(下接access-1)

为什么 Switch-B 的 GE1/0/2 没配 PVID

  • GE1/0/2 连接的服务器可能发送带 VLAN 1000 标签的帧,Trunk 模式直接接收,服务实例(encapsulation s-vid 1000)处理,无需 PVID。
  • 未配 PVID 避免无标签帧被错误分配(默认 VLAN 1),保持配置灵活性,适合特殊服务器或统一 Trunk 设计。
  • 如果服务器发送无标签帧,需加 port trunk pvid vlan 1000 或改用 Access 模式。

设计 Access-1 支持更多服务器

  • Access-1 作为接入层交换机,通过多个 Access 接口(比如 GE1/0/2、GE1/0/3)连接服务器,每个接口分配 VLAN 1000,适合普通无标签帧的服务器。
  • GE1/0/1(Trunk)汇总多个服务器的 VLAN 1000 流量到 Switch-B,扩展性强,支持一个交换机下面接入更多服务器。
  • Switch-B 作为 VTEP,GE1/0/2 只接一个服务器,专注 VXLAN 隧道传输,Access-1 分担接入任务。

作用

这些配置的最终目标都是:让客户端(PC)的二层流量(比如 ping 数据或 ARP 请求)进入 VXLAN 网络(VSI vpna,VNI 10),通过隧道(比如 1.1.1.2 到 1.1.1.3/1.1.1.4)发送到其他交换机,实现跨站点通信。尽管模式不同(Access vs. Trunk),它们都能实现这个目标,因为:

  • 核心功能相同
    • 两种配置都确保客户端的二层帧被分配到 VLAN 1000,并通过服务实例 1000 送入 VSI vpna。
    • 在 Access 模式下,接口直接给无标签帧分配 VLAN 1000,服务实例处理剥离标签后的帧(encapsulation untagged)。
    • 在 Trunk 模式下,port trunk pvid vlan 1000 给无标签帧分配 VLAN 1000,服务实例直接处理带 VLAN 1000 标签的帧(encapsulation s-vid 1000)。
    • 最终,VSI vpna 收到相同的二层帧,封装为 VXLAN 数据包,通过隧道发送出去。
  • 客户端行为一致
    • 假设 PC 连接到 GE1/0/2,发送无 VLAN 标签的帧(普通 PC 网卡的典型行为)。
    • Access 模式:接口自动分配 VLAN 1000,剥离标签后送入服务实例。
    • Trunk 模式:port trunk pvid vlan 1000 分配 VLAN 1000,服务实例直接处理带标签的帧。
    • 结果:PC 的帧都被正确映射到 VLAN 1000,进入 VXLAN 网络,效果一样。
  • 服务实例适配
    • 服务实例的 encapsulation 设置(untagged 或 s-vid 1000)与接口模式匹配:
      • Access 模式剥离 VLAN 1000 标签,所以用 encapsulation untagged。
      • Trunk 模式保留 VLAN 1000 标签,所以用 encapsulation s-vid 1000。
    • 这两种方式只是处理 VLAN 标签的时机不同(接口剥离 vs. 服务实例匹配),但最终都把帧送进 VSI vpna。

验证

VSI Name: vpna
  VSI State               : Up              // VSI vpna 状态正常运行
  Flooding                : Enabled         // 泛洪功能启用
  VXLAN ID                : 10              // VXLAN 网络标识符为 10
  Tunnels:
    Tunnel2              ... UP ... Manual  // 隧道 2 正常,连接到远程 VTEP
    Tunnel3              ... UP ... Manual  // 隧道 3 正常,连接到另一远程 VTEP
  ACs:
    AC: GE1/0/2 srv1000  ... Up ... Manual  // 接入电路为 GE1/0/2 的服务实例 1000,状态正常

 5、PC配置

 验证MAC地址学习情况

连通性验证 

抓包 

我们在Switch-D的G1/0/1口进行抓包,尝试从vm1访问vm2

  • VXLAN 隧道:报文的外层 IP(1.1.1.1 → 1.1.1.4)和 UDP(端口 4789)对应 interface Tunnel2,实现 Switch-A 到 Switch-C 的传输。
  • VNI 10:VXLAN 头部的 VNI 10 匹配 vsi vpna vxlan 10,确保 vm1 和 vm2 在同一个二层网络(192.168.1.0/24)。
  • 封装过程
    • Switch-A 的 AC(GE1/0/2 srv1000)接收 VM1 的帧,VSI vpna 封装为 VXLAN 数据包,通过 Tunnel2 发送。
    • Switch-C 解封装,送给 VM3(通过其 AC,GE1/0/2 srv1000)。

报文讲解

报文协议栈为 eth:ethertype:ip:udp:vxlan:eth:ethertype:ip:icmp,VXLAN 部分负责将 PC1 的 ping 请求封装并传输到 Switch-C。以下是关键字段和作用:

1. 外层封装:VXLAN 隧道

  • 字段
    Ethernet II, Src: 4a:e2:39:1b:02:02, Dst: 4c:96:69:1f:01:02
    Internet Protocol Version 4, Src: 1.1.1.2, Dst: 1.1.1.3
    User Datagram Protocol, Src Port: 58628, Dst Port: 4789
  • 讲解
    • 外层以太网:报文在 Underlay 网络(Switch-D 的 GE_0-1)传输,源 MAC(4a:e2:39:1b:02:02,Switch-A)到目标 MAC(4c:96:69:1f:01:02,下一跳如 Switch-D 或 Switch-C)。
    • IP 层:源 IP 1.1.1.2(Switch-A 的 VTEP,Loopback0)到目标 IP 1.1.1.3(Switch-C 的 VTEP),对应配置中的 interface Tunnel2(source 1.1.1.2 destination 1.1.1.3)。注意:报文显示目标是 1.1.1.3,但上下文表明 PC4 在 Switch-C(1.1.1.4),可能是配置或捕获中的笔误,需验证隧道配置。
    • UDP 层:目标端口 4789 是 VXLAN 标准端口,源端口 58628 动态分配。VXLAN 用 UDP 封装二层帧,适配三层网络传输。
  • 作用
    • VXLAN 隧道将 PC1 的二层帧从 Switch-A 传输到 Switch-C,通过 Underlay 网络(Switch-D 转发)。
  • 通俗比喻
    • VXLAN 是“魔法快递信封”,信封外写着寄件人(1.1.1.2,Switch-A)和收件人(1.1.1.3,Switch-C),通过快递网络(Underlay)寄送。

2. VXLAN 头部:网络标识

  • 字段
    Virtual eXtensible Local Area Network
      Flags: 0x0800, VXLAN Network ID (VNI)
      Group Policy ID: 0
      VXLAN Network Identifier (VNI): 10
      Reserved: 0
  • 讲解
    • VNI: 10:VXLAN 网络标识符,匹配配置中的 vsi vpna vxlan 10,表示报文属于 VSI vpna 的二层广播域(VNI 10)。PC1(192.168.1.1)和 PC4(192.168.1.4)在同一虚拟局域网内。
    • Flags: 0x0800:表示 VNI 有效,VXLAN 头部正确。
    • Group Policy ID 和 Reserved:默认值 0,未使用。
  • 作用
    • VNI 10 确保 Switch-C 将报文解封装后送往 VSI vpna,正确转发到 PC4。
  • 通俗比喻
    • VNI 10 是“包裹的邮编”,告诉 Switch-C 这封信属于“VNI 10 社区”(VSI vpna),只送给这个社区的 PC4。

3. 内层报文:原始 ping 请求

  • 字段
    Ethernet II, Src: 4c:98:06:2e:05:06, Dst: 4c:0d:84:c6:09:06
    Internet Protocol Version 4, Src: 192.168.1.1, Dst: 192.168.1.4
    Internet Control Message Protocol
      Type: 8 (Echo (ping) request)
  • 讲解
    • 内层以太网:源 MAC(4c:98:06:2e:05:06,PC1)和目标 MAC(4c:0d:84:c6:09:06,PC4)是客户端的 MAC,由 VSI vpna 学习(display l2vpn mac-address 可查)。
    • IP 和 ICMP:源 IP 192.168.1.1(PC1)到目标 IP 192.168.1.4(PC4),ICMP Type 8 是 ping 请求。
    • VXLAN 封装这个二层帧(以太网 + IP + ICMP),通过 UDP 传输。
  • 作用
    • VXLAN 保护内层帧,确保 Switch-A 到 Switch-C 的二层通信。

STM32F103是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M3内核的微控制器,广泛应用于工业控制、物联网设备等领域。本资料包主要提供了STM32F103在实现RS485通信及Modbus RTU协议的主机和从机模式下的源代码实例,帮助开发者快速理解和应用这一通讯技术。 RS485是一种物理通信标准,用于构建多点数据通信网络,具有传输距离远、抗干扰能力强的特点。它采用差分信号传输方式,可以实现双向通信,适合于长距离的工业环境。在RS485网络中,通常有一个主机(Master)和一个或多个从机(Slave),主机负责发起通信,从机响应主机的请求。 Modbus RTU(Remote Terminal Unit)是一种常用的过程控制工业通信协议,基于ASCII或RTU(远程终端单元)报文格式,常用于PLC(可编程逻辑控制器)和嵌入式系统之间的通信。Modbus RTU使用串行通信接口,如RS485,以减少布线成本和提高通信效率。 在STM32F103上实现RS485 Modbus RTU通信,首先需要配置GPIO口作为RS485的硬件接口,包括数据线(一般为RX和TX)和方向控制线(DE和RE)。DE线用于控制发送数据时的数据线方向,RE线则用于接收数据时的方向。这些设置可以通过STM32的HAL库或LL库进行编程。 接着,你需要编写Modbus RTU协议栈的实现,这包括解析和构造Modbus报文、错误检测处理、超时管理等。Modbus RTU报文由功能码、地址、数据和CRC校验码组成。主机向从机发送请求报文,从机会根据接收到的功能码执行相应的操作,并返回响应报文。 在主机端,你需要实现发送请求和接收响应的函数,以及解析从机返回的数据。在从机端,你需要监听串口,解析接收到的请求,执行相应的功能并构造响应报文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Oreo.Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值