下一代广域网技术2:SRv6

news2024/11/19 10:17:18

2.SRv6

SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展。

RFC8402(Segment Routing Architecture)介绍了源路由的机制,即在头节点引入一段有序的Segment List控制流量引入和转发。这个行为可以被看作是在头节点输入一段有序的指令(Instruction),每个指令则代表了在网络中某个特定位置的功能(Function)。功能是节点上本地定义的,例如简单的按照Segment List转发或其他复杂的用户自定义行为。

SRv6(draft-ietf-spring-srv6-network-programming)更强调网络编程,这能将简单和复杂的网络功能结合,能够实现更多的网络目的而不仅仅是转发。

基于IPv6转发面的SRv6,通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header),在SRH中压入一个显式的IPv6地址栈,通过中间节点不断的进行更新目的地址和偏移地址栈的操作来完成逐跳转发。


网络编程的概念

  1. 网络意图–某业务沿着低时延路径转发
  2. SDN控制器–业务需求转换为网络模型、
  3. SRv6段–控制器计算将路径编码为SRv6 Segment插入报文中
  4. 网络设备–网络设备转发报文

SRv6的价值

  • 简化协议、简化网络:去掉LDP、RSVP-TE等MPLS控制协议,网络控制层面协议简化为IGP/BGP。无需维护多种协议状态,并应对复杂的协议状态同步问题
  • SDN事实上的标准应用:兼具全局最优和分布智能的优势,可以实现各种流量工程,根据不同业务提供提供按需的SLA保障
  • 100%拓扑保护:任意拓扑100%保护倒换全覆盖,保护路径最优(与收敛后的路径一致)
  • 强可扩展性:基于源路由技术,每条流的状态仅在头节点维护,中间节点不感知

2.1 IPv6 Segment Routing Header(SRH)

2.1.1 SRH字段

RFC 8754中定义IPv6 SRH扩展头标准,在IPv6报文增加一个SRH扩展头。

在这里插入图片描述

next=43字段 :表明是Routing Extension Header。IPv6的扩展报头类型之一就是路由报头 (Routing Header),其类型号是43,。IPv6源结点使用路由报头列出一个或多个中间结点,使得数据包在去往最终目的地的路径上经过这些结点。因此源结点可以使用路由报头来实现数据包的源路由。

Routing Extension Header的Routing Type建议值为4表明是SR Header,称作SR扩展头或者SRH。
SRH继承路由报头属性:它应该只在数据包中出现一次,并且如果Segment Left = 0,则忽略 (但不丢弃) SRH,并且基于数据包中的下一报头来处理数据包

Segment Left是一个指针,指向下面的地址列表,比如2,就会把指针为2的地址放入到目的地址中,从而影响数据的转发

如果结点收到数据包,并且数据包的目的地址对应于该结点的地址,则该数据包检查扩展报头 (如果存在)。如果扩展报头中含有结点不能识别的路由类型的路由报头,结点的行为取决于 “Segment Left” 的值:
如果Segment Left = 0,则节点忽略路由报头并处理数据包的下一报头。
如果Segment Left != 0,则节点丢失数据包,并且向数据包的源地址发送ICMP “参数问题 (Parameter Problem)” 的消息。

SRH扩展头包含如下内容:

  1. Segment List:有序的SRv6 SID列表
  2. Segments Left(SL):SRv6激活的SID为Slist【SL】。转发过程中通过修改SL,同时更换DIP为活跃的SID来分段完成转发
  3. Tag:用于对数据包分组可以实现基于组的策略。
  4. SRH TLVs(NSH metadata,HMAC TLV,Padding TLV等):可以作为segment list的SID共同使用的全局参数

从SRH看SRv6网络可编程能力

SRv6较于SR-MPLS有更强大的网络编程能力,这种能力体现在SRH中。
整体上看SRH有三层编程空间:

  • 第一层是segment序列。它可以将多个segment组合,形成SRv6路径。这一点和MPLS标签栈类似。
  • 第二层是对SRv6 SID 128bit地址的运用。MPLS标签中四个段是定长的(20bit标签、8bit TTL、3bit TC和1bit栈底标识)。而SRv6 SID的128bit可以灵活分段,并且每个段的长度也可以变化。由此SRv6具备更灵活的可编程能力。
  • 第三层是紧接在segment序列后的可选TLV。报文在网络中传送时,如果需要在转发平面封装一些非规则类的信息,可以通过在SRH中TLV的灵活组合来完成。

2.1.2 SRH处理过程

SRv6路径上分为三种不同角色的结点。

源结点

源结点是可以产生带有SRH的IPv6数据包的任何结点:

产生带有SRH的IPv6数据包的主机
插入SRH或压入新的带有SRH的外部IPv6报头的SRv6域入口节点
当源结点产生数据包时,它会为数据包创建SRH,如下所示,并将其插入报头。

Segment List:采用对路径进行逆序排序的方式编码n个Segment。第一个位置是最后的Segment,最后位置是第一个Segment。
Segment Left:设置为n-1。
First Segment:设置为n-1。
Des-address:数据包地址设置为路径的第一个Segment。
HMAC TLV和 (或) 其他TLV可以添加到SRH。
事实上,SRv6主报头中的目的地址会被编码为active segment对应的IPv6地址。

Segment端节点

带有SRH的IPv6数据包的目的地址如果与结点的地址一样,则该节点称为Segment端节点。

Segment端节点接收到一个带有SRH的数据包时的操作如下:

if “Des-address == self-address” then
— if “Segment Left > 0” then
—— Segment Left - 1 (next Segment become active)
—— update Des-address to active SID (IPv6 address)
—— if “Segment Left ==0” then
——— if “C-flag == 1” then
———— remove SRH
——— endif
—— else
——— process next header
—— endif
— endif
endif

avtive Segment是Segment Left指向的Segment List中的Segment。Active Segment也被设置为数据包的目的地址。在每个Segment端节点处,通过在Segment List中找到的下一个active Segment来更新目的地址。

中转结点

中转结点是数据包路径上的一个结点,但不是Segment端节点。IPv6规范规定中转结点必须将数据包转发到其IPv6目的地址,且不改动SRH。中转结点不需要支持SRv6来转发数据包。

2.2 网络指令:SRv6 Segment

SRv6 Segment是一个128位数,通常也可以称为SRv6 SID或者SID。SID是一种实例化的IPv6地址,此类IPv6地址被赋予唯一的功能,一个SRv6 SID可以表示一个节点/链路,或者一个L2/L3的VPN,又或者一个服务。可以说,通过SRv6 SID可以定义任何的网络功能。

通常一条计算机指令包括两个部分,opcode(操作码)和operand(操作数)。opcode是指令要完成的操作,operand是参加运算的数据及其所在地址。同样SRv6网络编程也要定义网络指令,及SRv6 segment。

SRv6 segment是IPv6地址形式,通常也可以成为SRv6 SID

与SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:

  • Locator(位置标识):网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
  • Function(功能):设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
  • Args(变量):转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。

三部分的表现为LOC:FUNCT:ARG。注意Length<=128。当长度小于128时,保留位用0补齐

Locator

Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点,实现网络指令的可寻址。
Locator标识的位置信息由两个重要的属性:可路由和可聚合。节点配置Locator之后,系统会生成一条Locator网段路由,并且通过IGP在SR域内扩散。网络里其他节点通过Locator网段路由就可以定位到本节点,同时本节点发布的所有SRv6 SID也都可以通过该条Locator网段路由到达。
在华为设备配置中,配置前缀为2001:DB8:ABCD:,长度为64 bit:

[Router] segment-routing ipv6
[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64

Fuction & Argument

Function用来表示该指令要执行的转发动作(实RFC中叫做behavior),相当于计算机指令的Opcode。在SRv6网络编程中,不同的转发行为由不同的Fuction来标示,例如在RFC中定义了公认的End(类似node segment)、End.X(类似邻接segment)、End.DX4、End.DX6等。
Argument是可选的,这是对Function的一个补充。
例如End-x类似SR-MPLS中的Adjacency SID,用于标识某条链路。配置如下:

[Router-segment-routing-ipv6] locator srv6_locator1 ipv6-prefix 2001:DB8:ABCD: 64
[Router-segment-routing-ipv6] opcode ::1 end-x interface g3/0/0 next-hop 2001:DB8:200::1

此Function对应的opcode为::1,此时没有Argument,那么SRv6 SID的只为2001:db8🔡:1
此Function的行为标示将报文从指定接口(G3/0/0),转发给对应的邻居节点(2001:db8:200::1)

SRv6 SID总结

首先它的长度128bit与IPv6地址长度保持了兼容(实际上他们之间没有关系,这只是一种巧妙的设计),这使得SRv6 SID可以作为IPv6地址使用。且现有的IPv6地址也能在读在SRv6中使用。
其次,SRv6中SID中的“Locator+Function”设计实际上是一种“路由+MPLS”的融合。总所周知MPLS是一种“2.5”层技术,SRv6可以类似的看做是一种“3.5”层技术,它同时融合了路由和MPLS技术的优势。
最后SRv6 SID中字段的含义和长度是可自定义的,而非像MPLS标签采用固定格式。这提供了更好的编程灵活性。

2.3 SRv6节点

源节点(SR source node):生成SRv6报文的源节点
中转节点(transit node):转发SRv6报文但不进行SRv6处理的IPv6节点
endpoint节点(SR segment endpoint node):SRv6报文的目的节点

在这里插入图片描述

2.3.1 Source Node

源节点将数据包引导到SRv6 segment list中,如果SRv6 segment list只包含单个SID,并且无需在SRv6报文中添加信息或TLV字段,则SRv6报文的目的地址字段设置为该SID。
源节点可以是生成IPv6报文且支持SRv6的主机,也可以是SRv6域的边缘设备
如图本咧为L3VPNv4 over SRv6 TE policy,即在SRv6上承载IPv4流量。源节点负责将IPv4流量引入隧道,封装SRH

2.3.2 Transit Node

在这里插入图片描述

中转节点是在SRv6报文路径上不参与SRv6处理的IPv6节点,即中转节点只执行普通的IPv6报文转发
当节点收到SRv6报文后解析报文的IPv6目的地址字段。如果IPv6目的地址不是本地配置的SRv6 SID也不是本地接口地址,节点则将SRv6报文当做普通IPv6报文查询路由表执行转发,不处理SRH。
中转节点可以使普通的IPv6节点,也可以是支持SRv6的节点

2.3.3 Endpoint Node

在这里插入图片描述

在SRv6报文转发过程中,节点接收报文的IPv6目的地址是本地配置的SID,则节点被称为Endpoint节点
Endpoint节点需要处理SRv6 SID和SRH

2.3.4 SRH处理过程

在这里插入图片描述

在SRv6转发过程中每经过一个SRv6节点,segment left(SL)字段减1,IPv6 DA信息变换一次,Segment Left和Segment List字段共同决定IPv6 DA信息

与SR-MPLS不同,SRv6是从下到上逆序操作,SRH中的segment在经过节点后也不会被弹出。因此SRv6报头保留了路径信息可以做路径回溯

2.3.5 SRv6指令集

SRH存储了实现网络业务的有序指令列表,相当于计算机的程序。其中的Segment List[0] ~ Segment List[n]相当于计算机程序的指令。第一个需要执行的指令是Segment List[n]。Segment Left相当于计算机程序的PC(Program Counter,程序计数器)指针,指向当前正在执行的指令。

SRv6指令的命名规则

End:是最基础的Segment Endpoint执行指令,表示中止当前指令,开始执行下一个指令。对应的转发动作是将SL值-1,并将SL指向的SID复制到IPv6报文头的目的地址中。
X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。
T:查询路路由表并转发报文。
D:解封装,移除IPv6报文头和与它相关的扩展报文头。
V:根据VLAN查表转发。
U:根据单播MAC查表转发。
M:查询二层转发表进行组播转发。
B6:应用指定的SRv6 Policy。
BM:应用指定的SR-MPLS Policy。

源节点行为

SRv6源节点负责将流量引导到SRv6 policy中,并执行可能的SRH封装。下面列举了SRv6源节点封装报头的几种模式:

源节点行为功能描述
H. Insert为接收到的IPv6报文插入SRH,并查表转发。
H. Insert. Red为接收到的IPv6报文插入Reduced SRH,并查表转发。
H. Encaps为接收到的IP报文封装外层IPv6报文头与SRH,并查表转发。
H. Encaps. Red为接收到的IP报文封装外层IPv6报文头与Reduced SRH,并查表转发。
H. Encaps. L2为接收到的二层帧外封装IPv6报文头与SRH,并查表转发。
H. Encaps. L2. Red为接收到的二层帧外封装IPv6报文头与Reduced SRH,并查表转发。
Endpoint节点行为
指令功能描述应用场景
End把下一个SID复制到IPv6目的地址,进行查表转发指定节点转发,相当于SR-MPLS的Node Segment
End. X根据指定出接口转发报文指定出接口转发,相当于SR-MPLS的Adjacency Segment
End. T在指定的IPv6路由表中进行查表并转发报文用于多路由表转发场景
End. DX2解封装报文,从指定的二层出接口转发L2VPN,例如EVPN VPWS(Virtual Private Wire Service)
End. DX4解封装报文,从指定的IPv4三层邻接转发L3VPNv4,通过指定的IPv4邻接转发到CE
End. DX6解封装报文,从指定的IPv6三层邻接转发L3VPNv6,通过指定的IPv6邻接转发到CE
End. DT6解封装报文,在指定的IPv6路由表中进行查表转发L3VPNv6
End. DT4解封装报文,在指定的IPv4路由表中进行查表转发L3VPNv4
End. B6. Insert插入SRH,应用指定的SRv6 PolicyInsert模式下引流如SRv6 Policy,隧道拼接、SD-WAN选路等
End. BM插入MPLS标签栈,应用指定的SR-MPLS PolicySRv6与SR-MPLS互通场景
Flavors附加行为

Flavors是为了增强End系列指令而定义的附加行为。这些附加行为是可选项,它们将会增强End系列指令的执行动作,满足更丰富的业务需求。

SRv6-Network-Programming中定义了以下附加行为,PSP(Penultimate Segment Pop of the SRH,倒数第二段弹出SRH)、USP(Ultimate Segment Pop of the SRH,倒数第一段弹出SRH)和USD(Ultimate Segment Decapsulation,倒数第一段解封装)。

附加行为功能描述附着的End指令
PSP在倒数第二个Endpoint节点执行移除SRH操作。End、End.X、End.T
USP在最后一个Endpoint节点执行移除SRH操作。End、End.X、End.T
USD在最后一个Endpoint节点执行解封装外层IPv6报文头操作。End、End.X、End.T

2.4 SRv6 Policy

集中式SR-TE功能架构

SR-TE采用集中式架构,控制器收集全局网络拓扑信息和TE信息,集中算路,然后把算路结果下发给网络设备
首先SR也通过IGP来扩散SR信息,然后由头节点建立满足约束的SR路径,但是不需要RSVP-TE信令建立LSP

在这里插入图片描述

控制器

  1. 通过BGP-LS收集网络信息,建立全局TE数据库
  2. 基于约束全局算路
  3. 使用PCEP或BGP SRv6 Policy将算路结果下发设备

网络设备上没有算路功能组件

SRv6 TE Policy简介

SR-TE Policy是SR Policy在流量工程领域的使用。它使用SR的源路由机制,通过在头节点封装一个有序的指令列表来知道报文穿越网络。SR-TE Policy没有传统隧道接口的概念。
SR-TE Policy根据Segment不同分为SR-MPLS TE Policy和SRv6 TE Policy,这里以后者为例
SR Policy是当前主流厂家的实现SR-TE的方式,后续将用SRv6 policy代指SRv6 TE Policy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1863657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第七届IAIC(成都)国际医美产业大会在蓉召开

四川省人民医院新丽美获“中国整形美容协会医疗救助与修复基金-成都市整形修复定点医院”“‘放心美 医无忧’全过程保障示范医院”两块授牌 2024年6月24日&#xff0c;第七届IAIC&#xff08;成都&#xff09;国际医美产业大会暨“医美之都”高峰会议省医院新丽美整形修复基地…

CesiumJS加载天地图数据后,可以实现什么效果?

说起地图&#xff0c;大家耳熟能详的百度地图、高德地图、腾讯地图等&#xff0c;由于授权的原因&#xff0c;使用起来心惊胆战的&#xff0c;而天地图就没有这方面的困扰&#xff0c;本文介绍下如何在cesium中时候用天地图数据&#xff0c;已经能够实现哪些交互效果。 一、关…

无限制数字(仅仅int类型)的大小的自然排序算法

直接上代码&#xff1a; #include <iostream> #include <vector> #include <string> #include <algorithm> #include <cctype>// Function to compare two strings in a natural way bool naturalCompare(const std::string& a, const std:…

录制视频怎么操作?手把手教会你!

在这个互联网科技高速发展的时代&#xff0c;录制视频已经成为了人们生活中一个不可或缺的技能。无论是记录游戏精彩瞬间、制作教程、分享生活趣事&#xff0c;还是进行在线教学&#xff0c;录制视频都是一种非常直观有效的方式。可是录制视频怎么操作呢&#xff1f;本文将介绍…

Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南

系列文章目录 Vue核心指令解析&#xff1a;探索MVVM与数据操作之美 文章目录 系列文章目录前言一、Vue生命周期是什么&#xff1f;二、钩子函数讲解1. beforeCreate( 创建前 )2. created ( 创建后 &#xff09;3. beforeMount&#xff08;挂载前&#xff09;4. mounted&#xf…

第11章 规划过程组(制订项目管理计划)

第11章 规划过程组&#xff08;一&#xff09;11.1制订项目管理计划&#xff0c;在第三本版教材第368~372页&#xff1b; 文字图片音频方式 视频16 第一个知识点&#xff1a;主要输入 1、事业环境因素 政府或行业标准(如产品标准、质量标准、安全标准和工艺标准) 法律法规要求…

乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会圆满落幕

2024年6月21日&#xff0c;乐乐趣《牛津话科学 侃侃闪闪的科学大冒险》新书分享会在BIBF绘本展活动区举行。牛津大学出版社中国区首席内容官孙赫男、北京师范大学教育学部副教授张进宝、中国美协漫画艺术委员会秘书长王立军、荣信文化副总经理兼乐乐趣总编辑孙肇志围绕孩子的科…

【Python机器学习】聚类算法的对比与评估——在人脸数据集上比较算法

数据探查&#xff1a; 我们将k均值、DBSCAN和凝聚聚类算法应用于Wild数据集中的Labeled Faces&#xff0c;并查看它们是否找到了有趣的结构。我们将使用数据的特征脸表示&#xff0c;它由包含100个成分的PCA(whitenTrue)生成&#xff1a; peoplefetch_lfw_people(data_home &…

ChatGPT API技术教程OpenAI APIKey在线对接-Chat Completion对象

表示模型根据提供的输入返回的聊天完成响应。 {"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-3.5-turbo-0125","system_fingerprint": "fp…

锂价跌至近3年最低,大型能源公司已出手抄底,巴菲特也在参与

长远来看&#xff0c;随着电动化进程的深入推进&#xff0c;锂的战略地位依然不可替代。但短期内&#xff0c;供需失衡和价格波动可能会持续&#xff0c;行业参与者需要调整策略以应对当前的挑战。 锂业&#xff0c;正经历自2021年以来最为严峻的调整期。作为电动汽车电池的关…

SpringBoot学习03-[Spring Boot与Web开发]

Spring Boot与Web开发 RestTemplateMockMvc在SPringBoot中使用 SpringBoot整合swagger2SpringBoot的springmvc自动配置底层原理包含ContentNegotiatingViewResolver和BeanNameViewResolverContentNegotiatingViewResolverBeanNameViewResolver 支持提供静态资源&#xff0c;包括…

Inner Transitions

Inner Transitions 内部转换是指不退出源状态的转换。当为具有异或分解的超状态定义时&#xff0c;内部转换是强大的。 使用内部转换可以极大地简化Stateflow图表&#xff0c;如以下示例所示&#xff1a; 使用内部转换之前 使用内部转换到连接结点之后 使用内部转换到历史节点…

【线上】如何解决积压消费?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ Hello, 各位亲爱的读者朋友们!我是你们的小米,一个积极活泼的技术分享达人,今天我们要聊聊一个大家在分布式系统中经常遇到的棘手问题…

Maven私服批量上传pom和jar实操

Maven私服上传pom和jar实操-CSDN博客 Maven私服上传jar实操_maven fakepath-CSDN博客 之前写过两篇向maven私服上传jar的操作&#xff0c;看到阅读量还可以&#xff0c;觉得应该有很多人有这个需求&#xff0c;所以这次再放一个大招&#xff0c;通过批量的方式向私服传jar和p…

STM32F4 STD标准库串口接收例程

STM32F4 STD标准库串口接收中断空闲中断例程 &#x1f516;工程基于STM32F446 ✨用惯了STM32CubeMX傻瓜式配置&#xff0c;突然改用标准库写代码&#xff0c;初始化外设内容&#xff0c;总是丢三落四的。 本文将提供3种串口接收和发送模式&#xff1a;串口接收中断空闲中断、串…

PostgreSQL 用户及授权管理 06:启用 SSL 及验证

PostgreSQL 用户及授权管理 06&#xff1a;启用 SSL 及验证 安全在外企中是非常受重视的&#xff0c;一般外企都会要求所有可以使用加密的地方都使用加密。本小节我们启用 PostgreSQL 的 SSL 加密连接并进行抓包验证。 SSL 连接加密 安全套接字层 (SSL) 允许 PostgreSQL 接受…

Vite响应Ajax请求

Vite响应Ajax请求 陈拓 2024/06/20-2024/06/24 1. 概述 http-server、live-server 等常用于本地测试和开发的http服务器不能很好的支持 ES 模块&#xff0c;在测试ES 模块时浏览器控制台经常显示错误&#xff1a; Failed to load module script: Expected a JavaScript modu…

element-ui侧边栏:default-openeds

element-ui侧边栏实现路由跳转后展开对应侧边栏&#xff1a;default-openeds 当菜单是在本地写死时&#xff0c;如果想展开第一块内容、里面就只写1 :default-openeds"[‘1’]" 当菜单是动态获取时&#xff0c;点击跳转之后如何展开对应的菜单&#xff0c;在watch中监…

three.js围绕中心点的旋转动画代码和案例

在 Three.js 中&#xff0c;可以通过设置对象的旋转中心点来实现围绕一个中心点旋转。具体的实现步骤如下&#xff1a; 首先&#xff0c;创建一个场景、相机和渲染器&#xff1a; // 创建一个场景 var scene new THREE.Scene();// 创建一个透视相机 var camera new THREE.P…

Vite打包速度为什么比webpack快,打包的优劣势在哪里?

大家都有被webpack打包速度搞崩溃的时候&#xff0c;修改一处地方&#xff0c;想预览效果&#xff0c;要等上半天。 Vite比Webpack快的原因 ESM&#xff08;ES Module&#xff09;原生支持&#xff1a; Vite基于ESM构建&#xff0c;利用浏览器原生支持的ESM模块加载方式&…