路由与OSPF学习
【路由是跨网段通讯的必要条件】
路由指的是在网络中,数据包从源主机传输到目的主机的路径选择过程。
路由通常涉及以下几个关键元素:
1.路由器:是一种网络设备,负责将数据包从一个网络传输到另一个网络。路由器根据路由表来决定数据包的下一跳。
2.路由表:是路由器中存储的一张表,包含了到达不同网络的目的地地址和相应的下一跳信息。
3.路由协议:分为动态路由协议和静态路由协议。
(1)动态路由协议允许路由器自动地相互通信,共享路由信息,并根据网络的变化更新路由 表。
优点:
1.自适应性与灵活性:动态路由协议能够自动适应网络结构的变化,如链路故障、网络扩展等,自动重新计算路由,无需人工干预。这使得网络具有更高的灵活性和可扩展性。
2.复杂网络管理:在大型网络或复杂网络环境中,动态路由协议能够有效地管理路由信息,减少管理员的工作量。
3.资源优化:动态路由协议可以根据网络的状态和流量负载自动选择最佳路径,优化带宽利用率和网络性能。
4.故障恢复:动态路由协议能够快速检测到网络故障,并自动寻找备用路径,实现快速故障恢复,提高网络的可靠性。
5.路由信息共享:动态路由协议允许路由器之间共享路由信息,使得整个网络中的路由器都能够获得全局的网络视图。
6.支持多种路由算法:动态路由协议支持多种路由算法,如距离矢量路由算法(如RIP)和链路状态路由算法(如OSPF),可以根据网络需求选择合适的算法。
7.网络冗余:动态路由协议可以通过运行多条路径来实现网络冗余,提高网络的可用性。
8.易于网络扩展:动态路由协议可以轻松地适应网络的增长和变化,无需重新配置静态路由。
动态路由的这些优点使其成为中大型网络和复杂网络环境中的首选路由方案。限制:
动态路由协议也需要更多的计算资源和网络带宽,且在安全性方面可能不如静态路由。
(2)静态路由则是网络管理员手动配置的,不会自动更新。
优点:
1.简单性与低开销:静态路由的配置相对简单,不需要复杂的协议配置,只需手动指定路径。它适用于小型网络或拓扑稳定的环境。此外,静态路由不占用带宽、CPU或内存进行路由计算或信息交换,适合资源受限的设备。
2.精确控制与确定性:管理员可以完全决定数据流向,避免动态路由的不可预测性。这在金融、工业控制等对路径稳定性要求高的场景中尤为重要。同时,手动配置的路径不易因协议错误引发路由环路。
3.安全性更高:静态路由不广播路由信息,减少了被攻击的风险,如路由欺骗或泛洪攻击。
4.高优先级与冗余备份:静态路由默认优先级高于大多数动态路由,确保关键路径优先生效。通过配置浮动静态路由(设置更高管理距离),可以在主链路故障时自动切换到备份路径,提供冗余。
5.特定场景的必要性:在末节网络(Stub Network)或网络边界等场景中,静态路由是最高效的选择。例如,分支机构通过默认路由指向总部,或企业网与ISP之间的默认路由。
6.临时故障排除:在网络故障时,管理员可手动配置静态路由绕过问题区域,作为临时解决方案。
静态路由的这些优点使其在某些特定网络环境中成为合适的选择。限制:
在复杂或动态变化的网络中,通常需要结合动态路由协议以实现灵活性和扩展性。
4.IP地址:是网络中设备的唯一标识,用于定位设备在网络中的位置。
5.子网掩码:用于区分一个IP地址中的网络部分和主机部分。
6.网络拓扑:是指网络中设备之间的连接方式,包括物理拓扑和逻辑拓扑。
7.路由算法:是路由器用来确定最佳路径的算法,常见的有RIP、OSPF、BGP等。
8.收敛:是指在网络中所有路由器更新其路由表,达到一致状态的过程。
9.路由环路:是一种网络故障,数据包在网络上循环传输,无法到达目的地。
10.路由器ID(Router ID):在OSPF等路由协议中,每个路由器都需要有一个唯一的ID来标识自己。
动态路由
分类:
1.基于网络范围进行网络划分
(将网络本身划分为一个个AS自治系统,方便管理和维护)
-
内部网关协议(IGP):用于在同一个自治系统(AS)内部传递路由信息。常见的IGP包括:
-
距离矢量路由协议(Distance Vector Routing Protocols):如路由信息协议(RIP)和增强型内部网关路由协议(EIGRP)。这些协议使用距离矢量算法,根据跳数(hop count)或成本(cost)来选择路由。
-
链路状态路由协议(Link State Routing Protocols):如开放最短路径优先协议(OSPF)和中间系统到中间系统协议(IS-IS)。这些协议使用链路状态算法,通过交换网络拓扑信息来计算最短路径。
-
-
外部网关协议(EGP):用于在不同自治系统(AS)之间传递路由信息。最常见的外部网关协议是边界网关协议(BGP)。BGP是一种路径矢量协议,它考虑了路径的多个属性,如AS路径长度、路由器ID等,来选择最佳路由。
2.基于传递数据包是否携带子网掩码:
-
有类别的动态路由协议(Classful Dynamic Routing Protocols):这类协议在传递路由信息时,不携带子网掩码信息。它们假设网络是按照传统的A、B、C类IP地址进行划分的。典型的有类别动态路由协议包括:
- 路由信息协议第1版(RIP Version 1):它是最早的动态路由协议之一,基于距离矢量算法,以跳数为度量标准。
-
无类别的动态路由协议(Classless Dynamic Routing Protocols):这类协议在传递路由信息时,会携带子网掩码信息,因此它们能够支持 Variable Length Subnet Masks (VLSM) 和路由汇总。无类别动态路由协议更加灵活,能够更有效地利用IP地址空间。典型的无类别动态路由协议包括:
- 路由信息协议第2版(RIP Version 2):它是RIP的改进版,支持无类别路由和VLSM。
- 增强型内部网关路由协议(EIGRP):它是一种高级距离矢量路由协议,支持无类别路由和多种度量标准。
- 开放最短路径优先协议(OSPF):它是一种链路状态路由协议,支持无类别路由和VLSM。
- 边界网关协议(BGP):它是互联网的核心路由协议,支持无类别路由和复杂的路由策略。
如何判断一款动态路由协议的好坏
-
选路算法: RIP使用贝尔曼-福特算法(跳数:到达目标网段经过的路由器数量) 【补充:RIP协议传递COST值的方法---本地路由表中COST值+1】 OSPF使用最短路径优先(SPF)算法(收集拓扑信息->构建有向图->转化为最短路径树->生成路由表)
-
收敛速度: 收敛是指网络中所有设备获取到整个网络所有需要获取的路由信息的过程。 RIP计时器:30S周期计时器,180S失效计时器,120S垃圾回收计时器 OSPF计时器:hello时间10S(广播和多点接入网络)/30S(非广播多点接入网络),dead时间为4倍的hello时间
-
资源占用: OSPF的优化措施。
OSPF的优化措施:
链路状态数据库(LSDB)的压缩: OSPF使用LSDB来存储网络中的链路状态信息。为了减少内存使用,LSDB中的信息被压缩存储。例如,每个链路状态广告(LSA)只存储一次,即使它被多个路由器所知。
部分更新: 当网络拓扑发生变化时,OSPF不会发送整个LSDB的更新,而是只发送发生变化的部分。这减少了网络带宽的占用。
Hello包的间隔: OSPF使用Hello包来建立和维护邻居关系。Hello包的发送间隔可以根据网络的需求进行调整,以减少CPU和带宽的占用。
多播和单播: 在广播和多播网络中,OSPF使用多播地址来发送Hello包和LSU。这减少了不必要的广播风暴,节省了网络带宽。 在非广播多点接入网络中,OSPF使用单播地址来发送这些包。
链路状态刷新: OSPF不会频繁地刷新LSA,除非网络拓扑发生变化。这减少了CPU和带宽的占用。
区域划分: OSPF支持区域划分,这允许LSA只在特定的区域内传播,而不是在整个网络中传播。这减少了LSDB的大小和网络带宽的占用。
路由归纳: OSPF支持路由归纳,这允许将多个子网汇总为一个较大的网络。这减少了路由表的大小和CPU的占用。
OSPF
OSPF的V1、V2版本支持IPV4,V3版本支持IPV6
OSPF协议使用组播地址来传递其控制平面数据包,以减少网络中的不必要的流量。
在OSPF中,主要有两个组播地址且被用于不同的目的:
224.0.0.5 - All OSPF Routers:这个组播地址被用于向网络中的所有OSPF路由器发送信息。当OSPF路由器发送Hello包来建立和维护邻居关系时,它们会使用这个地址。此外,当路由器发送链路状态更新(LSUs)来通告网络拓扑变化时,也会使用这个地址,除非路由器正在使用组播抑制功能。
224.0.0.6 - All DR/BDR Routers:这个组播地址被用于向网络中的所有指定路由器(DR)和备用指定路由器(BDR)发送信息。在广播和多点接入网络中,OSPF选举一个DR和一个BDR来代表网络中的所有路由器交换链路状态信息。使用这个组播地址可以确保只有DR和BDR会收到这些信息,从而减少不必要的网络流量。
OSPF的工作包
-
Hello包:用于发现和维持OSPF邻居关系。Hello包包含了路由器的ID、区域ID、认证信息、Hello/Dead间隔等参数。Hello包的发送周期由Hello间隔决定,如果在一个Dead间隔内没有收到邻居的Hello包,则认为邻居已经失效。
-
Database Description(DBD)包:用于交换链路状态数据库的摘要信息。DBD包包含了链路状态摘要的序列号、链路状态类型和链路状态ID。通过DBD包,路由器可以了解邻居的LSDB数据库(本地链路状态数据库)概况,从而决定是否需要交换详细的链路状态信息。
-
Link State Request(LSR)包:用于请求邻居发送特定的链路状态信息。当路由器发现自己的LSDB中有缺失或过期的链路状态信息时,会发送LSR包来请求这些信息。
-
Link State Update(LSU)包:用于回复LSR请求信息的对应详细的链路状态信息。LSU包包含了链路状态广告(LSA)的完整内容,包括链路状态类型、链路状态ID、链路状态序列号、链路状态校验和、广告路由器等信息。LSU包用于同步LSDB,确保所有路由器的LSDB保持一致。
-
Link State Acknowledgment(LSAck)包:用于确认收到LSU包。当路由器收到LSU包时,会发送LSAck包来确认收到这些链路状态信息。LSAck包包含了收到的LSA的序列号,以确保数据的完整性和可靠性。
OSPF的区域划分
OSPF(开放式最短路径优先)协议使用区域(Area)来划分网络:
-
区域ID:每个OSPF区域都有一个唯一的编号,称为区域ID。区域ID是一个32位的二进制整数,通常以点分十进制格式表示(例如,区域ID 0.0.0.0通常被保留作为骨干区域的ID)。
-
骨干区域(Area 0):OSPF网络中必须有一个且仅有一个骨干区域,通常称为Area 0。骨干区域负责连接其他区域,并确保整个OSPF网络中的路由信息能够正确传播。骨干区域是OSPF网络的核心,所有其他区域都必须直接或通过虚链路连接到骨干区域。
-
非骨干区域:除了骨干区域外,OSPF网络可以包含多个非骨干区域。非骨干区域必须直接连接到骨干区域,或者通过虚链路(Virtual Link)连接到骨干区域。
-
虚链路:虚链路是一种逻辑链路,用于连接两个非骨干区域,或者连接一个非骨干区域和骨干区域。虚链路需要通过另一个区域进行传输,因此虚链路的两端都必须是该区域的ABR(区域边界路由器)。
-
区域边界路由器(ABR):连接多个OSPF区域的 routers。ABR负责在不同区域之间传递路由信息,并将一个区域的路由信息汇总到另一个区域。(同时属于两个区域的设备。)
-
自治系统边界路由器(ASBR):连接不同自治系统(AS)的路由器。ASBR负责在不同AS之间传递路由信息,并将外部路由信息引入到OSPF网络中。
情况一:在网络规模不大的时候,可以不进行区域划分,这样的OSPF网络称为单区域OSPF网络。
情况二:在网络规模很大的时候,一般需要进行区域划分,减少拓扑信息的传递数量,这样的OSPF网络称为多区域OSPF网络。
RID路由器ID
RID是OSPF路由器的唯一标识,用于在OSPF域中标识路由器。
以下是关于RID的一些关键点:
-
RID的选择:每个OSPF路由器都必须有一个唯一的RID。RID通常是路由器的IP地址,但也可以是其他32位的数值。如果路由器有多个IP地址,则通常选择最大的IP地址作为RID。
-
RID的稳定性:一旦路由器启动并选择了RID,它应该保持稳定,直到重启或重新配置。RID的更改可能会导致OSPF域中的不稳定和路由问题。
-
RID在OSPF中的作用:RID在OSPF中有多种用途,包括:
- 在OSPF Hello包中标识路由器。
- 在链路状态广告(LSA)中标识路由器。
- 在OSPF数据库中标识路由器。
- 在OSPF路由计算中标识路由器。
-
RID的配置:RID可以通过路由器的配置文件进行配置,也可以自动选择。如果未明确配置RID,则路由器通常会在拥有的IP地址中自动选择最大的IP地址作为RID。如果接口没有配置IP地址则协议无法工作。
-
RID的冲突:如果两台路由器具有相同的RID,则会导致OSPF域中的问题。为了避免这种情况,应确保每个路由器都具有唯一的RID。
-
RID的更改:如果需要更改路由器的RID,则应先关闭路由器,更改配置文件中的RID,然后重新启动路由器。这会导致OSPF邻居关系重建,并可能影响网络的稳定性。
OSPF的状态机
-
Down状态:一旦启动OSPF进程,并发出hello报文,则进入下一个状态。————关闭
-
Init状态:当收到的hello报文中存在本地的RID值,则进入下一个状态。————初始化状态
-
Two-Way状态:邻居关系建立的标志。————双向通讯
-
Exstart状态:使用未携带LSA摘要的DBD报文进行主从关系选举,其中RID大的为主设备。————预启动
-
Exchange状态:使用携带LSA摘要信息的DBD报文进行信息共享。————准交换
-
Loading状态:邻居间使用LSR/LSU/LSAck三种报文来获取完整的拓扑信息。————加载
-
Full状态:拓扑交换完成后进入该状态,标志着邻接关系的建立。————转发
OSPF工作过程总结
1. 建立邻居阶段
-
在OSPF启动前,路由器处于Down状态;
-
在OSPF启动后,路由器向所有运行了OSPF协议的接口发送hello包(目标地址为224.0.0.5)。此时路由器为init状态;
-
路由器收到对端的hello包后,会发送包含邻居信息(RID)的Hello包;
-
路由器在Hello包中发现自己的RID在邻居列表时,则会进入2-way状态,此刻邻居关系建立,能够双向通讯。
一些可能导致OSPF邻居建立失败的原因:
网络配置错误:确保OSPF进程ID、区域ID、网络地址和子网掩码在所有相关路由器上都是一致的。
物理连接问题:检查路由器之间的物理连接,包括电缆、端口和交换机等。
接口配置错误:检查参与OSPF的接口是否已正确配置,包括IP地址、子网掩码和OSPF进程信息。
Hello协议和Dead Timer不匹配:OSPF邻居之间的Hello协议和Dead Timer必须匹配。如果它们不匹配,邻居关系将无法建立。
区域边界路由器(ABR)配置错误:如果邻居位于不同的OSPF区域,确保ABR正确配置。
路由器ID(Router ID)冲突:每个OSPF路由器必须有一个唯一的Router ID。如果两个路由器具有相同的Router ID,邻居关系将无法建立。
认证问题:如果OSPF区域启用了认证,确保所有路由器都使用正确的认证类型和密钥。
路由器性能问题:路由器性能问题或资源不足也可能导致OSPF邻居建立失败。
OSPF版本不兼容:确保所有路由器都运行相同版本的OSPF协议。
防火墙或ACL限制:确保没有任何防火墙规则或访问控制列表(ACL)阻止OSPF消息。
路由器固件或软件缺陷:有时,路由器固件或软件中的缺陷可能导致OSPF邻居建立失败。确保所有路由器都运行着最新版本的固件或软件。
2. 条件匹配
- 邻居关系建立后,进行条件匹配(路由器对收到的hello包中的参数进行匹配);
- 如果条件匹配失败,则保持在邻居关系状态;
- 如果条件匹配成功,则进入ExStart状态;
- 此阶段仅通过Hello包进行保活。
为了避免在广播域中多台OSPF设备导致的重复更新,浪费资源,所以OSPF在two-way状态下使用Hello报文进行条件匹配。
3. 建立邻接关系
-
条件匹配成功之后,开始建立邻接关系。
-
路由器会使用不携带LSDB摘要信息的DD包进行DR和BDR的选举;
-
选出DR和BDR后,设备进入Exchange状态;
-
从设备优先发送DD报文摘要信息,主设备比对本地LSDB,发送LSR包请求缺失的LSA信息。
-
从设备发送携带详细LSA信息的LSU包;
-
主设备使用LSACK进行确认,进入loading状态;
-
当本地LSDB(链路状态数据库)建立完成时,进入FUll邻接状态。
4. 完成收敛
- 基于本地LSDB收集的LSA,使用SPF算法计算最短路径树。
- 生成路由表。
5. 收敛后的维护
- 使用Hello包每10秒发送一次,用于保活邻居关系。
- OSPF每30分钟进行一次周期更新。
触发更新
1. 设备无法沟通
- 当设备无法沟通时,需要等待死亡时间(Dead Time)。
- 死亡时间过后,设备将清空所有改设备的拓扑信息并重新建立邻居关系。
2. 新增网段
- 当网络中新增网段时,将触发OSPF更新。
3. 断开网段
- 当网络中某个网段断开时,同样会触发OSPF更新。
角色选举
- 选举DR和BDR,其他设备为DR-other;
- DR 指定路由器:规定 DR 设备需要和其他所有设备建立邻接关系;
- BDR 备份指定路由器:规定 BDR 设备需要和其他所有设备建立邻接关系;
- 存在最大选举时间,一般等于死亡时间。
- 默认是非抢占的,以保持网络稳定性。
- 选举基于设备优先级(范围0-255,默认为1,越大越优)和设备RID(Router ID)。
- 可以通过配置
ospf dr-priority 0
来放弃选举。 - 可以通过配置
ospf dr-priority 255
来锁定选举。 - 在通过配置更改DR优先级时需要重启才会生效。
[AR1]reset ospf process //重启服务
DR和BDR设备之间使用组播地址224.0.0.6来同步数据库。
OSPF报文
报文头部
数据报文结构
HELLO报文
【子网掩码在以太网环境下会校验且必须一致,不一致会导致邻居建立失败。P2P网络不做限制】
【hello时间和死亡时间必须一致】
DD报文
[AR1-GigabitEthernet0/0/0]ospf mtu-enable // 协商接口最大传输数据量,默 认关闭协商功能,必须都开启 才会协商。
I-- 选举,标志该 DBD 包是进行主从关系选举的 DBD 包。M-- 更多,主要保证对端设备能够收到所有的DBD摘要信息。MS-- 只有主设备发送的 DBD 报文置为 1。
LSR--链路状态请求报文
利用LSA三元组,才能为一的标识一条LSA
LSU--链路状态更新报文
LSACK报文
OSPF接口类型与网络类型
运行了OSPF协议的设备,接口工作在不同的网络环境下会有不同的工作方式。所以协议在不同的网络环境下对工作方式进行了分类。
1. 广播多点访问网络(BMA - 以太网)
- 类型:广播(Broadcast)
- 特点:需要进行DR和BDR选举。
- MTU:接口允许发出的OSPF报文最大携带的数据量默认为1500字节。
- Hello时间:10秒
- 死亡时间(Dead时间):40秒
- 邻居关系:允许建立多个邻居关系。
2. 点到点网络(P2P)
- 类型:点到点(P2P)
- 特点:只能建立一个邻接关系,不需要进行DR和BDR选举。
- Timers:Hello 10秒,Dead 40秒
- MTU:接口允许发出的OSPF报文最大携带的数据量默认为1500字节。
- COST:48(国内串口的传输速率为E1标准2.o48Mbps——参考带宽/真实标准带宽)
3. 非广播多点访问网络(NBMA)
- 类型:非广播多点访问(NBMA)
- 特点:需要进行DR和BDR选举。
- MTU:接口允许发出的OSPF报文最大携带的数据量默认为1500字节。
- Hello时间:30秒
- 死亡时间(Dead时间):120秒
- 邻居关系:允许建立多个邻居关系。
4. 点到多点网络(P2MP)
- 类型:点到多点(P2MP)
- 特点:人工设计出来的接口网络类型,没有实际网络类型对应。允许建立多个邻居,不需要选举DR和BDR。
- Hello时间:30秒
- 死亡时间(Dead时间):120秒。
- 邻居关系:允许建立多个邻居关系。
环回的cost为0是定义值,为了区别该网段为环回网段。
COST
OSPF的开销值附加在每一个运行了OSPF的接口上,OSPF衡量去往同一网段有多条路径时的选路标准。计算方法:设备到达目标网段沿途的接口开销值累加和。
OSPF接口开销计算公式=参考带宽/真实带宽
计算结果小于1按1计算
计算结果大于1按整数部分计算
NBMA网络的特殊情况
Attempt状态机存在于NBMA网络环境,当一端设备指定对端设备作为邻居,但是对端设备没用指定(因为不支持组播,所以不能发送数据包),所以无法收到对端设备发送的Hello报文,只能等待。
POLL轮询计时器:当对端长时间未指定时,那么根据死亡时间对端设备判断故障,回答down,但是由于可能对端设备只是没有及时配置,所以为了后续能够建立邻居关系,NBMA做的特殊处理,当判断对端设备故障仅降低hello报文的发送频率为POLL轮询时间。
接口网络类型
[AR1]display ospf interfince serial 4/0/0 //查看接口网络类型
[AR1-GigabitEthernet0/0/0]ospf network-type p2p //修改接口网络类型为P2P
OSPF的不规则区域
情况一:原理骨干的非骨干区域;
情况二:不连续骨干区域;(骨干区域不能被分割)
OSPF协议星型拓扑结构的规划本身就是一种防环机制,且为了防环OSPF还规定非法的ABR设备不能传递区域之间的路由信息。
解决不规则区域的方法
1.隧道(VPN)
让非法设备ABR设备和区域0中的设备通过VPN技术逻辑上连接一根线缆,从而将不规则区域连接到骨干区域,以达到解决问题的结果。(被淘汰)
2虚链路
(OSPF协议专门研发出来解决不规则区域问题的方法)(一般作为临时的解决方案)(半淘汰)
V-LINK实质上相当于非法的ABR设备存在属于区域0的接口,所有V-LINK属于区域0.
做法:
让非法的ABR设备和合法的ABR设备之间建立虚链路,从而让非法的ABR合法化,从而传递路由信息。【注意:V-LINK建立的对象是对端设备的RID】
[AR1-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
V-LINK的局限性
1.V-LINK只能跨越一个区域;
2.V-LINK会造成一些资源浪费。
3.多进程双向重发布
(最终解决方案)
ASBR---自治系统边界路由器---同时运行多种协议的设备。
【注意配置位置:ASBR设备的对应协议中进行配置:如果想要在A协议中重发布B协议的路由信息(引入B协议的路由信息),需要进入A协议中进行配置。】
[AR1-ospf-1]import-route ospf 2
LSA链路状态通告(拓扑信息)
1.手机LSA信息;
2.利用收集到的LSA信息生成有向图;
3.利用SPF算法计算最短生成树;
4.利用SPF算法计算路由信息。
Type类型---LSA的类型
IPV4-OSPFv2环境下只使用6种LSA传递路由信息【1,2,3,4,5,7】
-
类型1 LSA(Router LSA):由每个OSPF路由器生成,描述路由器的链路状态和接口参数。
-
类型2 LSA(Network LSA):由DR(Designated Router)生成,描述广播或NBMA(Non-Broadcast Multi-Access)网络中的链路状态。
-
类型3 LSA(Network Summary LSA):用于在不同区域之间传递路由信息,通常由ABR(Area Border Router)生成。
-
类型4 LSA(ASBR Summary LSA):描述到ASBR(Autonomous System Boundary Router)的路由,由ABR生成。
-
类型5 LSA(External LSA):用于传递外部路由信息,由ASBR生成。
-
类型7 LSA(NSSA External LSA):在NSSA(Not-So-Stubby Area)区域中使用,用于传递外部路由信息,由NSSA区域的ASBR生成。
相关文章:
路由与OSPF学习
【路由是跨网段通讯的必要条件】 路由指的是在网络中,数据包从源主机传输到目的主机的路径选择过程。 路由通常涉及以下几个关键元素: 1.路由器:是一种网络设备,负责将数据包从一个网络传输到另一个网络。路由器根据路由表来决定…...
Spring Security:企业级安全架构的设计哲学与工程实践
一、核心架构与设计理念 Spring Security作为Spring生态中的安全基石,其架构设计遵循**“分层过滤"与"组件化扩展”**两大原则。整个安全框架本质上是一个由多个过滤器构成的链式处理模型(Filter Chain),每个过滤器负责…...
NLP高频面试题(五十二)——BERT 变体详解
在现代自然语言处理领域,BERT 系列模型不断演进,衍生出多种变体,它们通过改进预训练任务、模型结构和训练策略,在不同应用场景下取得了更优表现。本文首先概览主要 BERT 变体(如 ALBERT、RoBERTa、ELECTRA、SpanBERT、Transformer-XL 等),随后针对以下几个关键问题逐一展…...
C++Primer 编程练习 第二章
最近想重新看一下CPrimer,顺便敲一下他的编程练习题,虽然很简单,但是就当是锻炼一下vim的熟练度和手感 由于按照章节顺序来说是初学者,不会对输入内容做过多的判断,只对问题作出基本实现 第二章 1 #include <ios…...
Vue.js 新手小白指南:从起源到实战
🌟 Vue 的来源 Vue.js 由**尤雨溪(Evan You)**在2014年创建,最初是作为个人项目开发,灵感来源于他在 Google 使用 AngularJS 的经验。Vue 的设计目标是提供一个更轻量级、更易上手的前端框架。 如今,Vue …...
策略模式:动态切换算法的设计智慧
策略模式:动态切换算法的设计智慧 一、模式核心:定义一系列算法并可相互替换 在软件开发中,常常会遇到需要根据不同情况选择不同算法的场景。例如,在电商系统中,根据不同的促销活动(如满减、折扣、赠品&a…...
Vm免安装直接使用虚拟机win7系统
教程 一、下载并解压资料里面的vmx压缩包 二、使用Vm软件打开刚刚解压的vmx文件即可使用虚拟机的win7系统 资料下载 点击下载...
LSTM-GAN生成数据技术
1. 项目概述 本项目利用生成对抗网络(GAN)技术来填补时间序列数据中的缺失值。项目实现了两种不同的GAN模型:基于LSTM的GAN(LSTM-GAN)和基于多层感知机的GAN(MLP-GAN),并对两种模型…...
26、C# 中是否可以继承String类?为什么?
在 C# 中,不能直接继承 String 类(System.String)。这是由于以下几个原因: 1、String 类是 sealed 的 String 类在 .NET 中被标记为 sealed,这意味着它是一个密封类,不能被继承。 sealed 关键字的作用是防…...
gem5教程第五章 了解gem5默认配置脚本
在本章中,我们将探讨如何使用gem5附带的默认配置脚本。 gem5附带了许多配置脚本,使您能够非常快速地使用gem5。 然而,一个常见的陷阱是在不完全理解所模拟内容的情况下使用这些脚本。在使用gem5进行计算机架构研究时,充分了解您正在模拟的系统非常重要。本章将引导您了解默…...
什么是鸿蒙南向开发?什么是北向开发?
文章目录 鸿蒙南向开发 vs 北向开发:底层与生态的双向赋能一、鸿蒙南向开发:连接硬件的底层基石二、鸿蒙北向开发:构建全场景应用生态三、南向与北向:互补与协同四、如何选择开发方向?结语 鸿蒙南向开发 vs 北向开发:…...
蓝桥杯 19. 最大比例
最大比例 原题目链接 题目描述 X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。 并且,相邻两个级别间的比例是一个固定值,也就是说:所有级别的奖金构成一个等比数列。 例如: 奖金数列为 16, 24, 36, 54&…...
制造业数字化转型标杆解析:从冀凯机电到君乐宝的启示
1. 执行摘要 数字化转型已成为现代制造业提升竞争力、实现高质量发展的核心驱动力。本文旨在通过深入剖析冀凯装备制造股份有限公司(冀凯机电)和君乐宝乳业集团(君乐宝)两家不同行业背景企业的数字化转型实践,提炼可供…...
【OSCP-vulnhub】Raven-2
目录 端口扫描 本地/etc/hosts文件解析 目录扫描: 第一个flag 利用msf下载exp flag2 flag3 Mysql登录 查看mysql的运行权限 MySql提权:UDF 查看数据库写入条件 查看插件目录 查看是否可以远程登录 gcc编译.o文件 创建so文件 创建临时监听…...
配置MambaIRv2: Attentive State Space Restoration的环境
github上代码的地址: csguoh/MambaIR: [ECCV2024, CVPR2025] MambaIR and MambaIRv2! 一开始直接输入命令 conda env create -f environment.yaml 安装了半天爆出来好几个错误,其中一个是没有nvcc 输入以下命令: module avail 发现没有…...
4.23晚间工作总结
主要工作:将ClassicDetail界面拆分成utils,apis,stores,css,vue多个文件,方便后续重用 具体代码截图:...
Maven 项目中引入本地 JAR 包
在日常开发过程中,我们有时会遇到一些未上传到 Maven 中央仓库或公司私有仓库的 JAR 包,比如第三方提供的 SDK 或自己编译的库。这时候,我们就需要将这些 JAR 包手动引入到 Maven 项目中。本文将介绍两种常见方式:将 JAR 安装到本…...
SpringBoot整合SSE,基于okhttp
一、引入依赖 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.10.0</version> </dependency> <dependency><groupId>com.squareup.okhttp3</groupId><…...
从云端到边缘:云原生后端架构在边缘计算中的演进与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为何云原生后端正在走向边缘? 随着物联网(IoT)、5G 和实时应用的快速发展,越来越多的数据在终端产生并需要即时处理。传统云计算虽强大,但将所有数据上送云端再处理,带来高延迟与带宽压力。…...
pytest心得体会
一、如何单独运行某条用例 在参数化测试中总有些用例失败,由于前后置数据的关系需要单独运行那条用例如何运行呢 方法一:直接查看控制台运行用例 确定是[2-case_data8] pytest.main(["-sv","testcase/违规告警/test_违规告警_非合同车…...
《Cesium 中两点绘制线的实现:实线、虚线、动态线、流动线详解》
摘要 在 Cesium 三维地球可视化开发中,两点之间绘制线是常见的需求。本文详细介绍如何在 Cesium 中实现两点间绘制实线、虚线、动态线和流动线,并提供完整的代码示例,方便开发者快速上手,满足不同场景下的可视化需求。 一、环境与依赖 本文代码基于 Cesium 库进行开发,…...
【EasyPan】MySQL FIELD() 函数实现自定义排序
【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版 MySQL FIELD() 函数解析 一、FIELD() 函数技术解析 /* 基础语法 */ FIELD(column_name, value1, value2, ..., valueN)核心特性 特性说明返回值机制返回字段值在参数列表中的索引位置&…...
搭建TypeScript单元测试环境
我们在学习TypeScript的时候如果能够搭建一个单元测试的环境,那写些demo会很简单,下面我们使用jest来搭建一个单元测试环境 Jest 是一个由 Facebook 开发并开源的 JavaScript 测试框架,被广泛应用于前端和 Node.js 项目的单元测试。以下是关…...
Vue3父子组件数据同步方法
在 Vue 3 中,当子组件需要修改父组件传递的数据副本并同步更新时,可以通过以下步骤实现: 方法 1:使用 v-model 和计算属性(实时同步) 父组件: vue <template><ChildComponent v-mo…...
免费且开源的企业级监控解决方案:Zabbix
一、Zabbix 简介 Zabbix 是一款功能强大的企业级开源监控解决方案。它可以监控各种 IT 基础设施组件,包括网络设备、服务器、虚拟机、云服务、应用程序和数据库等。Zabbix 提供实时的监控、告警、报表和可视化功能,帮助用户及时发现和解决 IT 系统中的问…...
高并发系统的通用设计方法是什么?
背景 高并发系统的通用设计方法是解决系统在面对大量用户访问时的性能瓶颈问题。当系统遇到性能瓶颈时,通常是因为某个单点资源(如数据库、后端云服务器、网络带宽等)达到了极限。 为了提升整个系统的容量,需要找到这个瓶颈资源…...
ubuntu系统下部署使用git教程
在ubuntu系统下部署并使用git教程 1.下载并安装 sudo apt update sudo apt install git2.检验安装是否成功 git --version若输出git版本号即为成功。 3.配置参数 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…...
redis client.ttl(key)
对应 Redis 的 TTL 命令: bash 复制 下载 TTL key 使用示例 1. 基本用法 java 复制 下载 try (Jedis jedis jedisPool.getResource()) {long ttl jedis.ttl("user:1001:session");if (ttl > 0) {System.out.println("键将在 " t…...
基于ACL方式手动建立站点间 IPSec 隧道
换句话说 不使用 IKE 自动协商,而是静态配置密钥和 SPI(安全参数索引)来配置隧道规则 环境基础 还是使用eNSP软件进行模拟,等后面再更新实际通信中的环境 没有框架,就没有基本思路 还是使用前面文章GRE VPN的拓扑&…...
电池大脑的基准测试及AI拓展
从为我们的智能手机供电到驱动电动汽车,我们的日常生活都离不开锂离子电池(LIB)。但是,理解其复杂的内部运作并预测其性能需要精密的工具。由此引入了多孔电极理论(PET)模型,我们可以将其视为模…...
数据通信学习笔记之OSPF的基础术语
Router ID RouterID 用于在自治系统中唯一标识一省运行 OSPF 的路由器,它是一个 32 位的无符号整数 配置完成后,如果需要修改 Router ID 的话,需要重启进程才能上生效 <Huawei>reset ospf 1 process // 重启 ospf 进程 1 Route…...
Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)
一、Cordova 1、Cordova 概述 Cordova 是使用 HTML,CSS 和 JavaScript 构建混合移动应用程序的平台 2、Cordova 特征 (1)命令行界面(Cordova CLI) 这是可用于启动项目,构建不同平台的进程,…...
AndroidAutomotive模块介绍(四)VehicleHal介绍
前言 前面的文章中,描述了 Android Automotive 的框架中应用、Framework 层服务等知识,本篇文章将会继续按照 Android Automotive 框架介绍 Vehicle Hal 层服务的内容。 上一篇:AndroidAutomotive模块介绍(三)CarSer…...
Pingora vs. Nginx vs. 其他主流代理服务器性能对比
Pingora vs. Nginx vs. 其他主流代理服务器性能对比 核心对比概览 特性Pingora (Cloudflare)NginxEnvoyHAProxyCaddyTraefik开发公司CloudflareNginx, Inc/F5Lyft/CNCFHAProxy TechApache 2.0社区Containous核心语言RustCCCGoGo并发模型异步/多线程事件驱动事件驱动事件驱动协…...
4月23日作业
需求: 1,R5为ISP,其上只能配置IP地址; R5与其他所有直连设备间均使用公有IP;环回地址为100.1.1.1/32 2,R4设备为企业出口路由器 3,整个OSPF环境IP基于172.16.0.0/16划分; 4&…...
5.学习笔记-SpringMVC(P53-P60)
1.响应 (1)响应页面 (2)响应数据(异步提交):文本数据、json数据 2.REST风格 (1)REST:表现形式状态转换。 (2)传统风格资源描述形式 3.Restful入门案例 5.基于RESTful页面数据…...
安卓14默认赋予应用权限
安卓14上赋予应用默认权限的方式跟之前的不太一样了 需要修改两个地方,一个是frameworks\base\services\core\java\com\android\server\pm\permission\Permission.java public boolean isNormal() {//eturn (mPermissionInfo.protectionLevel & PermissionInfo…...
数据的加载与保存
加载数据的方法 选项参数:可以通过选项参数传入URL地址、用户名、密码和数据表名称等。 路径参数:可以传入加载数据的路径。 MySQL语句:可以直接导入MySQL语句来加载数据。 保存数据的方法通用方法:使用df.write方法保存数据。…...
网络编程——通信三要素
一、概述 (一)网络编程 可以让设备中的程序与网络上的其他设备中的程序进行数据交互,实现网络通信 Java.net包下提供了网络编程的解决方案。 (二)通信的基本架构 1. CS架构(Client客户端/Server服务端…...
es-存储与搜索优化
字段选型优化 链接:es-字段类型详解与优化建议 存储优化 es的底层使用Lucene,Lucene的存储的核心文件包括: 原始数据存储(Store)、倒排索引(Inverted Index)、列式存储(DocValues)…...
Hadoop 集群扩容新增节点操作文档
Hadoop 集群扩容新增节点操作文档 一、前期准备 1. 环境检查(所有新节点) 确保 JDK 安装: java -version确保 Hadoop 安装: hadoop version添加主机名映射(所有节点): cat >> /etc/h…...
高光谱相机在工业检测中的应用:LED屏检、PCB板缺陷检测
随着工业检测精度要求的不断提升,传统机器视觉技术逐渐暴露出对非可见光物质特性识别不足、复杂缺陷检出率低等局限性。高光谱相机凭借其独特的光谱分析能力,为工业检测提供了革命性的解决方案。以下结合中达瑞和VIX系列推扫式高光谱相机的技术特点与实际…...
07-IDEA企业开发工具-开发入门程序
1. IDEA创建Java项目的代码结构 项目结构: IDEA中的Java项目包含四种主要结构:工程(Project)、模块(Module)、包(Package)、类(Class)。 工程(Project): 代表整个项目,通常是一个磁盘目录或文件夹。模块(Module): 工程下的子单元,用于划分项…...
即插即用模块(3) -LSK 特征提取
paper:LSKNet: A Foundation Lightweight Backbone for Remote Sensing Code:https://github.com/zcablii/LSKNet 大型选择性内核块 (LSK Block) 功能 通过动态调整感受野,自适应提取遥感图像中目标的上下文信息,增强目标与环境关…...
彩虹表攻击与Nest密码存储
文章目录 前言🧨 什么是彩虹表攻击?📷 图中解析左侧是彩虹表:右侧是用户数据库中的数据: 🔐 如何防御彩虹表攻击?✅ 1. **使用 Salt 加密(推荐)**✅ 2. **使用强哈希函数…...
vue keep-alive标签的运用
keep-alive,想必大家都不会很陌生,在一些选项卡中会使用到。其实,它的作用大概就是把组件的数据给缓存起来。 比如果我有一个选项卡,标签一,标签二,标签三。现在,我需要实现,当我在标…...
python编写一段爱心代码
代码编写 1. 导入模块和常量定义 python import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 480 # 画布的高 CANVAS_CENTER_X CANVAS_WIDTH / 2 # 画布中心的X轴坐标 CANVAS_CENTER_Y CANVAS_HEIGH…...
Python流程控制
目录 一,条件判断:if语句 1.基本语法与示例 2.多重条件判断(elif) 3.常见错误与避坑指南 1.缩进错误 2.遗漏冒号 二,循环结构:while与for 1.while循环 2.Python的注释 3.字符串的格式化输出 4.fo…...
机器人雅克比Jacobian矩阵程序
% 定义机器人的连杆参数 L1 Link(d, 0, a, 0, alpha, pi/2); L2 Link(d, 0, a, 1, alpha, 0); L3 Link(d, 0, a, 1, alpha, 0);% 创建机器人对象 robot SerialLink([L1, L2, L3], name, MyRobot);% 设置机器人的关节角度(弧度) q [0, pi/4, pi/6];%…...
Qt Creator中自定义应用程序的可执行文件图标
要在Qt Creator中为你的应用程序设置自定义可执行文件图标,你需要按照以下步骤操作: Windows平台设置方法 准备图标文件: 创建一个.ico格式的图标文件(推荐使用256x256像素,包含多种尺寸) 可以使用在线工…...