生成树(STP)

news2024/11/15 3:33:12

1.详细说明STP的工作原理

在二层交换网络中,逻辑的阻塞部分的接口,实现从跟交换机到所有节点唯一的路径称为最佳路径,生成一个没有环路的拓扑。当最佳路径出现故障时,个别被阻塞的接口将打开,形成备份链路。

2. STP的接口状态有哪些,每个状态的作用是什么?

STP的接口状态

状态名称状态描述
禁用(Disable)该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down
阻塞(Blocking)当该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习
侦听(Listening)当接口处于该状态时,表明STP初步认定该接口为根接口和指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习
学习(Learning)当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧时会进行MAC地址学习
转发(Forwarding)处于该状态的接口可以正常的收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态

3. 说明STP在结构突变时的表现

结构突变主要有三种故障:根桥故障、直连链路故障、非直连链路故障

(1)根桥故障

<1> 根桥故障

  • 在稳定的STP网络中,非根桥会定期收到来自根桥的BPDU报文
  • 如果根桥发生了故障,停止发送BPDU,下游交换机就无法收到来自根桥的BPDU报文
  • 如果下游的交换机一直收不到BPDU报文,Max Age计时器(缺省:20s)就会超时,从而导致已经手打的BPDU报文失效。此时,非根桥会互相发送配置BPDU,重新选举新的根桥。

<2> 端口状态

SW3的预备端口,20S会从Blocking状态进入到Listening状态,在进入Learning状态,最终进入Forwarding状态,进行用户流量的转发。

<3> 收敛时间

根桥故障会导致50s左右的恢复时间,等于Max Age加上两杯的Forward Delay收敛时间

(2)直连链路故障

<1> 直连链路故障

  • 当两台交换机之间用两条链路互连时,其中一条是主用链路,另一条为备用链路。
  • 当网络稳定时,交换机SW2会检测到根端口的链路发生故障,则其备用端口会进入用户流量转发状态。

<2> 端口状态

备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态

<3> 收敛时间

直连链路故障,备用端口会经过30s后恢复转发状态

(3)非直连链路故障

<1> 非直连故障

  • 在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文
  • 若SW1和SW2之间的链路发生了某种故障(非物理故障),因此导致SW2一直收不到来自根桥的SW1的BPDU报文,Max Age计时器(缺省:20s)就会超时,从而导致已经收到的BPDU报文失效。
  • 此时,非根桥SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥
  • 在此期间,SW3的预备端口一直收不到包含根桥的BPDU,Max Age计时器超市后,端口进入到Listening状态,开始向SW2“转发”从上游发来的包含根桥ID的BPDU
  • 因此,Max Age计时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,再进行STP重新计算,SW2发现SW3发来的BPDU更优,放弃宣称自己是根桥,并且重新定义端口角色。

<2> 端口故障

SW3的预备端口20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发

<3> 收敛时间

非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forwarding Delay收敛时间

4. RSTP对于STP的改进项有哪些?仔细说明

(1)改进点1:端口角色

通过对端口的增补,简化了生成树协议的理解便于部署

<1> RSTP的端口角色一共有四种:根端口、指定端口、Alternate端口和Backup端口

<2> 根端口和指定端口的作用和STP中相同。Alternate端口和Backup端口的作用描述如下:

从配置BPDU的报文发送角度来看:

  • Alternate端口就是由于学习到其他网桥发送的配置BPDU报文而阻塞的端口
  • Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口

从用户流量角度来看:

  • Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
  • Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路

<3> 给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程

(2)改进点2:端口状态

RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分

  • Discarding状态:不转发用户流量也不学习MAC地址
  • Learning状态:不转发用户流量但是学习MAC地址
  • Forwarding状态:既转发用户流量又学习MAC地址

(3)改进点3:RST  BPDU

<1> RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色

<2> 除了保证和STP格式基本一致之外,RSTP做了如下变化:

  • type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃
  • flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU

<3> RST BPDU的报文格式

<4> RST BPDU与STP配置和BPDU报文格式的不同点。包括:BPDU类型和Flag字段

1> BPDU类型,1 Byte,RST BPDU的类性质为0x02

2> 标志,1 Byte,包括:

bit 7:TCA,表示拓扑变化确认
bit 6: Agreement,表示同意,用于P/A机制;. bit 5: Forwarding,表示转发状态

bit 4:Learning,表示学习状态
bit 3和bit2:表示端口角色,00表示未知端口,01表示替代或备份端口,10表示根端 口,11表示指定端口
bit 1: Proposal,表示提议,用于P/A机制;. bit 0: TC,表示拓扑变化。

(4)改进点4:配置BPDU的处理

(5)改进点5:快速收敛机制

注意:这个P/A机制是RSTP完成快速收敛的核心手段,因为他改变了STP依照计时器收敛的方法,可以理解为完成选举后立即切换状态,完成收敛。

  • 事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个ForwardDelay所有端口才能进行转发
  • 而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口进入Forwarding状态的速度

(6)改进点6:拓扑变更机制

<1> 在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,在由根桥来通知拓扑变更,泛洪TC置为的配置BPDU

<2> 在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪

(7)改进点7:保护功能

<1> BPDU保护

在交换设备上,通常将直接与用户终端(如PC机)或文件服务器等非交换设备相连的端口 配置为边缘端口。

如上图所示:

  • sw3与某主机互联,并设置该互联端口为边缘端口。
  • 后来该主机被恶意用户侵占,并伪造RST BPDU攻击SW3,因此边缘端口会收到RST BPDU,失去边缘端口特性,并进行生成树计算

<2> 根保护

由于维护人员的错误配置或网络中的恶意攻击,根桥有可能会收到优先级更高的RST BPDU,使得根 桥失去根地位,从而引起网络拓扑结构的错误变动。这种拓扑变化,会导致原来应该通过高速链路 的流量被牵引到低速链路上,造成网络拥塞。

如图所示:

  • 网络稳定时,SW1为根桥,向下游设备发送最优RST BPDU。
  • 如果SW2被恶意用户侵占,例如恶意修改SW2的桥优先级,使得SW2的桥优先级优于sw1,此时SW2会主动发送自己的RST BPDU。
  • 当SW1的指定端口收到该RST BPDU后,会重新进行生成树计算,而SW1也会失去根桥的地位,引起拓扑变动。

<3> 环路保护

在运行RSTP的网络中,根端口状态是依靠不断接收来自上游交换设备的RSTBPDU维持。当由于链 路拥塞或者单向链路故障导致根端口收不到来自上游交换设备的RST BPDU时,此时交换设备会重 新选择根端口。

如图所示:

当SW1和SW3之间的链路发生单向链路故障时,SW3由于根端口在超时时间内收不到来 自上游设备的BPDU报文,Alternate端口切换成根端口,根端口切换成指定端口,从而形成了环 路。

<4> 防TC-BPDU攻击

交换设备在接收到TC置位的RST BPDU报文后,会执行MAC地址表项的删除操作。如果有人伪造TC置位的RST BPDU报文恶意攻击交换设备时,交换设备短时间内会收到很多RST BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。

如图所示:

如果SW3被恶意用户侵占,伪造大量TC置位的RST BPDU并向外发送。SW2收到这些RST BPDU后,会频繁执行MAC地址表项的删除操作,形成巨大负担。

5.生成树实验

(1)接入层

[sw1]vlan 2
[sw1-vlan2]q
[sw1]port-group group-member g0/0/3 g0/0/4	
[sw1-port-group]port link-type access 
[sw1-GigabitEthernet0/0/3]port link-type access 
[sw1-GigabitEthernet0/0/4]port link-type access 
[sw1-port-group]port default vlan 2
[sw1-GigabitEthernet0/0/3]port default vlan 2
[sw1-GigabitEthernet0/0/4]port default vlan 2
[sw1]int g0/0/1
[sw1-GigabitEthernet0/0/1]port link-type trunk 	
[sw1-GigabitEthernet0/0/1]port trunk allow-pass vlan 2
[sw1-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw1]int g0/0/2
[sw1-GigabitEthernet0/0/2] port link-type trunk
[sw1-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw1-GigabitEthernet0/0/2] port trunk allow-pass vlan 2
[sw2]vlan batch 3 to 4
[sw2]int g0/0/3
[sw2-GigabitEthernet0/0/3]port link-type access 	
[sw2-GigabitEthernet0/0/3]port default vlan 3
[sw2]int g0/0/4
[sw2-GigabitEthernet0/0/4]port link-type access 	
[sw2-GigabitEthernet0/0/4]port default vlan 4
[sw2]int g0/0/1
[sw2-GigabitEthernet0/0/1]port link-type trunk 
[sw2-GigabitEthernet0/0/1]port trunk allow-pass vlan 3 4
[sw2-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw2]int g0/0/2
[sw2-GigabitEthernet0/0/2] port link-type trunk
[sw2-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw2-GigabitEthernet0/0/2] port trunk allow-pass vlan 3 to 4

(2)汇聚层

[sw3]vlan batch 2 to 4
[sw3]vlan 100
[sw3-vlan100]q
[sw3]int g0/0/5
[sw3-GigabitEthernet0/0/5]port link-type trunk 
[sw3-GigabitEthernet0/0/5]port trunk allow-pass vlan 2
[sw3-GigabitEthernet0/0/5]undo port trunk allow-pass vlan 1
[sw3]int g0/0/4
[sw3-GigabitEthernet0/0/4]port link-type trunk 
[sw3-GigabitEthernet0/0/4]port trunk allow-pass vlan 3 4
[sw3-GigabitEthernet0/0/4]undo port trunk allow-pass vlan 1
[sw3]port-group group-member g0/0/2 g0/0/3
[sw3-port-group]port link-type trunk
[sw3-GigabitEthernet0/0/2]port link-type trunk
[sw3-GigabitEthernet0/0/3]port link-type trunk
[sw3-port-group] undo port trunk allow-pass vlan 1
[sw3-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw3-GigabitEthernet0/0/3] undo port trunk allow-pass vlan 1
[sw3-port-group] port trunk allow-pass vlan 2 to 4
[sw3-GigabitEthernet0/0/2] port trunk allow-pass vlan 2 to 4
[sw3-GigabitEthernet0/0/3] port trunk allow-pass vlan 2 to 4
[sw3]dhcp enable
[sw3]int vlan 100
[sw3-Vlanif100]ip add 10.1.1.1 24
[sw3-Vlanif100]dhcp select interface 
[sw3]int g0/0/1
[sw3-GigabitEthernet0/0/1]port link-type trunk 
[sw3-GigabitEthernet0/0/1]port trunk allow-pass vlan 100
[sw3-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
[sw4]vlan batch 2 to 4
[sw4]vlan 100
[sw4-vlan200]q
[sw4]int g0/0/4
[sw4-GigabitEthernet0/0/4] port link-type trunk
[sw4-GigabitEthernet0/0/4] undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/4] port trunk allow-pass vlan 2
[sw4]int g0/0/5
[sw4-GigabitEthernet0/0/5] port link-type trunk
[sw4-GigabitEthernet0/0/5] undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/5] port trunk allow-pass vlan 3 to 4
[sw4]port-group group-member g0/0/2 g0/0/3
[sw4-port-group]port link-type trunk
[sw4-GigabitEthernet0/0/2]port link-type trunk
[sw4-GigabitEthernet0/0/3]port link-type trunk
[sw4-port-group]undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/2]undo port trunk allow-pass vlan 1
[sw4-GigabitEthernet0/0/3]undo port trunk allow-pass vlan 1
[sw4-port-group]port trunk allow-pass vlan 2 to 4
[sw4-GigabitEthernet0/0/2]port trunk allow-pass vlan 2 to 4
[sw4-GigabitEthernet0/0/3]port trunk allow-pass vlan 2 to 4
[sw4]dhcp enable 
[sw4]int vlan 200
[sw4-Vlanif200]ip add 10.1.2.1 24
[sw4-Vlanif200]dhcp select interface
[sw4]int g0/0/1
[sw4-GigabitEthernet0/0/1]port link-type trunk 
[sw4-GigabitEthernet0/0/1]port trunk allow-pass vlan 200
[sw4-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1

(3)核心层

[sw5]vlan 100
[sw5-vlan100]q
[sw5]vlan 200
[sw5-vlan200]q
[sw5]int vlan 100
[sw5-Vlanif100]ip add 10.1.1.2 24
[sw5]int vlan 200
[sw5-Vlanif200]ip add 10.1.2.2 24
[sw5]int g0/0/1
[sw5-GigabitEthernet0/0/1] port link-type trunk
[sw5-GigabitEthernet0/0/1] undo port trunk allow-pass vlan 1
[sw5-GigabitEthernet0/0/1] port trunk allow-pass vlan 100
[sw5]int g0/0/2
[sw5-GigabitEthernet0/0/2] port link-type trunk
[sw5-GigabitEthernet0/0/2] undo port trunk allow-pass vlan 1
[sw5-GigabitEthernet0/0/2] port trunk allow-pass vlan 200

(4)配置生成树

[sw3]stp mode stp ---配置生成树的工作模式
[sw4]stp mode stp 
[sw2]stp mode stp 
[sw1]stp mode stp 
[sw3]stp root primary ---配置当前设备为根桥
[sw4]stp root secondary ---配置当前交换机为备份根桥

由于默认所有接口都要参与生成树,所以将SW3和SW4的G0/0/1接口的生成树关闭,也将连接PC机接口的生成树关闭

[sw3]int g0/0/1
[sw3-GigabitEthernet0/0/1]undo stp enable---关闭接口的生成树
[sw4]int g0/0/1	
[sw4-GigabitEthernet0/0/1]undo stp enable
[sw1]int g0/0/3
[sw1-GigabitEthernet0/0/3]undo stp enable
[sw1]int g0/0/4
[sw1-GigabitEthernet0/0/4]undo stp enable
[sw2]int g0/0/3
[sw2-GigabitEthernet0/0/3]undo stp enable
[sw2]int g0/0/4
[sw2-GigabitEthernet0/0/4]undo stp enable 

查看SW1和SW2的端口状态

查看SW4的端口状态

(5)将根端口修改为g0/0/4

  • 修改RPC
[sw4]int g0/0/3---在根桥收到的接口上修改RPC
[sw4-GigabitEthernet0/0/3]stp cost 1---将RPC修改为1

查看SW4的端口状态

  • 修改PID
[sw3]int g0/0/3---在根桥发送接口上修改PID
[sw3-GigabitEthernet0/0/3]stp port priority 0---将PID修改为1(默认步长为16的倍数)

查看SW4的端口状态

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

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

相关文章

Redis的发布和订阅

Redis的发布和订阅 什么是发布和订阅 redis发布订阅&#xff08;pub/sub&#xff09;是一种消息通信模式&#xff1a;发布者&#xff08;pub&#xff09;发布消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消息。 redis客户端可以订阅任意数量的频道。 redis的发布…

vue3【计算属性与监听-详】

一、计算属性--简写形式 需求&#xff1a;通过计算属性&#xff0c;计算一个人的全名。 <template><h1>基本信息</h1>姓&#xff1a;<input type"text" v-model"personInfo.firstName"><hr>名&#xff1a;<input type&…

综合实验高级网络—— 配置三层 热备等网络技术

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

傅里叶级数与傅里叶变换

一、Games101 中出现的傅里叶变换(FT)的简单推导 到底什么是傅里叶变换&#xff1a;它的物理意义是什么&#xff0c;公式又从何而来&#xff1f; 以下的内容出现在 Games101 中的第八章&#xff1a;光栅化&#xff08;深度测试与抗锯齿&#xff09; 中&#xff0c;课程中这一部…

OpenAI Whisper论文笔记

OpenAI Whisper论文笔记 OpenAI 收集了 68 万小时的有标签的语音数据&#xff0c;通过多任务、多语言的方式训练了一个 seq2seq &#xff08;语音到文本&#xff09;的 Transformer 模型&#xff0c;自动语音识别&#xff08;ASR&#xff09;能力达到商用水准。本文为李沐老师…

Spring源码-doCreateBean

先看段代码&#xff1a; Overrideprotected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] args)throws BeanCreationException {if (logger.isDebugEnabled()) {logger.debug("Creating instance of bean " beanName "&qu…

Yolov5(v5.0) + pyqt5界面设计

1.下载安装pyqt5工具包以及配置ui界面开发环境 pip install PyQt5 pip install PyQt5-tools 2.点击File->Settings->External Tools进行工具添加&#xff0c;依次进行Qt Designer、PyUIC环境配置. 2.1 添加QtDesigner Qt Designer 是通过拖拽的方式放置控件&#xff0c…

GUI编程--PyQt5--QWidget2

文章目录事件事件传递父子关系扩展Z轴的层级关系事件 自定义控件类&#xff08;QWidget&#xff09;&#xff0c;然后重写对应的事件方法即可。 控件显示时触发&#xff0c;showEvent(QShowEvent) 控件关闭时触发&#xff0c;closeEvent(QCloseEvent) 事件传递 案例&#xff1…

MYSQL -- Binlog数据还原

对表误删或执行缺少条件的修改 SQL 导致修改了表内其他数据时&#xff0c;我们需要想办法将数据恢复回来。 先创建两个测试表 table_1 CREATE TABLE table_1 (id int(0) NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL D…

SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战

一、前言 在面试中&#xff0c;经常会有一道经典面试题&#xff0c;那就是&#xff1a;怎么防止接口重复提交&#xff1f; 小编也是背过的&#xff0c;好几种方式&#xff0c;但是一直没有实战过&#xff0c;做多了管理系统&#xff0c;发现这个事情真的没有过多的重视。 最近…

[附源码]java毕业设计酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

K8s为何需要Pod

Pod是K8s中的最小API对象&#xff0c;更专业的表述是&#xff0c;Pod是K8s项目的原子调度单位&#xff0c;Pod可以看做是一个进程组&#xff0c;K8s则是操作系统 一&#xff0c; 问题 现在有三个服务需要部署在同一个节点上&#xff0c;A占用1G内存&#xff0c;B &#xff0c;…

【Maven】使用maven profile 动态激活不同环境、依赖打包部署

使用maven profile 动态激活不同环境、依赖打包部署前言一、配置二、激活Profile三、动态依赖 示例一些其他参考&#xff1a;前言 在开发过程中&#xff0c;我们的软件会面对不同的运行环境&#xff0c;比如开发环境、测试环境、生产环境&#xff0c;而我们的软件在不同的环境中…

Java方法与方法重载

目录 如何使用带参数的方法 综合案例 常见错误2-1 常见错误2-2 方法传参 构造方法 构造方法重载 this的用法 方法重载 成员变量和局部变量 成员变量和局部变量的区别 如何使用带参数的方法 1、定义带参数的方法 语法&#xff1a;<访问修饰符> 返回类型 <方…

网络 IO 演变过程

在互联网中提起网络&#xff0c;我们都会避免不了讨论高并发、百万连接。而此处的百万连接的实现&#xff0c;脱离不了网络 IO 的选择&#xff0c;因此本文作为一篇个人学习的笔记&#xff0c;特此进行记录一下整个网络 IO 的发展演变过程。以及目前广泛使用的网络模型。 1.网…

服务端Skynet(一)——源码浅析

服务端Skynet(一)——源码浅析 文章目录服务端Skynet(一)——源码浅析1、skynet的本质2、skynet基本的数据结构1、skynet_modules管理模块2、skynet_context模块3、skynet_message模块3、skynet启动服务步骤4、启动服务例子(logger)参考文献&#xff1a;skynet设计综述 skynet…

实战Netty!基于私有协议,怎样快速开发网络通信服务?

前言 今天我们一起来来聊聊怎么使用netty。 在工作中&#xff0c;我经常使用netty开发一些服务&#xff0c;掌握netty的工作原理&#xff0c;开发一些服务端以及客户端是非常简单&#xff0c;本篇文章&#xff0c;我们就以具体的协议来进行一个简单的服务的开发。 正文 私有…

一键汇总报告模型可能会需要修改的地方

文章目录如何修改文件夹地址为指定地址?如何取消清除提醒, 避免每次点击弹窗选择?如何取消完成弹窗提醒?如果觉得反复打开工作簿太闪怎么办?如果有些报告的内容页不在第一个Sheet怎么办?如果想修改字段怎么办?运行程序前不想清除原有内容怎么办?报告页有内容但是没有被抓…

混合整数规划的机组组合附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …