超详细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

Java Web 医疗挂号管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

Java Web 医疗挂号管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展,传统医疗行业的挂号管理方式逐渐暴露出效率低下、资源分配不均等问题。医疗挂号管理系统的引入能够有效缓解医院挂号窗口的压力,提升患者就医体验,同时优化医疗资源的分配。该系统通过线上挂号、分时段预约、智能排队等功能,减少患者排队时间,提高医院管理效率。此外,系统还能为医院提供数据支持,帮助分析就诊高峰时段、科室资源利用率等关键指标,为医院管理决策提供科学依据。关键词:医疗挂号、资源分配、效率提升、数据支持、线上挂号。 该系统基于SpringBoot2和Vue3技术栈开发,后端采用SpringBoot2框架实现业务逻辑,前端使用Vue3构建用户友好的交互界面。数据库采用MySQL8.0存储系统数据,通过MyBatis-Plus简化数据访问层操作。系统功能包括患者注册与登录、医生信息管理、科室管理、挂号预约、排队叫号、数据统计等模块。患者可通过系统在线选择科室和医生,完成挂号支付;医生和管理员则能通过后台管理系统查看排班信息、患者队列等。系统还支持多角色权限管理,确保数据安全性和操作合规性。关键词:SpringBoot2、Vue3、MyBatis-Plus、My

By Ne0inhk
深度解析网络编程套接字:从 Socket 底层原理到 Java 高性能实战

深度解析网络编程套接字:从 Socket 底层原理到 Java 高性能实战

【深度长文】攻克网络编程套接字:从底层协议原理到 Java 高性能实战 我的主页:寻星探路个人专栏:《JAVA(SE)----如此简单!!! 》《从青铜到王者,就差这讲数据结构!!!》 《数据库那些事!!!》《JavaEE 初阶启程记:跟我走不踩坑》 《JavaEE 进阶:从架构到落地实战 》《测试开发漫谈》 《测开视角・力扣算法通关》《从 0 到 1 刷力扣:算法 + 代码双提升》 没有人天生就会编程,但我生来倔强!!! 寻星探路的个人简介: 一、 引言:网络编程的时代意义 在数字化浪潮中,我们不仅是信息的消费者,更是信息的传输者。从简单的网页浏览到支撑亿级并发的分布式系统,其底层基石都是网络编程。网络编程的本质,是跨越物理空间的限制,实现不同计算机上进程间的通信。 网络编程打破了单机系统的局限,使得我们可以利用全球范围内的计算资源。本文将基于 Socket 套接字的核心技术,深入剖析传输层两大核心协议 TCP

By Ne0inhk
Java 智能体学习避坑指南:3 个常见误区,新手千万别踩,高效少走弯路

Java 智能体学习避坑指南:3 个常见误区,新手千万别踩,高效少走弯路

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 误区一:过度依赖框架,忽视底层原理 * 1.1 误区表现 * 1.2 问题诊断流程 * 1.3 正确做法:从零构建理解 * ❌ 错误示范:直接使用框架 * ✅ 正确示范:先理解底层,再用框架 * 1.4 学习路径对比 * 误区二:忽视Java特性,照搬Python方案 * 2.1 误区表现 * 2.2 常见错误对比 * 2.3 典型错误案例 * ❌ 错误1:字符串拼接JSON * ✅ 正确1:使用Java类型系统 * ❌ 错误2:同步阻塞调用 * ✅ 正确2:使用Java响应式编程 * 2.4

By Ne0inhk
【Java 开发日记】我们来说一说 Redis IO 多路复用模型

【Java 开发日记】我们来说一说 Redis IO 多路复用模型

目录 前言 一、基础概念 1. 什么是 I/O 多路复用? 2. Redis 的架构选择 二、Redis 中多路复用的实现 1. 支持的底层机制 2. 核心工作流程 三、源码级实现解析 1. 事件循环结构 2. 事件注册过程 3. 事件分发循环 四、性能优化细节 1. 为什么 Redis 能单线程处理高并发? 2. epoll 的优势(Linux环境下) 五、多线程扩展(Redis 6.0+) 六、与其他模型的对比 七、实际监控与调优 1. 监控指标 2. 性能瓶颈识别

By Ne0inhk