当前位置: 首页 > news >正文

ISIS协议(动态路由协议)

ISIS基础

基本概念

IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO International Organization for Standardization,国际标准化组织)为它的CLNPConnectionLessNetwork Protocol,无连接网络协议)设计的一种动态路由协议

随着TCP/IP协议的流行,为了提供对IP路由的支持,IETFRFC1195中对IS-IS进行了扩充和修改,使它能够同时应用在TCP/IPOSIOpen System Interconnect,开放式系统互联)环境中,我们将扩展后的IS-IS称为集成IS-IS

CLNS 由以下三个部分组成:
CLNP :类似于 TCP/IP 中的 IP 协议。
IS-IS :类似于 TCP/IP 中的 OSPF
ES-IS :类似于 TCP/IP 中的 ARP ICMP 等。
IS-IS 是一种链路状态路由协议 IS-IS OSPF 在许多方面非常相似,例如运行 IS-IS 协议的直连设备之间通过发送 Hello 报文发现彼此,然后建立邻接关系,并交互链路状态信息。

NSAP地址

NSAP(Network Service Access Point,网络服务访问点)是OSI协议用于定位资源的地址,主要用于提供网络层和上层应用之间的接口。NSAP包括IDPDSP,如下图所示:

1.IDP:相当于IPv4地址中的有类网络号
    1.AFI:表明分配机构和地址格式   1字节
    2.IDI:表明地址分配的域         2字节
 2.DSP:相当于IPv4地址中的子网络号和主机地址
    1.header older dsp:分割区域    10字节
    2.system-id :主机标识         6字节
    3.sel :上层标识               1字节

NET地址

NET(Network Entity Title,网络实体名称)是OSI协议栈中设备的网络层信息,主要用于路由计算,区域地址(Area ID)和System ID组成,可以看作是特殊的NSAPSEL00NSAP)。NET的长度与NSAP的相同,最长为20Byte,最短为8Byte

在IP网络中运行IS-IS时,只需配置NET,根据NET地址设备可以获取到Area ID以及System ID

•Area ID由IDP和DSP中的High Order DSP组成,既能够标识路由域,也能够标识路由域中的区域。因此,它们一起被称为区域地址, 相当于 OSPF 中的区域编号
一般情况下,一个路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,缺省情况下,一个IS-IS进程下最多可配置 3 个区域地址。
System ID用来在区域内唯一标识主机或路由器。在设备的实现中,它的长度固定为6Byte。
每台运行 IS-IS 的网络设备至少需拥有一个 NET ,当然,一台设备也可以同时配置多个 NET ,但是这些 NETSystem ID 必须相同

ISIS路由器分类

1.Level-1路由器

Level-1路由器(例如图中的R1)是一种IS-IS区域内部路由器,它只与属于同一区域的Level-1Level-1-2路由器形成邻接关系,这种邻接关系称为Level-1邻接关系。Level-1路由器无法与Level-2路由器建立邻接关系。

Level-1路由器只负责维护Level-1的链路状态数据库LSDB,该LSDB只包含本区域的路由信息。值得一提的是,Level-1路由器必须通过Level-1-2路由器接入IS-IS骨干区域从而访问其他区域


2.Level-2路由器
Level-2路由器(例如图中的R4R5R6R7)是IS-IS骨干路由器,它可以与同一或者不同区域Level-2路由器或者Level-1-2路由器形成邻接关系。Level-2路由器维护一个Level-2LSDB,该LSDB包含整个IS-IS域的所有路由信息。

所有Level-2级别(即形成Level-2邻接关系)的路由器组成路由域的骨干网,负责在不同区域间通信路由域中Level-2级别的路由器必须是物理连续的,以保证骨干网的连续性


3.Level1-2路由器

Level-1-2路由器OSPF中的ABR非常相似,它也是IS-IS骨干网络的组成部分

Level-1-2路由器维护两个LSDBLevel-1LSDB用于区域内路由,Level-2LSDB用于区域间路由。

同时属于Level-1Level-2的路由器称为Level-1-2路由器(例如图中的R2R3),它可以与同一区域的Level-1Level-1-2路由器形成Level-1邻接关系,也可以与其他区域的Level-2Level-1-2路由器形成Level-2的邻接关系。

在华为路由器上配置IS-IS时,缺省时,路由器全局LevelLevel-1-2。

当然,可以通过命令修改该设备的类型:
 [AR1-isis-1]is-level level-1 修改设备级别

ISIS路由器接口分类

ISIS接口分为三类:

  • 1.L1接口
  • 2.L2接口
  • 3.L12接口

修改路由器的接口级别:

[AR1-GigabitEthernet0/0/0]isis circuit-level level-1

注意:

L1设备 和 L1接口 发送L1报文

L1设备 和 L2接口 发送L1报文

L2设备 和 L1接口 发送L2报文

L2设备 和 L2接口 发送L2报文

L12设备 和 L1接口 发送L1报文

L12设备 和 L2接口 发送L2报文

L12设备 和 L12接口 发送L12报文

接口存在级别意义: 当L1/2设备只需要建立某一个级别的邻居时,只需要修改接口级别即可

区域划分

IS-IS在自治系统内采用骨干区域非骨干区域两级的分层结构

        Level-1路由器部署在非骨干区域。

        Level-2路由器和Level-1-2路由器部署在骨干区域

每一个非骨干区域都通过Level-1-2路由器与骨干区域相连

如图所示,整个骨干区域不仅包括Area49.0002中的所有路由器,还包括其它区域Level2Level-1-2路由器。

以上拓扑结构图可以体现IS-ISOSPF的不同点:

  •         在IS-IS中,每个路由器都只属于一个区域;而在OSPF中,一个路由器的不同接口可以属于不同的区域。
  •         在IS-IS中,单个区域没有骨干与非骨干区域的概念;而在OSPF中,Area0被定义为骨干区域。
  •         在IS-IS中,Level-1Level-2级别的路由都采用SPF算法,分别生成最短路径树SPTShortest Path Tree);而在OSPF中,只有在同一个区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。

OSPF封装于网络层之上,服务于IP层

ISIS封装于数据链路层(数据帧)之上,服务于IP层

网络类型

IS-IS会自动根据接口的数据链路层封装决定该接口的缺省网络类型, IS-IS支持两种类型的网络:

广播(Broadcast): 如Ethernet

点到点(P2P): 如PPPHDLC等。

ISIS开销

IS-IS使用Cost(开销)作为路由度量值,Cost值越小,则路径越优。IS-IS链路的Cost与设备的接口有关,与OSPF类似,每一个激活了IS-IS的接口都会维护接口Cost。然而与OSPF不同的是,IS-IS接口的Cost在缺省情况下并不与接口带宽相关(在实际部署时,IS-IS也支持根据带宽调整Cost值),无论接口带宽多大,缺省时Cost10

一条IS-IS路径的Cost等于本路由器到达目标网段沿途的所有链路的Cost总和。

开销更改:

1.接口开销:

   [AR2-GigabitEthernet0/0/0]isis cost  

2.全局开销:

   [AR2-isis-1]circuit-cost   该命令可以同时改变所有的接口的开销

3.根据带宽自动计算开销:

   [AR2-isis-1]auto-cost enable    开启自动计算

   [AR2-isis-1]bandwidth-reference 设置参考带宽

优先级由高到低: 接口> 全局 > 自动计算

ISIS报文及状态机

报文

IS-IS PDU 4 种类型: IIH(IS-IS Hello) LSP Link State PDU ,链路状态报文), CSNP Complete  Sequence Number PDU ,全序列号报文), PSNP Partial  Sequence Number PDU ,部分序列号报文)。
IIH :用于建立和维持邻接关系, 广播网络中的 Level-1 IS-IS 路由器使用 Level-1 LAN IIH ; 广播网络中的 Level-2 IS-IS 路由器使用 Level-2 LAN IIH ; 点到点网络中则使用 P2P IIH
LSP :用于交换链路状态信息。 LSP 分为两种, Level-1 LSP Level-2 LSP
SNP :通过描述全部或部分链路数据库中的 LSP 来同步各 LSDB ,从而维护 LSDB 的完整与同步。 SNP 包括 CSNP PSNP ,进一步又可分为 Level-1 CSNP Level-2 CSNP Level-1 PSNP Level-2 PSNP

IIH报文

类似于OSPF的Hello报文,用来建立和维护邻居关系,广播网络中的Level-1 IS-IS路由器使用Level-1 LAN IIH;广播网络中的Level-2 IS-IS路由器使用Level-2 LAN IIH;点到点网络中则使用P2P IIH

CSNP报文

全序列号PDU,类似于OSPF的DD报文,用来发布链路状态通告摘要,分为L1 CSNP、L2 CSNP。

PSNP报文

部分序列号PDU,类似于OSPF的LSR报文、LSAck报文,分为L1 PSNP、L2 PSNP。

*如果PSNP携带的摘要LSP,序列号为全0 则表示LSR 用来请求完整的链路状态信息,序列号不为全0 则表示LSAck 用来确认收到的链路状态信息。

LSP报文

链路状态PDU,类似于OSPF的LSU报文,用于交换链路状态信息。LSP分为两种:Level–1 LSP和Level–2 LSP。Level–1 LSP由Level-1路由器传送,Level–2 LSP由Level-2路由器传送,Level-1-2路由器则可传送以上两种LSP。

状态机

状态机:
1.down:设备接口未使能ISIS。
2.init:收到hello报文,但hello报文中不存在自身的MAC地址。
3.up:收到的hello报文中携带了自身的MAC地址。

ISIS邻接关系建立过程

广播网络

 1.设备处于down状态,没有使能ISIS
 2.设备处于init状态,发送hello报文,收到hello报文,但hello报文中不存在自身的MAC地址
 3.设备处于up状态,收到的hello报文中携带了自身的MAC地址
  *设备根据交互的hello报文进行DIS设备的选举(DIS类似于OSPF中的DR
   根据报文内的优先级值,值越大越优先;如果值相等,则比较接口的MAC地址,地址越大越优先
  *DIS主要用于在广播型网络中连接所有物理设备的虚拟设备,负责伪节点LSP的通告和维护
  *DIS是可以抢占的
  *DIS没有明确的备份设备,广播网络内的所有设备都在监听DIS
   选举为DIS的设备会周期10/3s发送hello报文,这样可以确保DIS出现故障时能够被更快速地被发现.
  *设备接口优先级值为0,也会参与DIS的选举
 4.邻接关系建立完成后,设备会通告自身所有的LSP通过LSP报文给DIS设备(目标地址为0180-c200-0014)
 5.DIS设备会周期(10s)通告CSNP报文(会携带DIS设备具有的所有LSP信息摘要)(目标地址为0180-c200-0014)
 6.广播内的其他设备收到CSNP报文后,根据报文内的摘要进行对比自身的LSDB
    1.如果自身LSDB和CSNP报文携带的摘要同步,则不做理会
    2.如果自身LSDB不存在CSNP报文携带的摘要,则发送PSNP报文,请求自身缺少的LSP(目标地址为0180-c200-0014)
 7.DIS设备收到PSNP报文后,回复LSP报文

IS-IS中DIS与OSPF协议中DR(Designated Router)的区别:

  1. 在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
  2. 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR
  3. 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。而在OSPF中,路由器只与DRBDR建立邻接关系。

p2p网络

 1.设备处于down状态,没有使能ISIS
 2.设备处于init状态,发送hello报文,收到hello报文,但hello报文中不存在自身的system-id
 3.设备处于up状态,收到的hello报文中携带了自身的system-id地址
  *P2P网络不会选举DIS
 4.邻接关系建立完成后,会将自身完整的LSP信息通过LSP报文发送
 5.对端收到LSP报文后,会发送PSNP报文进行确认
 6.LSP同步完成后,发送CSNP报文进行LSDB的同步检测
    如果收到的CSNP报文和自身的LSDB同步,则不予理会
    如果收到的CSNP报文和自身的LSDB不同步,则会发送PSNP报文进行请求
    收到PSNP报文后,会发送LSP报文
    收到LSP报文,回复PSNP进行确认

ISIS路由计算

区域内路由计算

 ISIS根据学习到的LSP,分析所有链路状态,先通过SPF算法计算出拓扑树,SPF算法计算出拓扑树后,直接将路由信息当作叶子挂载在拓扑节点上。

所有的链路开销默认都为10,路由的开销是迭加计算的。

区域间路由计算

L2设备如何计算L1设备的路由信息?

  L1/2设备会将L1的路由信息 当作叶子挂载在自身产生的L2-LSP上

     路由信息挂载时,会携带明细的开销值

  从L2设备视角看,该路由相当于是L1/2设备的路由信息

L1设备如何计算L2设备的路由信息?

    L1设备组成的非骨干区域类似于OSPF的特殊区域

    即L1设备通过缺省路由访问L2设备的路由信息

 *L1设备的缺省路由如何得到?

    L1设备收到L1/2设备产生的L1-LSP中 ATT bit置位为1

   自动生成一条下一跳指向L1/2设备的缺省路由

  *L1/2L1-LSPATT bit如何置位?

    1.产生该L1-LSP的设备一定是 L1/2设备

    2.L1/2设备存在L2的邻居关系

    3.L1/2设备收到不同区域的L2-LSP

L1访问L2设备路由信息的次优问题:

  L1设备通过ATT bit计算的缺省路由开销,都是到达L1/2设备的开销,没有L2设备路由的明细开销,容易出现次优路径。

如果解决次优路径?

通过路由渗透实现

 *什么是路由渗透?

   就是L1/2设备上 执行L2路由 引入到 L1

   [AR2-isis-1]import-route isis level-2 into level-1

   多台L1/2设备,都要执行渗透

区域外路由计算

ISIS本质上不区分内外部路由,都是将路由信息当作叶子挂载在自身的LSP上,ISIS的外部路由,在设备引入后,通过分片LSP进行携带

L1/2设备进行路由渗透时,会把内部、外部路由信息都当作叶子节点挂载在L1的LSP上。

ISIS设备在引入外部路由时,要根据设备的级别来执行引入,即外部路由默认的引入级别为L2。

L1/2设备在执行外部路由引入时,必须是L1-2的引入,因为单一的级别不支持路由渗透的操作

注意:ISIS外部路由的引入,根据设备的级别 指定引入路由时的级别。

ISIS路由更新和撤销、开销风格

内部路由更新和撤销

内部路由:都是更新式的路由更新 和 更新式的路由撤销

更新:1200s ,seq 是顺序排列的值 携带需要更新的信息

撤销:1200s ,seq 是更新的seq+1(大于原序列号)  不携带需要撤销的信息

外部路由更新和撤销

外部路由: 存在更新式更新、撤销 也存在时间老化的撤销

更新:第一条外部路由引入,时间1200s,seq是顺序排列的值,携带更新的信息

第二条外部路由引入,时间1200s,seq是上一个更新的seq+1,携带更新的信息

后面以此类推......

撤销:当存在多条外部路由,撤销其中一条,时间1200s,seq是上一个更新的seq+1,不携带需要撤销的信息

 如果所有外部路由都被撤销,时间 0s,seq 是上一个更新的seq(不变) ,不携带撤销的信息

开销风格

开销风格:             发送报文类型         接收报文类型
 窄风格(默认的)     窄                                  窄
 窄兼容                       窄                               窄、宽
 兼容                        窄、宽                           窄、宽
 宽风格                       宽                                   宽
 宽兼容                       宽                                窄、宽

相邻设备如果开销风格不一致,不会影响邻居的建立,会影响路由信息的计算

ISIS认证、汇总、过滤

认证

1.接口认证:对于ISIS邻居建立的Hello报文认证

   [AR1-GigabitEthernet0/0/0]isis authentication-mode md5 plain Huawei@123 ?

   也可以在接口认证时指定是发送L1-hello认证 还是L2-hello认证

   接口认证配置时,可以设置send-only参数,表示只发送带有认证的hello报文,本端不检测对方的hello认证(防止修改认证密码时邻居断开

2.区域认证:L1LSPSNP报文做认证

   [AR1-isis-1]area-authentication-mode md5 plain Huawei@123 ?

    all-send-only  发送LSP和SNP报文时携带认证,但是接收对端的LSP和SNP报文不做检测

    snp-packet     对SNP报文选择认证,LSP报文做认证

   [AR1-isis-1]area-authentication-mode md5 plain Huawei@123 snp-packet ?

    authentication-avoid  发送时不携带认证,接收时不做认证检测

    send-only             发送时携带认证,接收时不做认证检测

   *做区域认证,默认对LSPSNP报文进行认证

    通过参数snp-packet,来指定是否对SNP报文做认证

    1.LSP报文一定携带认证

    2.SNP报文可以通过参数配置是否携带认证

3.路由域认证:L2LSPSNP报文做认证

    [AR4-isis-1]domain-authentication-mode md5 plain Huawei

    和区域认证配置相同,且参数也相同,只是报文的级别发生了变化

汇总

1.内部路由汇总

   1.可以在ISIS视图下使用summary命令执行汇总操作

      [AR4-isis-1]summary 4.4.4.0 255.255.255.0

   2.必须是叶子路由挂载的节点设备来执行路由汇总

   3.如果是L1/2设备执行了渗透,则汇总时需要指定汇总的级别为L1

2.外部路由汇总

   和内部路由汇总一致

*汇总条目和明细条目关系:

 1.从LSP上来看,内部路由汇总:汇总后的LSP信息会直接替换明细的LSP信息

 2.从LSP上来看,外部路由汇总:汇总后不会存在分片LSP,只会使用实节点LSP进行携带

 3.汇总路由会继承明细路由最小的开销值

过滤

1、在ISIS视图下使用:

filter-policy   import:对于接收到的LSP,计算路由后是否加入到路由表中

    [AR1]acl 2000

    [AR1-acl-basic-2000]rule 5 deny source 4.4.4.0 0

    [AR1-acl-basic-2000]rule 10 permit

    [AR1]isis

    [AR1-isis-1]filter-policy 2000 import

 

  filter-policy   export:针对于外部路由信息,在发出时过滤

    [AR4]acl 2000

    [AR4-acl-basic-2000]rule 5 deny source 192.168.4.4 0

    [AR4-acl-basic-2000]rule 10 permit

    [AR4]isis

    [AR4-isis-1]filter-policy 2000 export 

    *该命令只在ASBR设备上引入外部路由后生效

2、filter 过滤:L1/2设备在路由渗透时执行的操作

    #

    acl number 2000 

     rule 5 deny source 1.1.1.1 0

     rule 10 permit

    #

    isis

     import-route isis level-1 into level-2 filter-policy 2000

   *可以做L2L1的过滤,也可以执行L1L2的过滤

   *因为ISIS不区分内外部路由,且所有的路由都是叶子挂载的

相关文章:

ISIS协议(动态路由协议)

ISIS基础 基本概念 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionL…...

llm开发框架新秀

原文链接:https://i68.ltd/notes/posts/20250404-llm-framework3/ google开源ADK-Agent Development Kit 开源的、代码优先的 Python 工具包,用于构建、评估和部署具有灵活性和控制力的复杂智能体项目仓库:https://github.com/google/adk-python 2.6k项目文档:Age…...

Zookeeper的典型应用场景?

大家好,我是锋哥。今天分享关于【Zookeeper的典型应用场景?】面试题。希望对大家有帮助; Zookeeper的典型应用场景? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务,主要用于管理和协调大…...

【C数据结构】 TAILQ双向有尾链表的详解

TAILQ双向有尾链表的详解 常见的链表结构1.SLIST2.STAILQ3.LIST4.TAILQ5.CIRCLEQ 一、TAILQ链表简介二、TAILQ的定义和声明三、TAILQ队列的函数1.链表头的初始化2.获取第一个节点地址3.获取最后一个节点地址4.链表是否为空5.下一个节点地址6.上一个节点地址7.插入头节点8.插入尾…...

redisson的unlock方法

//分布式方式,分布式锁,采用redisson锁 RLock lock redissonClient.getLock(userId.toString());//lock方法会无限重试。getLock底层是hash,大key是userid,小key是线程,value是重入次数 try {//boolean b lock.tryLo…...

ffmpeg 切割视频失败 ffmpeg 命令参数 -vbsf 在新版本中已经被弃用,需要使用 -bsf:v 替代

ffmpeg 切割视频失败 ffmpeg 命令参数 -vbsf 在新版本中已经被弃用,需要使用 -bsf:v 替代 从日志中可以看到问题出在第一个 ffmpeg 命令执行时: Unrecognized option vbsf.Error splitting the argument list: Option not found这是因为 ffmpeg 命令参…...

设计模式——抽象工厂模式总结

理解了前面的工厂模式后,再理解抽象工厂模式就很容易了。 工厂模式:https://blog.csdn.net/inside802/article/details/147170118?spm1011.2415.3001.10575&sharefrommp_manage_link 抽象工厂模式就是工厂模式的更加抽象化,父类不仅不承…...

JavaScript 定时器

在 JavaScript 中,定时器是实现代码在特定时间间隔执行或延迟执行的重要工具。下面我们将深入探讨定时器的相关知识。 定时器基础 setTimeout() setTimeout() 函数用于在指定的延迟时间后执行一次回调函数。它接受两个参数,第一个参数是要执行的回调函…...

企业经营决策风险

在企业的经营过程中,领导者每天都在面对大量的决策——该扩大生产还是收缩业务?该增设销售渠道还是提升产品质量?但你知道吗,企业最大的成本,不是生产成本,也不是人工成本,而是决策错误的成本&a…...

【云安全】云原生-centos7搭建/安装/部署k8s1.23.6单节点

一、节点基本配置 1、准备操作系统 2、 修改主机名 hostnamectl set-hostname master-1 hostnamectl set-hostname node1 hostnamectl set-hostname node2#验证hostnamectl status 3、修改/etc/hosts cat <<EOF >>/etc/hosts 192.168.255.137 master-1 192.168…...

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…...

力扣每日打卡 1922. 统计好数字的数目 (中等)

力扣 1922. 统计好数字的数目 中等 前言一、题目内容二、解题方法1. 暴力解法&#xff08;会超时&#xff0c;此法不通&#xff09;2. 快速幂运算3. 组合计数的思维逻辑分析组合计数的推导例子分析思维小结论 4.官方题解4.1 方法一&#xff1a;快速幂 三、快速幂运算快速幂运算…...

宝塔Linux面板 - 添加站点建站时没有域名实现 IP 地址访问测试(宝塔面板建站 IP 访问)

前言 使用面板添加站点时&#xff0c;必须要填写一个域名用来指向程序&#xff0c;没有域名怎么办&#xff1f; 答案&#xff1a;域名直接写 【服务器 IP 地址】 操作步骤 如果还没有添加站点&#xff0c;则直接在创建站点的时候&#xff0c;域名那填写服务器地址即可&#…...

【GitHub探索】mcp-go,MCP协议的Golang-SDK

近期大模型Agent应用开发方面&#xff0c;MCP的概念比较流行&#xff0c;基于MCP的ToolServer能力开发也逐渐成为主流趋势。由于笔者工作原因&#xff0c;主力是Go语言&#xff0c;为了调研大模型应用开发&#xff0c;也接触到了mcp-go这套MCP的SDK实现。 对于企业内部而言&am…...

手撕TCP内网穿透及配置树莓派

注意&#xff1a; 本文内容于 2025-04-13 15:09:48 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;手撕TCP内网穿透及配置树莓派。感谢您的关注与支持&#xff01; 之前入手了树莓派5&#xff0c;…...

人形机器人运动与操作: 控制、规划和学习方面的当前进展与挑战

前言 图 1&#xff1a;执行运动和操作任务的人形机器人&#xff1a;&#xff08;a&#xff09;HRP-4 在适应地形的同时擦拭木板[1]&#xff1b;&#xff08;b-g&#xff09;Digit、Hector[2]、Atlas、H1、Justin[3]和 Apollo 取放物体&#xff1b;&#xff08;h&#xff09;iCu…...

C++ 重构muduo网络库

本项目参考的陈硕老师的思想 1. 基础概念 进程里有 Reactor、Acceptor、Handler 这三个对象 Reactor 对象的作用是监听和分发事件&#xff1b;Acceptor 对象的作用是获取连接&#xff1b;Handler 对象的作用是处理业务&#xff1b; 先说说 阻塞I/O&#xff0c;非阻塞I/O&…...

【计算机网络实践】(十二)大学校园网综合项目设计

本系列包含&#xff1a; &#xff08;一&#xff09;以太网帧分析与网际互联协议报文结构分析 &#xff08;二&#xff09;地址解析协议分析与传输控制协议特性分析 &#xff08;三&#xff09;交换机的基本操作、配置、 虚拟局域网配置和应用 &#xff08;四&#xff09;交…...

通过api程序的方式编辑ps的三种方式

目前只使用了第一种 ps-python-api去操作 还没有尝试其他两种方式对于第一种方式必须要开启ps程序&#xff0c;程序调用修改新增图层和文档时会同步到ps页面&#xff0c;可以直观看到修改结果...

论文阅读笔记——Reactive Diffusion Policy

RDP 论文 通过 AR 提供实时触觉/力反馈&#xff1b;慢速扩散策略&#xff0c;用于预测低频潜在空间中的高层动作分块&#xff1b;快速非对称分词器实现闭环反馈控制。 ACT、 π 0 \pi_0 π0​ 采取了动作分块&#xff0c;在动作分块执行期间处于开环状态&#xff0c;无法及时响…...

MySQL表的增删改查进阶版

Mysql 1、数据库的约束1.1约束类型1.2 NULL约束1.3 UNIQUE&#xff1a;唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束&#xff08;重点&#xff09;1.6 FOREIGN KEY&#xff1a;外键约束&#xff08;重点&#xff09; 2.表的设计2.1一对一2.2…...

【C#】Socket通信的使用

在C#中&#xff0c;Socket通信是一种用于实现网络通信的底层技术。通过Socket&#xff0c;程序可以在网络上与其他设备进行数据交换。以下是如何使用C#中的System.Net.Sockets命名空间来实现Socket通信的详细步骤。 1. Socket通信的基本概念 Socket: 一个Socket是网络通信的端…...

linux以C方式和内核交互监听键盘[香橙派搞机日记]

最近在深入研究我的香橙派&#xff0c;不可避免的遇到了怎么认识和使用Linux内核的问题。 我给自己留了一个简单的任务&#xff1a;使用原生C来监听内核&#xff0c;实现读取键盘的消息。 CSDN上也有其他文章来解决这个问题&#xff0c;不过要么是技术不达标&#xff08;直接和…...

【C++初学】课后作业汇总复习(七) 指针-深浅copy

1、 HugeInt类:构造、、cout Description: 32位整数的计算机可以表示整数的范围近似为&#xff0d;20亿到&#xff0b;20亿。在这个范围内操作一般不会出现问题&#xff0c;但是有的应用程序可能需要使用超出上述范围的整数。C可以满足这个需求&#xff0c;创建功能强大的新的…...

【iOS】UIPageViewController学习

UIPageViewController学习 前言创建一个UIPageViewController最简单的使用 UIPageViewController的方法说明&#xff1a;效果展示 UIPageViewController的协议方法 前言 笔者最近在写项目时想实现一个翻书效果&#xff0c;上网学习到了UIPageViewController今天写本篇博客总结…...

GDB 调试命令详解:高效掌握常用调试技巧

&#x1f41e; GDB 调试命令详解&#xff1a;高效掌握常用调试技巧 GNU Debugger&#xff08;GDB&#xff09;是 Linux 下最强大的 C/C 调试工具。本文将系统梳理 GDB 的常用命令&#xff0c;覆盖运行控制、断点管理、变量查看、线程与进程调试等核心功能&#xff0c;助你快速掌…...

实验二 用递归下降法分析表达式实验

【实验目的】 1.掌握用递归下降分析法进行语法分析的方法。加深对自顶向下语法分析原理的理解。 2.掌握设计、编制并调试自顶向下语法分析程序的思想和方法。 3.本实验是高级语言程序设计、数据结构和编译原理中词法分析、自顶向下语法分析原理等知 识的综合。由于语法分析…...

【随身wifi】青龙面板保姆级教程

0.操作前必看 本教程基于Debian系统&#xff0c;从Docker环境。面板安装&#xff0c;到最后拉取脚本的使用。 可以拉库跑狗东京豆&#xff0c;elm红包等等&#xff0c;也可以跑写自己写的脚本&#xff0c;自行探索 重要的号别搞&#xff0c;容易黑号&#xff0c;黑号自己负责…...

从一到无穷大 #45:InfluxDB MCP Server 构建:从工程实践到价值重构

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 工程实践遇到的问题MCP Host选择开发流程 结果展现可能性展望工作生活带来的变化 MCP…...

app逆向专题五:新快报app数据采集

app逆向专题五:新快报app数据采集 一、抓包寻找数据接口二、编写代码三、完整代码一、抓包寻找数据接口 打开charles,并在手机端打开新快报app,点击“广州”或者“经济”等选项卡,抓包,寻找数据接口,如图所示: 二、编写代码 这里介绍一种简便的代码编写方法,在数据…...

使用 lm-eval 评估模型时报错:TypeError: ‘NoneType’ object is not callable 的解决方案

问题描述 在使用 lm-evaluation-harness 进行多 GPU 模型评估时&#xff0c;使用如下命令&#xff1a; accelerate launch --multi-gpu --num_processes 2 \-m lm_eval --model hf \--model_args pretrained${local_model_path} \--tasks mmlu \--batch_size 8 \--log_sample…...

脉冲耦合神经网络(PCNN):图像处理中的强大工具

文章目录 一、PCNN 的起源与背景二、PCNN 的基本原理(一)模型结构(二)工作方式(三)动态阈值与脉冲特征三、PCNN 在图像处理中的应用(一)图像分割(二)边缘检测(三)纹理分析四、PCNN 的实现与优化环境准备PCNN 类定义图像分割示例在图像处理和计算机视觉领域,神经网…...

【Git】从零开始使用git --- git 的基本使用

哪怕是野火焚烧&#xff0c;哪怕是冰霜覆盖&#xff0c; 依然是志向不改&#xff0c;依然是信念不衰。 --- 《悟空传》--- 从零开始使用git 了解 Gitgit创建本地仓库初步理解git结构版本回退 了解 Git 开发场景中&#xff0c;文档可能会经历若干版本的迭代。假如我们不进行…...

React Hooks 的使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

【NIO番外篇】之组件 Channel

目录 一、什么是NIO Channel&#xff1f;二、常见的Channel组件及其用法1. FileChannel2. SocketChannel3. ServerSocketChannel4. DatagramChannel &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支持一下&a…...

探秘 Ruby 与 JavaScript:动态语言的多面风采

1 语法特性对比&#xff1a;简洁与灵活 1.1 Ruby 的语法优雅 Ruby 的语法设计旨在让代码读起来像自然语言一样流畅。它拥有简洁而富有表现力的语法结构&#xff0c;例如代码块、符号等。 以下是一个使用 Ruby 进行数组操作的简单示例&#xff1a; # 定义一个数组 numbers [1…...

高频面试题(含笔试高频算法整理)基本总结回顾21

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

深入浅出一下Python函数的核心概念与进阶应用

本篇技术博文摘要 &#x1f31f; 本文系统梳理了Python函数的核心知识点&#xff0c;从基础概念到高级特性&#xff0c;构建了完整的函数编程知识体系。内容涵盖&#xff1a;变量作用域的局部与全局划分、函数注释的规范写法、参数传递中值与引用的区别、匿名函数的灵活应用&am…...

【漫话机器学习系列】198.异常值(Outlier)

异常值&#xff08;Outlier&#xff09;全面指南 —— 检测、分析与处理 作者&#xff1a;Chris Albon&#xff08;图源&#xff09; 场景&#xff1a;数据清洗与特征工程必备技能 一、什么是异常值&#xff08;Outlier&#xff09; 定义 异常值&#xff08;Outlier&#xff0…...

React 记账本项目实战:多页面路由、Context 全局

在本文中,我们将分享一个使用 React 开发的「记账本」项目的实战经验。该项目通过 VS Code 完成,包含首页、添加记录页、编辑页等多个功能页面,采用了 React Router 实现路由导航,使用 Context API 管理全局的交易记录状态,并引入数据可视化组件呈现不同月份的支出情况。项…...

[React] 如何用 Zustand 构建一个响应式 Enum Store?附 RTKQ 实战与 TS 架构落地

[React] 如何用 Zustand 构建一个响应式 Enum Store&#xff1f;附 RTKQ 实战与 TS 架构落地 本文所有案例与数据为作者自行构建&#xff0c;所有内容均为技术抽象示例&#xff0c;不涉及任何实际商业项目 自从之前尝试了一下 zustand 之后&#xff0c;就发现 zustand 是一个轻…...

DeepSeek在职场办公中的高效指令运用与策略优化

摘要 随着人工智能技术的飞速发展&#xff0c;大型语言模型在各个领域的应用日益广泛。DeepSeek作为一款具有影响力的AI产品&#xff0c;为职场办公带来了新的变革与机遇。本文深入剖析DeepSeek在职场办公场景下的提示词指令运用&#xff0c;通过对提示词概念、作用、设计原则的…...

mysql事务脏读 不可重复读 幻读 事务隔离级别关系

看了很多文档&#xff0c;发现针对事务并发执行过程中的数据一致性问题&#xff0c;即脏读、不可重复读、幻读的解释一塌糊涂&#xff0c;这也不能说什么&#xff0c;因为官方SQL标准中的定义也模糊不清。 按照mysql中遵循的事务隔离级别&#xff0c;可以梳理一下其中的关系 隔…...

Fork/Join框架与线程池对比分析

Fork/Join框架与线程池对比分析 1. 概述 线程池&#xff08;如ThreadPoolExecutor&#xff09;是Java并发编程中用于管理线程生命周期的通用工具&#xff0c;适用于处理大量独立任务。Fork/Join框架&#xff08;基于ForkJoinPool&#xff09;是Java 7引入的专用框架&#xff…...

docker 安装 Gitlab

GitLab 安装 #创建容器数据卷映射目录 mkdir -p /usr/docker/gitlab/config mkdir -p /usr/docker/gitlab/logs mkdir -p /usr/docker/gitlab/data #目录授权 chmod 777 -R /usr/docker/gitlab/*#直接复制可用&#xff08;记得改下宿主机ipv4,不知道怎么看&#xff0c;输入i…...

【贪心之摆动序列】

题目&#xff1a; 分析&#xff1a; 这里我们使用题目中给的第二个实例来进行分析 题目中要求我们序列当中有多少个摆动序列&#xff0c;摆动序列满足一上一下&#xff0c;一下一上&#xff0c;这样是摆动序列&#xff0c;并且要输出摆动序列的最长长度 通过上面的图我们可以…...

kubectl修改资源时添加注解

kubectl修改资源时添加注解 kubectl修改资源时添加注解老版本的注解(变化注解)删除Annotations查看Annotations信息 查看发布记录回滚 kubectl修改资源时添加注解 参考: 为什么我们要使用kubectl apply 修改资源时,在命令行后添加 --save-configtrue ,就会自动添加此次修改的…...

【C++初学】课后作业汇总复习(四) 复数类与运算符重载

1、复数类输出 如题&#xff0c;要求实现&#xff1a; 1、复数类含两个参数的构造函数&#xff0c;一个为实部&#xff0c;一个为虚部 2、用Show()现实复数的值。 输出 (23i&#xff09; //如题&#xff0c;要求实现&#xff1a; // //1、复数类含两个参数的构造函数&…...

十四、C++速通秘籍—函数式编程

目录 上一章节&#xff1a; 一、引言 一、函数式编程基础 三、Lambda 表达式 作用&#xff1a; Lambda 表达式捕获值的方式&#xff1a; 注意&#xff1a; 四、函数对象 函数对象与普通函数对比&#xff1a; 五、函数适配器 1、适配普通函数 2、适配 Lambda 表达式 …...

复刻系列-星穹铁道 3.2 版本先行展示页

复刻星穹铁道 3.2 版本先行展示页 0. 视频 手搓&#xff5e;星穹铁道&#xff5e;展示页&#xff5e;&#xff5e;&#xff5e; 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列官方的网站: 《崩坏&#xff1a;星穹铁道》3.2版本「走过安眠地的花丛」专题展示页现已上线复刻的网…...