超详细VXLAN分布式网关通信原理,看这篇就够了(主页文章还有对应实验)

超详细VXLAN分布式网关通信原理,看这篇就够了(主页文章还有对应实验)
1.BGP EVPN分布式网关通信原理
 a.VXLAN隧道建立

  同子网互通:

   a.CE1和CE2建立BGP EVPN邻居后,会传递EVPN的Type3的路由,Type3路由包含两部分:前缀和PMSI,前缀携带Originator IP(用于告知对端玩的VTEP IP),PMSI会携带Tunnel Identifier也就是VTEP IP和L2 VNI(用于建立VXLAN隧道和该VNI的头端复制列表)

  跨子网互通(这李介绍IRB情况):

    因为是跨子网并且跨VTEP,所以CE1和CE3上是需要有32位的主机路由(不同的Leaf节点可能连接着相同的网段,所以如果Leaf节点发布的是下属主机IP所在的网段路由,则可能与其他Leaf节点发布的网段路由冲突,进而导致某些Leaf节点的下属主机不可达)

  a.PC1首次和CE1通信的时候,CE1会记录PC1的IP地址和MAC地址进入ARP表项,然后载对应网关下配置:arp host collect enable,用于收集租户侧的的主机信息和生成IRB的路由(包含MAC地址,IP地址,L2 VNI,L3 VNI)

  b.然后通过BGP EVPN邻居将路由传递给CE3,在IP vpn-instance处和Bridge domain下对比vpn-target,决定是否接收路由,RT值对应将IRB路由收下,在路由表生成对应的主机路由,在BD域下生成对应的用于生成ARP抑制表,所以跨子网互通会通过L3 VNI

 b.MAC地址动态学习

   1.当首次有数据包从PC1到CE1的时候,CE1会学习到PC1的MAC地址,BD域(比如Bridge domian 2000等)和入接口(二层子接口),所以此时会记录MAC地址表项和ARP表项。

   2.CE1根据MAC地址表项会生成Type2的EVPN路由(主机MAC地址通告),根据ARP表项生成Type2的EVPN路由(主机ARP通告,用户ARP广播抑制),该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性,二层VNI,MAC地址,MAC地址长度

   3.CE3收到CE1的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后。CE3在本地MAC地址表项中添加CE1的MAC地址,出接口不再是某些物理接口,而是对端VTEP地址

 注意:

  1.在第一次CE1和CE3通信时会发送ARP广播来请求CE3的MAC地址,若此VXLAN的广播域太大,会对那些不需要回应此报文的设备增加负担,所以此时可以在CE1和CE3上都开启ARP广播抑制功能。

  2.在开启此功能后,会产生Type2的EVPN路由(主机ARP通告的)不管是CE1和CE3在发送ARP广播时,都会检查本地的表项中是否有对端的MAC地址,如果有的话,会将全F的MAC地址替换成对端MAC地址,这样就将广播ARP变为单播ARP

 c.同子网已知报文转发

  1.CE1收到来自PC1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并在该二层广播域内查找出接口和封装信息(查找ARP表,没有对应MAC地址,就发送ARP广播也可能是单播)。

  2.CE1上VTEP根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发。

  3.CE3上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。

  4.CE3根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,为报文添加VLAN Tag,转发给对应的主机Host2

 d.同子网BUM报文转发

  1.CE1收到来自PC1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。

  2.CE1上根据对应BD内有一个泛洪表(我自己这样称)发给具有相同VNI的VETP,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。

  3.CE3作为集中复制节点接收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文,再根据二层广播域对应VNI的头端复制列表进行VXLAN封装,此时外层的源IP地址为CE1的VTEP地址,不会影响VTEP间的MAC地址学习。

  4.CE3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:从其他VTEP发来的广播包,不会再发给具有相同VNI的VTEP了,CE3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端PC2。

 e.跨子网报文转发

  CE1属于BD10,CE2属于BD20

  1.不再像同子网一样直接再VTEP建立VXLAN隧道,需要VTEP和Spine(也就是网关所在位置)建立VXLAN隧道

  2.CE1接收来自PC1的报文后,从报文中的vlan id判断从那哪个子接口接收,判断该报文属于哪一个BD域,然后查看目的IP地址,判断是需要进行三层转发,以VBDIF的MAC地址为目的MAC地址,发给VBDIF网关

  3.VBDIF网关查路由表,判断需要进行VXLAN封装,封装上L3VNI,内层IP为PC1和PC2的IP,M源MAC为本端VTEP的MAC地址,目的MAC为对端VTEP的MAC地址,将VXLAN数据包发给CE3

  4.CE3侧VXLAN报文后进行解封装,发现VNI是L3 VNI,进行L3的查表转发,然后够内层报文中的L3中的目的IP地址是PC2的IP地址,查对应的路由表,从VBDIF20发出,然后封装源MAC为VBDIF20,目的MAC为PC2,将数据包发给PC2

  5.CE2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的PC2

2.总结

 a.VXLAN隧道建立:

  同子网:通过Type3的EVPN路由的传递,来建立VXLAN隧道

  跨子网:通过Type3的EVPN路由的传递,来建立VXLAN隧道,通过Type2的IRB路由收集主机信息,跨子网直接通过主机路由通信

 b.同子网互访:PC1的数据包发出的时候,先查ARP表,没有对应IP-MAC的映射的话,就发ARP广播(开了ARP广播抑制,就是ARP广播变成单播),然后通过子接口进入对应的BD,查MAC地址表,若有MAC-Port的对应关系就直接转发,没有的话就泛洪(通过头端复制泛洪给对应的VNI的VTEP),然后封装上VXLAN头部(这里是L2的VNI),发给对端CE,解封装VXLAN头部,根据VNI找到对应的BD域,查找MAC地址表,封装后,将数据包发给PC2

 c.跨子网互访(此处IRB型):PC1将数据包发出的时候,发现是跨子网,发ARP请求网关的MAC地址,封装上数据包后,通过子接口进入对应的BD域,将数据包发给对应的VBDIF,解封装数据包,查找对应的路由表,发现下一跳进行VXLAN封装(这里就是封装L3 VNI),发给对端后,解封装,发现是L3 VNI,查对应路由表,然后从对应VBDIF发出,然后封装源MAC为VBDIF的,目的MAC为PC2,将数据包发给PC2

Read more

uniapp微信小程序网上饰品商城售卖系统php python物流

uniapp微信小程序网上饰品商城售卖系统php python物流

文章目录 * 开发框架与技术选型 * 核心功能模块 * 数据交互与安全 * 性能优化建议 * 扩展性设计 * 系统设计与实现的思路 * 主要技术与实现手段 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 开发框架与技术选型 采用Uniapp作为前端开发框架,支持微信小程序、H5等多端发布。后端可选择PHP(如Laravel/ThinkPHP)或Python(如Django/Flask),数据库推荐MySQL或MongoDB。物流模块需集成第三方API(如快递鸟、阿里云物流)实现实时轨迹查询。 核心功能模块 商品管理:支持饰品分类、详情页、SKU属性(材质、颜色等)、库存预警。 订单系统:微信支付/余额支付接口、订单状态追踪、退换货流程。 物流对接:通过API获取物流公司列表、电子面单打印、配送状态同步至用户端。 数据交互与安全 RESTful API设计保证前后端分离,JWT token验证用户权限。敏感数据(

By Ne0inhk
Python 基础语法完全指南:变量、类型、运算符与输入输出(零基础入门)

Python 基础语法完全指南:变量、类型、运算符与输入输出(零基础入门)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 常量与表达式:Python 当计算器使用 * 1.1 核心算术运算符 * 1.2 关键注意点 * 1.3 实际案例:求平均值 * 二. 变量:保存数据的 “容器” * 2.1 变量定义与使用 * 2.2 变量命名规则 * 三. 数据类型:给数据 “分类” * 3.1 四大基础类型 * 3.2类型相关操作: * 四. 注释:给代码 “加说明”

By Ne0inhk
【C++:C++11收尾】解构C++可调用对象:从入门到精通,掌握function包装器与bind适配器包装器详解

【C++:C++11收尾】解构C++可调用对象:从入门到精通,掌握function包装器与bind适配器包装器详解

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 🎬 艾莉丝的C++专栏简介: 文章目录 * C++学习阶段的三个参考文档 * 8 ~> 包装器 * 8.1 function * 8.1.1 结构 * 8.1.2 概念 * 8.1.3 function实现 * 8.1.4 重写逆波兰表达式求值 * 8.2 bind

By Ne0inhk

VS Code 中的 Python 代码格式化插件

在 VS Code 中,有几款非常出色的 Python 代码格式化插件可以帮助你保持代码的整洁与规范。下面这个表格整理了目前主流的几款工具,你可以根据它们的特点进行选择。 工具名称核心特点风格理念推荐适用场景Black开箱即用,几乎无需配置;强制统一的代码风格,可预测性强。“无妥协”的格式化器。它决定格式,讨论空间小,保证所有代码风格一致。团队协作项目;希望零配置快速上手的开发者;追求极简和一致性。autopep8基于 PEP 8 规范,主要修复代码风格问题(如缩进、空格)。相对保守,专注于修复而非重新排版。希望代码严格遵循 PEP 8;对现有代码进行温和的格式化修复。yapf高度可定制,可以模仿多种代码风格;格式化策略更“激进”,会重新排版代码。“自成风格”。目标是通过调整代码来达到最佳可读性,而非严格遵循某一规范。需要高度自定义格式化规则;项目有特殊的代码风格要求。 🔧 如何安装与配置 选好工具后,只需简单几步就能在 VS Code 中启用它们。

By Ne0inhk