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

BGP笔记及综合实验

BGP基础


一、BGP产生背景
- BGP定义:边界网关协议(BGP)是自治系统间的动态路由协议,属于外部网关协议(EGP)。
- 自治系统(AS):由统一管理、运行同一IGP协议的路由器组成,通常采用相同路由策略。
- AS编号:
- 2字节:范围0-65535,0和65535保留;公有AS为1-64511,私有AS为64512-65535。
- 4字节:公有AS为65536–4199999999,私有AS为4200000000–4294967294。
二、路由协议的分类
- IGP:包括RIP、OSPF、IS-IS。
- EGP:即BGP。
三、BGP协议特性
1. 负责在自治系统间传递路由,AS内部路由扩散依靠IGP。
2. 是路径矢量协议,一跳为一个自治系统,路由在AS间传递时下一跳会变化,在AS内部传递时下一跳不变。
3. 具有AS防环机制,通过AS_PATH属性,当路由的AS_PATH中包含本AS编号时不学习该路由。
4. 基于TCP协议传输,端口号179,需手动配置邻居。
5. 第一次网络收敛发送完整路由表,后续只发送增量更新。
6. 有多种属性可控制路由选择。
7. 支持路由聚合。
8. 可进行路由过滤和路由策略配置。
四、BGP基本术语
- BGP Speaker:运行BGP协议的路由器。
- BGP Peer:相互存在TCP连接、交换路由信息的BGP Speaker。
- BGP对等体:
- EBGP对等体:跨AS的邻居,一般物理直连,从其获得的路由会向所有对等体通告。
- IBGP对等体:同一AS内部的邻居。
- 邻居可以直连,也可以非直连。
五、BGP规划问题(路由黑洞)
- 产生原因:IBGP邻居之间存在未运行BGP协议的路由器,无法获得BGP路由,导致数据包被丢弃。
- 解决方法:
- BGP引入IGP。
- 在黑洞路由器上配置目的网段的静态路由。
- 建立IBGP全连接(存在IBGP水平分割机制,从IBGP邻居学习的路由不传递给其他IBGP邻居)。
- 使用BGP路由反射器(无视IBGP防环机制,减少邻居关系数量)。
- 采用BGP联盟(减少邻居关系数量,受IBGP水平分割限制)。
六、BGP环路问题(水平分割) 
- EBGP水平分割:通过AS_PATH属性防环,学习到的路由中若有本地AS号则拒绝学习。
- IBGP水平分割:路由器从一个IBGP对等体学习到的BGP路由,不会通告给其他IBGP对等体。
七、BGP消息种类
- 头部信息:包含标记(解决协议兼容性)、长度(指示报文长度)、类型(指示报文类型)。
- 数据包种类:
- Open:建立BGP对等体连接,携带route-id,包含保持时间、可选参数等。
- Keepalive:周期性发送以保持连接有效性,默认每60秒发送,超时时间180秒。
- Update:携带路由更新信息,包括要撤销和新增的路由及相关属性。
- Notification:检测到错误状态时发送,之后关闭BGP连接。
- Router-refresh:改变路由策略后,要求对等体重发指定地址族的完整路由表,仅支持该能力的路由器会响应。
八、BGP状态机
- Idle:空闲状态,停留30秒,准备TCP连接并监视远程对等体。
- Connect:TCP连接中,连接失败进入Active状态。
- Active:TCP主动连接方,连接未成功则反复尝试。
- OpenSent:成功建立TCP连接,发送open报文,等待对方open报文。
- OpenConfirm:收到open报文,发送Keepalive报文,等待第一个Keepalive报文。
- Established:收到Keepalive报文,成功建立邻居关系。
九、BGP邻居建立条件
- IBGP:
- 物理口建邻:建议使用直连接口地址。
- 环回口建邻:对方接口有IP地址且TCP可达,更新源地址需与指定邻居地址一致,无需直连。
- EBGP:
- 物理口建邻:建议使用直连接口地址。
- 环回口建邻:对方接口有IP地址且TCP可达,可修改最大跳数实现非直连,更新源地址需与指定邻居地址一致。
- 注意:默认IBGP邻居间数据包TTL为255,EBGP为1,环回建立EBGP邻居需修改TTL值。
十、BGP基本配置
1. 启动与创建连接:启动BGP,配置router-id,指定对等体及AS号,创建地址族并使能交换路由信息能力。
2. 优化连接:指定建立TCP连接的源接口,设置EBGP对等体最大跳数。
3. 生成路由:将本地路由发布到BGP路由表,或引入其它路由协议的路由。
4. 查看命令:display bgp peer(查看对等体信息)、display bgp routing-table(查看路由表)。

BGP选路及属性


一、BGP路由选路原则(13条)
1. 丢弃下一跳(NEXT_HOP)不可达的路由。
2. 优选Preferred-value值最大的路由(默认0,取值0~65535,H3C和华为私有属性)。
3. 优选本地优先级(LOCAL_PREF)最高的路由。
4. 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由。
5. 优选AS路径(AS_PATH)最短的路由。
6. 依次选择ORIGIN属性为IGP、EGP、Incomplete的路由。
7. 优选MED值最低的路由。
8. 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由。
9. 优选下一跳度量值(通过IGP到达下一跳的度量)最低的路由。
10. 优选CLUSTER_LIST长度最短的路由。
11. 优选ORIGINATOR_ID最小的路由。
12. 优选Router ID最小的路由器发布的路由。
13. 优选IP地址最小的对等体发布的路由。
二、BGP负载分担时的选路
1. 背景:BGP默认选出唯一最优路由,可通过配置命令或路由策略修改属性实现负载分担,如 maximum load-balancing 2 允许最多2条等价路径。
2. 与IGP的区别:
- IGP通过自身路由算法,对度量值相等的路由进行负载分担。
- BGP无路由计算算法,基于选路规则有条件地实现负载分担。
三、BGP路由的发布策略
- 只将最优路由发布给对等体(默认发布BGP路由表最优路由,配置 active-route-advertise 则发布IP路由表最优路由)。
- 只发布自己使用的最优路由。
- 从EBGP获得的路由向所有BGP对等体发布。
- 从IBGP获得的路由不向IBGP对等体发布(IBGP水平分割),但会发布给EBGP对等体。
- BGP连接建立后,向新对等体发布所有满足条件的路由,后续仅在路由变化时发布更新。
四、BGP属性(控制选路的方法)
1. 公认属性(所有路由器必须识别)
公认必遵属性(BGP路由必须携带)
- AS_path:记录路由经过的AS编号,用于AS防环,选路时AS_PATH短的优先。
- next-hop:下一跳地址。向EBGP邻居发布路由时,下一跳为EBGP邻居地址;向IBGP邻居发布时,下一跳不变,可通过命令修改为本地地址。
- origin:描述路由来源,属性值优选顺序为IGP>EGP>Incomplete。
公认可选属性(所有路由器识别,非必须携带)
- local-perference:本地优先级,仅在IBGP邻居间传递,默认值100,值大的优先,用于AS内选择离开本AS的最佳路由。
- Atomic-aggregate:自动聚合属性,BGP支持自动或手动聚合。
2. 可选属性
可选传递属性(路由器可不识别,但会传递)
- aggregator:手动聚合属性。
- community:团体属性。
可选非传递属性(路由器可不识别,且不传递)
- clustor_list:集群列表。
- originator_id:集群ID。
- MED:多出口鉴别器,用于判断流量进入AS的最优路径,仅在相邻AS间传递,默认值0(network路由)或原IGP的cost(引入路由),值小的优先。
3. preferred-value
- 首选项,H3C和华为私有属性,默认0,取值0~65535,值大的路由优先。
五、属性控制的选择建议
1. 影响下游所有路由器选路:使用AS-PATH。
2. 影响本AS内部某个路由器选路:使用Local-preference。
3. 影响下游某一个AS的路由器选路:使用MED。
4. 影响某一台路由器选路:使用preferred-value。
六、属性控制方法
通过路由策略实现,对匹配的路由用 Apply 子句修改属性,在邻居的入/出方向调用策略,空节点允许其他网段通过。

BGP对等体组、聚合、路由反射器、联盟、团体属性


一、大规模BGP网络的问题
- BGP对等体众多,配置和维护复杂。
- BGP路由表庞大,对设备性能要求高。
- IBGP全连接导致邻居数量过多,管理难度大。
- 路由变化频繁,引发频繁的路由更新。
二、解决大规模BGP网络问题的方案
问题类型 解决方法 
BGP对等体众多 对等体组、BGP团体 
BGP路由表庞大 BGP路由聚合 
IBGP全连接(邻居过多) 路由反射器、BGP联盟 
路由变化频繁 BGP路由衰减 
三、对等体组
- 定义:具有相同属性的对等体集合,可简化配置。
- 分类:
- IBGP对等体组:同一AS内的对等体组成。
- EBGP对等体组:同一外部AS的对等体组成(不常用,因多外部AS需多组配置)。
- 配置示例:
- IBGP对等体组: [R2-bgp]group in internal ,再将对等体加入组并配置属性。
- EBGP对等体组: [Router-bgp]group group-name external ,设置AS号并加入对等体。
四、BGP路由聚合
- 作用:减小路由表规模。
- 类型:
- 自动聚合:仅对引入的IGP路由生效,汇总到主类(易产生黑洞),华为默认关闭,配置命令 [r1-bgp]summary automatic 。
- 手工聚合:可精确汇总,可在任意路由器配置,常用命令:
-  aggregate 172.16.0.0 16 :基本聚合(明细路由仍通告)。
-  aggregate 172.16.0.0 16 detail-suppressed :抑制明细路由。
-  aggregate 172.16.0.0 16 as-set :汇总路由继承明细路径属性。
-  aggregate 172.16.0.0 16 suppress-policy 策略名 :选择性抑制明细路由。
五、路由反射器
- 定义:能将从IBGP邻居学习的路由反射给其他IBGP邻居,替代IBGP全连接。
- 角色:
- RR(路由反射器):核心设备,负责反射路由。
- Client(客户机):与RR建立IBGP邻居,无需知晓RR存在。
- 非客户机:与RR建立IBGP邻居,但不被视为客户机。
- 反射规则:
- 从非客户机接收的路由,仅反射给客户机。
- 从客户机接收的路由,反射给所有客户机和非客户机(排除始发者)。
- 从EBGP接收的路由,反射给所有客户机和非客户机。
- 防环机制:
- Cluster_list:记录经过的反射器集群ID,含本机ID则丢弃路由,短列表优先。
- Originator_ID:路由始发者的Router ID,收到与自身ID相同的路由则忽略,值小优先。
- 配置示例: [R2-bgp]peer 3.3.3.3 reflect-client (指定客户机); [R2-bgp]reflector cluster-id 2.2.2.2 (配置集群ID)。
六、BGP联盟
- 定义:将一个AS划分为多个子AS,子AS内IBGP全连接,子AS间建立联盟内部EBGP连接,解决IBGP连接激增问题。
- 注意点:
- 子AS使用私有AS编号。
- 与外部AS仍建立正常EBGP邻居。
- 跨子AS的EBGP邻居需修改下一跳为本机。
- 配置示例: [R2-bgp]confederation id 200 (申明主AS); [R2-bgp]confederation peer-as 65002 (申明联盟同伴子AS)。
七、BGP团体属性(Community)
- 定义:路由的标记,用于批量匹配具有相同特征的路由。
- 表达格式:32位二进制,可表示为十进制或“AS号:自定义值”(前16位AS号,后16位自定义)。
- 公认团体属性:
- Internet:默认,可通告给所有对等体。
- no-advertise:不可通告给任何对等体。
- no-export:不可通告给外部AS(可通告给联邦EBGP)。
- no-export-subconfed:不可通告给外部AS及联邦EBGP。
- 配置示例:通过路由策略打标记, [R1-route-policy]apply community no-export ,并启用通告 [R1-bgp]peer 100.1.1.2 advertise-community 。
八、BGP路由衰减(Route Dampening)
- 作用:解决路由振荡问题。
- 原理:路由每振荡一次加惩罚值(默认1000),超过抑制阈值(默认2000)则抑制路由;惩罚值每半衰期(默认15分钟)减半,低于重用阈值(默认750)则重新启用。
- 配置命令: [bgp 100]dampening (默认参数); dampening 15 750 2000 10000 (自定义参数:半衰期、重用阈值、抑制阈值、最大惩罚值)。

BGP综合实验

一、实验拓扑

二、实验需求

1、AS1中存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告;AS3中存在两个环回,一个地址为192.168.2.0/24,该地址不能在任何协议中宣告,最终要求这两个环回可以ping通;

2、R1-R8的建邻环回用x.x.x.x/32表示;整个AS2的IP地址为172.16.0.0/16,请合理划分;并且其内部配置OSPF协议;

3、AS间的骨干链路IP地址随意定制;

4、使用BGP协议让整个网络所有设备的环回可以互相访问;

5、减少路由条目数量,避免环路出现;

三、实验步骤

1.IP地址配置

[R1]int g 0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24
[R1-GigabitEthernet0/0/0]int l 0
[R1-LoopBack0]ip add 1.1.1.1 32
[R1-LoopBack0]q
[R1]int l 1
[R1-LoopBack1]ip add 192.168.1.1 24


[R2]int g 0/0/0 
[R2-GigabitEthernet0/0/0]ip add  12.1.1.2 24
[R2-GigabitEthernet0/0/0]int g 0/0/1
[R2-GigabitEthernet0/0/1]ip add 172.16.1.1 30
[R2-GigabitEthernet0/0/1]int g 0/0/2
[R2-GigabitEthernet0/0/2]ip add 172.16.1.21 30
[R2-GigabitEthernet0/0/2]int l 0
[R2-LoopBack0]ip add 2.2.2.2 32


[R3]int g 0/0/0
[R3-GigabitEthernet0/0/0]ip add 172.16.1.2 30
[R3-GigabitEthernet0/0/0]int g 0/0/1
[R3-GigabitEthernet0/0/1]ip add 172.16.1.5 30
[R3-GigabitEthernet0/0/1]int l 0
[R3-LoopBack0]ip add 3.3.3.3 32
[R3-LoopBack0]int l 1
[R3-LoopBack1]ip add 172.16.3.1 24


[R4]int g 0/0/0
[R4-GigabitEthernet0/0/0]ip add 172.16.1.6 30
[R4-GigabitEthernet0/0/0]int g 0/0/1
[R4-GigabitEthernet0/0/1]ip add 172.16.1.9 30
[R4-GigabitEthernet0/0/1]int l 0
[R4-LoopBack0]ip add 4.4.4.4 32
[R4-LoopBack0]int l1
[R4-LoopBack1]ip add 172.16.4.1 24

[R5]int g 0/0/0
[R5-GigabitEthernet0/0/0]ip add 172.16.1.22 30
[R5-GigabitEthernet0/0/0]int g 0/0/0
[R5-GigabitEthernet0/0/0]int g 0/0/1
[R5-GigabitEthernet0/0/1]ip add 172.16.1.17 30
[R5-GigabitEthernet0/0/1]int l 0
[R5-LoopBack0]ip add 5.5.5.5 32
[R5-LoopBack0]int l 1
[R5-LoopBack1]ip add 172.16.5.1 24

[R6]int g 0/0/0
[R6-GigabitEthernet0/0/0]ip add 172.16.1.18 30
[R6-GigabitEthernet0/0/0]int g 0/0/1
[R6-GigabitEthernet0/0/1]ip add 172.16.1.13 30
[R6-GigabitEthernet0/0/1]int l 0
[R6-LoopBack0]ip add 6.6.6.6 32
[R6-LoopBack0]int l 1
[R6-LoopBack1]ip add 172.16.6.1 24

[R7]int g0/0/0
[R7-GigabitEthernet0/0/0]ip add 172.16.1.14 30
[R7-GigabitEthernet0/0/0]int g 0/0/2
[R7-GigabitEthernet0/0/2]ip add 172.16.1.10 32
[R7-GigabitEthernet0/0/2]ip add 172.16.1.10 30
[R7-GigabitEthernet0/0/2]int g 0/0/1
[R7-GigabitEthernet0/0/1]ip add 78.1.1.1 24
[R7-GigabitEthernet0/0/1]int l 0
[R7-LoopBack0]ip add 7.7.7.7 32
[R7-LoopBack0]int l 1
[R7-LoopBack1]ip add 172.16.7.1 24

[R8]int g 0/0/0
[R8-GigabitEthernet0/0/0]ip add 78.1.1.2 24
[R8-GigabitEthernet0/0/0]int l 0
[R8-LoopBack0] ip add 8.8.8.8 32
[R8-LoopBack0]int l 1
[R8-LoopBack1]ip add 192.168.2.1 24

2.AS2内部配置OSPF协议

[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]net 172.16.1.1 0.0.0.0
[R2-ospf-1-area-0.0.0.0]net 172.16.1.21 0.0.0.0
[R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0

[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]net 172.16.1.2 0.0.0.0
[R3-ospf-1-area-0.0.0.0]net 172.16.1.5 0.0.0.0
[R3-ospf-1-area-0.0.0.0]net 3.3.3.3  0.0.0.0
[R3-ospf-1-area-0.0.0.0]net 172.16.3.0 0.0.0.255

[R4]ospf 1 router-id 4.4.4.4 
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0]net 172.16.1.6 0.0.0.0
[R4-ospf-1-area-0.0.0.0]net 172.16.1.9 0.0.0.0
[R4-ospf-1-area-0.0.0.0]net 172.16.4.0 0.0.0.255

[R5]ospf 1 router-id 5.5.5.5
[R5-ospf-1]area 0
[R5-ospf-1-area-0.0.0.0]net 172.16.1.22 0.0.0.0
[R5-ospf-1-area-0.0.0.0]net 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0]net 172.16.5.0 0.0.0.255
[R5-ospf-1-area-0.0.0.0]net 172.16.1.17 0.0.0.0

[R6]ospf 1 router-id  6.6.6.6
[R6-ospf-1]area 0
[R6-ospf-1-area-0.0.0.0]net 6.6.6.6 0.0.0.0
[R6-ospf-1-area-0.0.0.0]net 172.16.1.18 0.0.0.0
[R6-ospf-1-area-0.0.0.0]net 172.16.1.13 0.0.0.0
[R6-ospf-1-area-0.0.0.0]net 172.16.6.0 0.0.0.255

[R7]ospf 1 router-id 7.7.7.7
[R7-ospf-1]area 0
[R7-ospf-1-area-0.0.0.0]net 7.7.7.7  0.0.0.0
[R7-ospf-1-area-0.0.0.0]net 172.16.1.14 0.0.0.0
[R7-ospf-1-area-0.0.0.0]net 172.16.1.10 0.0.0.0
[R7-ospf-1-area-0.0.0.0]net 172.16.7.0 0.0.0.255

检查配置

R2

R3

R7

3.BGP配置

[R1]bgp 1

[R1-bgp]peer 12.1.1.2 as-number 2

[R1-bgp]network 1.1.1.1 32

[R2]bgp 64512

[R2-bgp]confederation id 2

[R2-bgp]peer 12.1.1.1 as-number 1

[R2-bgp]confederation peer-as 64513

[R2-bgp]peer 172.16.1.3 as-number 64512

[R2-bgp]peer 172.16.1.3 connect-interface LoopBack 0

[R2-bgp]peer 172.16.1.3 next-hop-local

[R2-bgp]peer 172.16.0.22 as-number 64513

[R2-bgp]peer 172.16.0.22 next-hop-local

[R3-bgp]bgp 64512

[R3-bgp]confederation id 2

[R3-bgp]peer 172.16.1.2 as-number 64512

[R3-bgp]peer 172.16.1.2 connect-interface LoopBack 0

[R3-bgp]peer 172.16.1.4 as-number 64512

[R3-bgp]peer 172.16.1.4 connect-interface LoopBack 0

[R3-bgp]peer 172.16.1.6 reflect-client

[R4]bgp 64512

[R4-bgp]confederation id 2

[R4-bgp]peer 172.16.1.3 as-number 64512

[R4-bgp]peer 172.16.1.3 connect-interface LoopBack 0、

[R5]bgp 64513

[R5-bgp]confederation id 2

[R5-bgp]confederation peer-as 64512

[R5-bgp]peer 172.16.0.21 as-number 64512

[R5-bgp]peer 172.16.0.21 next-hop-local

[R5-bgp]peer 172.16.1.6 as-number 64513

[R5-bgp]peer 172.16.1.6 connect-interface LoopBack 0

[R5-bgp]peer 172.16.1.6 next-hop-local

[R6]bgp 64513

[R6-bgp]confederation id 2

[R6-bgp]peer 172.16.1.5 as-number 64513

[R6-bgp]peer 172.16.1.5 connect-interface LoopBack 0

[R6-bgp]peer 172.16.1.7 as-number 64513

[R6-bgp]peer 172.16.1.5 connect-interface LoopBack 0

[R6-bgp]peer 172.16.1.17 reflect-client 

[R7]bgp 64513

[R7-bgp]confederation id 2

[R7-bgp]peer 34.1.1.2 as-number 3

[R7-bgp]peer 172.16.1.6 as-number 64513

[R7-bgp]peer 172.16.1.6 connect-interface LoopBack 0

[R7-bgp]peer 172.16.1.6 next-hop-local

[R8]bgp 3

[R8-bgp]peer 34.1.1.1 as-number 2

[R8-bgp]net 8.8.8.8 32

查看是否ping通

4.减少路由条目

[R2]ip route-static 172.16.0.0 16 NULL 0
[R2]bgp 64512
[R2-bgp]net 172.16.0.0 16

[R7]ip route-static 172.16.0.0 16 NULL 0
[R7]bgp 64513
[R7-bgp]net 172.16.0.0 16

5.配置GRE环境(因为AS1中存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告;AS3中存在两个环回一个地址为192.168.2.0/24,该地址不能在任何协议中宣告,最终要求这两个环回可以ping通,故使用GRE)

[R1]int t 0/0/0
[R1-Tunnel0/0/0]ip add 11.1.1.1 24  
[R1-Tunnel0/0/0]tunnel-protocol gre    
[R1-Tunnel0/0/0]source 1.1.1.1  
[R1-Tunnel0/0/0]destination 8.8.8.8
[R1]ip route-s    
[R1]ip route-static 192.168.2.0 24 11.1.1.2

[R8]int t 0/0/0
[R8-Tunnel0/0/0]ip add 11.1.1.2 24  
[R8-Tunnel0/0/0]tunnel-protocol gre
[R8-Tunnel0/0/0]source 8.8.8.8
[R8-Tunnel0/0/0]description     
[R8-Tunnel0/0/0]destination 1.1.1.1   
[R8]ip route-static 192.168.1.0 24 11.1.1.1

实验测试全网通

http://www.lryc.cn/news/614130.html

相关文章:

  • 如何在simulink中双击一个模块弹出一个exe?
  • 三防平板+天通卫星电话,打通无人之境的通信经脉
  • 前端开发:JavaScript(7)—— Web API
  • 从手工到智能决策,ERP让制造外贸企业告别“数据孤岛“降本增效
  • 生产管理ERP系统|物联及生产管理ERP系统|基于SprinBoot+vue的制造装备物联及生产管理ERP系统设计与实现(源码+数据库+文档)
  • Selenium + Python + Pytest + Yaml + POM
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器
  • 【量子计算】量子计算驱动AI跃迁:2025年算法革命的曙光
  • 行业速览:中国新能源汽车市场格局与关键趋势
  • 时序数据库-涛思数据库
  • 实现一个进程池(精讲)
  • ​​Vue3 + Element Plus 构建的现代化即时通讯在线客服系统​
  • STM32学习笔记5-TIM定时器-1
  • 线程池基础知识
  • wstool和catkin_tools工具介绍
  • 智慧社区(十)——声明式日志记录与小区地图功能实现
  • Python实现点云PCA配准——粗配准
  • Ubuntu安装 L20显卡驱动
  • Linux网络--2、Socket编程
  • 中国电信清华:大模型驱动的具身智能发展与挑战综述
  • 动漫软件集合分享
  • Pytest项目_day08(setup、teardown前置后置操作)
  • 144.二叉树的前序遍历
  • 鲸签云解决互联网行业合同管理难题​
  • 【Rust】多级目录模块化集成测试——以Cucumber为例
  • 线程组和线程池的基本用法
  • 【Spring Boot 快速入门】八、登录认证
  • duxapp 2025-05-29 更新 兼容鸿蒙C-API方案,现在鸿蒙端可以用于生产
  • React SSR 水合问题
  • 《告别Bug!GDB/CGDB调试实战指南》