news 2026/9/24 12:53:32

BGP联邦实验详解:从配置到验证,彻底搞懂AS_PATH与下一跳

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BGP联邦实验详解:从配置到验证,彻底搞懂AS_PATH与下一跳

BGP联邦(BGP Confederations)这个东西,我见过太多人把它当成考试题里的背诵段落来处理了。它总是被放在路由反射器后面草草讲完,文档里看概念也简单,无非是“把大AS拆成小AS”。可真到自己在模拟器或者VyOS里动手搭实验的时候,问题全冒出来了:联邦EBGP和真正的EBGP到底哪里不一样?为什么我配完之后,外部邻居看到的AS号不是65001?联邦内部跨子AS传递路由时,下一跳到底改不改?这些问题光看PPT永远说不清楚,必须亲手把路由从一端转到另一端,看一遍AS_PATH和下一跳的变化,才算真正搞懂。

这篇东西是我基于VyOS(底层FRR)完整跑通的一个BGP联邦综合实验,拓扑里同时包含真实EBGP、IBGP、联邦EBGP三种会话关系,覆盖了绝大多数组网场景。适合刚学完BGP基础、正在准备网络认证,或者在实际工作中规划中型IBGP网络的人参考。我会直接给拓扑、给配置、给验证命令和输出,每个关键动作都解释为什么这么做。跟着做一遍,你对联邦的理解会扎实很多。

1. 从全互联数量公式看联邦到底解决了什么问题

先说清楚联邦这个特性诞生的背景,否则你配置的时候会觉得它很多余。

BGP内部有一条非常“不讲情面”的规则:从IBGP邻居学到的路由,不会再通告给其他IBGP邻居。这是BGP防止AS内部环路的核心机制,但副作用也很明显——同一AS内部,所有运行IBGP的路由器必须两两建立会话,全网全互联。否则路由传不出去。

这里有一个很经典的公式:需要建立的IBGP会话数量是 N×(N-1)/2,N 是AS内部BGP路由器数量。

我见过不少真实网络的教训,这里直接算给你看:

AS内BGP路由器数量 NIBGP全互联会话数 N×(N-1)/2
510
1045
20190
501225
1004950

N=20的时候,190条会话已经很难维护了。到100台设备的时候,接近5000条会话,每条都要手工配置、监控、排障,这基本就是灾难。

1.1 联邦的“子AS”拆解思路

联邦的解决办法是:把一个大的AS,比如AS 100,划分成多个内部子AS。子AS内部仍然走IBGP,子AS之间跑一种特殊形态的EBGP。因为子AS之间确实用了不同的AS号,所以它们之间建立的是EBGP邻居。

但关键是,这些子AS之间传递路由的时候,会保留IBGP的很多关键行为,比如下一跳不修改、本地优先级可以跨子AS传递、MED不会被重置。对外部真正的EBGP邻居来说,整个联邦仍然表现为一个AS 100,而不是一堆65001、65002。

这个设计聪明的地方在于:它把“必须全互联”的范围从整个大AS缩小到了每个子AS内部。子AS内部的设备数量少了,IBGP会话数量自然大幅度下降。

还是用20台设备举例。如果把AS 100拆成4个子AS,每个子AS 5台设备,内部各自全互联,那么每个子AS内部只有10条IBGP会话,4个子AS总共40条。子AS之间的联邦EBGP连接只需要几条,用来把路由串起来。整体会话量从190条降到了50条左右,而且每个子AS可以独立管理。

1.2 联邦 vs 路由反射器(RR)的取舍

说到解决IBGP扩展性,很多人第一反应是路由反射器,为什么还要用联邦?

路由反射器的思路是打破水平分割:客户端把路由发给反射器,反射器再反射给其他客户端,这样不需要全互联。它配置简单,一台RR可以服务几十台甚至上百台客户端,所以现实中RR用得更多。

但RR有一个很少有人注意的弱点:普通客户端只会保留从RR学到的路径。如果RR的选路不是最优的,全网跟着走偏。RR本身成为选路的关键节点,所以生产环境通常要上双RR,并且配合BGP策略来保证路径可靠。

联邦的路线不一样。它保留了EBGP那种“每个路由器自己保留完整路径、自己算最优”的能力。子AS之间的联邦EBGP连接虽然是“外部”连接,但在路由属性上尽量保持内部语义,所以每个路由器仍然能独立判断哪条路径更优。这对于多出口、需要精细化选路的网络非常有价值。

实际部署中,联邦和RR并不是二选一,而是经常组合使用:大AS用联邦切成几个子AS,子AS内部再用RR减少全互联。这样两层结构都能把规模控制住。

2. 联邦机制的五个“像EBGP又不像EBGP”的规则

联邦之所以容易让人混淆,是因为它夹在IBGP和EBGP之间,行为规则一半像这个,一半像那个。我把它拆成五条规则,每一条都对应实验里能验证到的现象。

2.1 对等体类型:子AS之间是EBGP,但属于同一个联盟

在配置上,子AS之间因为remote-as填的是不同的子AS号,所以走的确实是EBGP的协商流程。但设备会检查一个关键配置:这些子AS是否在“confederation peers”列表里。如果在,BGP就把这个邻居当作联邦内部成员处理。

这个身份识别非常重要。它决定了后面几条规则是否生效。如果没有正确配置confederation identifier和confederation peers,设备会把子AS之间的会话当成真实EBGP对待,导致路由属性处理全乱套。

2.2 下一跳与本地优先级:IBGP属性不被重置

这是联邦最反直觉的地方,也是实验中一定要亲手验证的重点。

真实的EBGP会话在通告路由时,会把下一跳改成自己的地址;但联邦EBGP会话不会。路由在联邦内部从子AS 65001传到子AS 65002,下一跳字段保持最初的BGP发言者不变。也就是说,接收方必须通过IGP能到达那个原始下一跳,否则路由就是“看起来有,实际不可达”。

本地优先级也一样。真实EBGP收到的路由,本地优先级会被重置为默认值,LOCAL_PREF在AS之间不会传播;但联邦内部的路由传递会保留LOCAL_PREF。这意味着你可以在联邦内的入口设备上设置本地优先级,整条联邦内的所有设备都能按照这个优先级选路。

2.3 AS_PATH处理:内部可见子AS号,外部只看到联盟AS号

AS_PATH是联邦实验里最有观察价值的一个点,我建议你重点抓。

当路由在联邦内部跨越子AS边界时,发送方会把自己的子AS号追加到AS_PATH里。联邦内的设备看AS_PATH,能看到类似“65002 200”这样的路径,里面包含子AS号。

但当这条路由通告给联邦外部的真正EBGP邻居时,协议要求把所有子AS号从AS_PATH中剥离,只保留联邦的联盟ID。所以外部AS 200的设备看这些前缀,AS_PATH里只有AS 100,完全看不到65001、65002。

这就是联邦对外表现为“单AS”的核心机制。如果你的实验里外部邻居看到了子AS号,那一定是配置有问题,后面排错部分我会细说。

2.4 MED和路由通告规则的保留

MED(Multi-Exit Discriminator)在多出口网络里用来表达“哪个入口更优先”。真实EBGP会话会把MED重置为0,但联邦内部跨子AS传递时,MED会保留下来。

路由通告规则上,联邦EBGP会话比IBGP灵活:它允许路由器把从IBGP学到的路由继续通告给其他子AS的联邦EBGP邻居,同时也保留AS_PATH环路检测来防止真正环路。这解决了IBGP水平分割带来的传播限制,又不会造成无限循环。

我把这五条规则整理成一张对比表,后面实验验证的时候可以对照着看:

行为IBGP真实EBGP联邦EBGP
下一跳是否修改不修改修改为自身不修改
LOCAL_PREF传递保留重置保留
MED传递保留重置保留
AS_PATH追加自身AS不追加追加追加子AS号
对外部EBGP隐藏子AS号--隐藏

3. 综合实验拓扑、地址规划与底层IGP

下面进入正题,我把整个实验环境完整描述一遍。你可以在GNS3、EVE-NG里用VyOS镜像,也可以用装了FRR的Linux容器,配置命令基本兼容。

3.1 拓扑设计思路

实验环境为一台外部路由器 R6 位于 AS 200,它要与联邦 AS 100 建立真实 EBGP 会话。AS 100 被划分为两个子 AS:AS 65001 和 AS 65002。

AS 65001 内有 R1、R2、R3 三台路由器,三台之间形成 IBGP 全互联。AS 65002 内有 R4、R5 两台,R4 与 R5 建立 IBGP。两个子 AS 之间用两条联邦 EBGP 连接做冗余:R2 连 R4,R3 连 R5。

外部边界路由器是 R1,它和 R6 之间建立真实 EBGP。业务网段分别挂在 R3、R5 和 R6 后面,这样三种会话关系都能传递业务路由,方便观察行为差异。

3.2 地址规划

整个实验的地址规划如下,建议你严格照抄,后面看输出不会乱:

设备所属子ASLoopback0BGP角色业务网段
R1650011.1.1.1/32IBGP全互联 + 真实EBGP到R6-
R2650012.2.2.2/32IBGP全互联 + 联邦EBGP到R4-
R3650013.3.3.3/32IBGP全互联 + 联邦EBGP到R5172.16.10.0/24
R4650024.4.4.4/32IBGP到R5 + 联邦EBGP到R2-
R5650025.5.5.5/32IBGP到R4 + 联邦EBGP到R3172.16.20.0/24
R62006.6.6.6/32真实EBGP到R1203.0.113.0/24

各设备之间的互联网段全部使用 30 位掩码:

  • R1-R2:10.0.12.0/30
  • R1-R3:10.0.13.0/30
  • R2-R3:10.0.23.0/30
  • R2-R4:10.0.24.0/30
  • R3-R5:10.0.35.0/30
  • R4-R5:10.0.45.0/30
  • R1-R6:10.0.16.0/30

3.3 为什么底层必须跑OSPF

联邦实验的底层IGP(我这里用OSPF)不是可选项,是必须项。原因有两个。

第一,IBGP会话我用的是Loopback地址建立,比如R1和R2之间的IBGP邻居关系建立在 1.1.1.1 和 2.2.2.2 之间。这样即使中间的直连链路断了,只要OSPF还能找到其他路径,BGP会话不会断。但前提是OSPF必须把这些Loopback地址全网通告。

第二,联邦EBGP不修改下一跳。R2从R4学到的路由,下一跳可能是R5的Loopback 5.5.5.5,R2必须通过OSPF能到达 5.5.5.5,这条BGP路由才是可用的。如果IGP没有覆盖Loopback地址,你会看到“BGP表里有路由,但ip route里下一跳是空的”这种诡异现象。

OSPF只要单区域就行。每台联邦内设备都宣告自己的Loopback0和所有互联网段,业务网段的Loopback不宣告——那些由BGP承载。

4. 逐台设备联邦配置与命令解读

配置部分以VyOS命令为主,FRR的等价命令我会在旁边标注。先给你们建立整体概念,联邦配置的核心就三条:confederation identifier、confederation peers、以及邻居的remote-as。

4.1 R1配置:IBGP全互联 + 真实EBGP边界

R1是联邦与外部AS 200的边界,它的配置最能看到“对外表现为AS 100”这个效果。

# 接口 set interfaces ethernet eth0 address '10.0.12.1/30' set interfaces ethernet eth1 address '10.0.13.1/30' set interfaces ethernet eth2 address '10.0.16.1/30' set interfaces loopback lo0 address '1.1.1.1/32' # OSPF set protocols ospf parameters router-id '1.1.1.1' set protocols ospf area 0 network '1.1.1.1/32' set protocols ospf area 0 network '10.0.0.0/16' # BGP联邦 set protocols bgp 65001 set protocols bgp 65001 confederation identifier '100' set protocols bgp 65001 confederation peers '65002' set protocols bgp 65001 neighbor 2.2.2.2 remote-as '65001' set protocols bgp 65001 neighbor 2.2.2.2 update-source '1.1.1.1' set protocols bgp 65001 neighbor 3.3.3.3 remote-as '65001' set protocols bgp 65001 neighbor 3.3.3.3 update-source '1.1.1.1' set protocols bgp 65001 neighbor 10.0.16.6 remote-as '200'

解释几个关键点。

confederation identifier 100 表示“我所属的联邦对外使用AS 100这个身份”。这不是本地AS,只是联邦ID,本地AS仍然是65001。

confederation peers 65002 告诉R1:AS 65002不是外部AS,而是同一个联邦内的成员。漏了这条,路基在联邦EBGP会话上就会被当成真实外部路由处理,行为全错。

给R6的remote-as填的是200,这个没问题。但注意,R6那边看R1,填的是100而不是65001,这一点极其容易错,我在排错章节会专门讲。

FRR等价配置:

router bgp 65001 bgp confederation identifier 100 bgp confederation peers 65002 neighbor 2.2.2.2 remote-as 65001 neighbor 2.2.2.2 update-source 1.1.1.1 neighbor 3.3.3.3 remote-as 65001 neighbor 3.3.3.3 update-source 1.1.1.1 neighbor 10.0.16.6 remote-as 200

4.2 R6配置:外部EBGP邻居眼中的联邦

R6在AS 200,它不需要知道联邦内部结构,只需要把R1当作AS 100的边界路由器即可。

set interfaces ethernet eth0 address '10.0.16.6/30' set interfaces loopback lo0 address '6.6.6.6/32' set interfaces loopback lo1 address '203.0.113.1/24' set protocols bgp 200 set protocols bgp 200 neighbor 10.0.16.1 remote-as '100' set protocols bgp 200 address-family ipv4-unicast network '203.0.113.0/24'

这里的remote-as 100是整个实验第一个“坑”。很多人会下意识填65001,因为R1配置BGP时的本地AS就是65001。但在联邦环境中,真实EBGP邻居必须用联邦ID去和对端建邻居,否则R6发出去的OPEN报文里携带的AS号是它期待的100,而R1回应的AS号是65001,两边对不上,会话起不来。

4.3 R2配置:IBGP + 联邦EBGP双角色

R2要同时和R1、R3建立IBGP,并且和R4建立联邦EBGP。来看完整配置:

set interfaces ethernet eth0 address '10.0.12.2/30' set interfaces ethernet eth1 address '10.0.23.2/30' set interfaces ethernet eth2 address '10.0.24.2/30' set interfaces loopback lo0 address '2.2.2.2/32' set protocols ospf parameters router-id '2.2.2.2' set protocols ospf area 0 network '2.2.2.2/32' set protocols ospf area 0 network '10.0.0.0/16' set protocols bgp 65001 set protocols bgp 65001 confederation identifier '100' set protocols bgp 65001 confederation peers '65002' set protocols bgp 65001 neighbor 1.1.1.1 remote-as '65001' set protocols bgp 65001 neighbor 1.1.1.1 update-source '2.2.2.2' set protocols bgp 65001 neighbor 3.3.3.3 remote-as '65001' set protocols bgp 65001 neighbor 3.3.3.3 update-source '2.2.2.2' set protocols bgp 65001 neighbor 10.0.24.4 remote-as '65002'

注意最后一行,联邦EBGP邻居R4的remote-as是65002,这和普通EBGP唯一一样的地方。区别在于前面已经声明了confederation peers 65002,所以R2知道这个邻居是自己人。

4.4 R4、R5配置:另一个子AS的完整示例

R4属于AS 65002,它要建立两台IBGP和一台联邦EBGP:

set interfaces ethernet eth0 address '10.0.24.4/30' set interfaces ethernet eth1 address '10.0.45.4/30' set interfaces loopback lo0 address '4.4.4.4/32' set protocols ospf parameters router-id '4.4.4.4' set protocols ospf area 0 network '4.4.4.4/32' set protocols ospf area 0 network '10.0.0.0/16' set protocols bgp 65002 set protocols bgp 65002 confederation identifier '100' set protocols bgp 65002 confederation peers '65001' set protocols bgp 65002 neighbor 5.5.5.5 remote-as '65002' set protocols bgp 65002 neighbor 5.5.5.5 update-source '4.4.4.4' set protocols bgp 65002 neighbor 10.0.24.2 remote-as '65001'

R5的配置思路和R4对称,IBGP邻居是4.4.4.4,联邦EBGP邻居是R3的10.0.35.3,业务网段宣告为172.16.20.0/24。R3配置完OSPF和IBGP后,加上业务网段宣告即可:

set protocols bgp 65001 address-family ipv4-unicast network '172.16.10.0/24'

同样,R5:

set protocols bgp 65002 address-family ipv4-unicast network '172.16.20.0/24'

这里的network命令要求本地路由表里必须存在对应网段,所以业务网段要配置成Loopback1并保持up状态。

4.5 我建议的配置顺序

联邦配置最容易乱,我建议你按这个顺序操作:先把所有接口地址配完,再把OSPF跑通,确认每台设备都能ping通所有Loopback地址;然后配置BGP的confederation identifier、confederation peers;最后再配置邻居关系,先从IBGP开始,再联邦EBGP,最后真实EBGP。

这样可以最大程度减少“路由学不到时不知道是IGP问题还是BGP问题”的排查成本。

5. 验证路由行为:AS_PATH、下一跳与选路对比

配置全部完成后,按下面这个顺序做验证,每个点都能看到联邦与其他BGP类型的关键差异。

5.1 看联邦EBGP的下一跳保留现场

先在R2上查看从AS 65002学到的业务路由 172.16.20.0/24:

show bgp ipv4 unicast 172.16.20.0/24

类似下面的输出:

BGP routing table entry for 172.16.20.0/24 Paths: (1 available, best #1) 65002 5.5.5.5 from 10.0.24.4 (4.4.4.4) Origin IGP, metric 0, localpref 100, valid, external, best

这个输出信息量非常大。AS_PATH显示的是65002,说明这是R5在AS 65002里通过IBGP传给R4,再由R4通过联邦EBGP传给R2的。下一跳是5.5.5.5,这是R5的Loopback地址,而不是R4的地址。

如果这是真实EBGP,下一跳一定会被改成R4的10.0.24.4;因为它是联邦EBGP,下一跳被原样保留。这就是联邦“像EBGP但不是EBGP”最直接的证据。

5.2 看联邦EBGP的AS_PATH内部可见

同样的路由,在R2的BGP表里AS_PATH是65002。这个子AS号在联邦内部是可见的,它用来做联邦内部的环路检测。

如果R2再把这条路由通过联邦EBGP传给R3,R3的BGP表里AS_PATH会变成“65002 65001”这样的形式吗?这里有个细节:IBGP传播不会追加AS号,联邦EBGP传播会追加发送方的子AS号。所以R3从R2学到这条路由时,AS_PATH显示的是65002(R2在追加时写自己子AS 65001吗?实际上R2传给R3如果走IBGP,不追加;如果走联邦EBGP,路径不同)。

在我的拓扑里,R3有两台IBGP邻居R1、R2,所以R3大概率从IBGP学到172.16.20.0/24,AS_PATH仍然是65002。你可以自己在实验里对比一下:从IBGP学到的和从联邦EBGP学到的,AS_PATH长度差多少。这就是联邦EBGP追加子AS号的直观体现。

5.3 看真实EBGP邻居如何“只见联盟不见子AS”

切到R6,查看172.16.20.0/24:

show bgp ipv4 unicast 172.16.20.0/24

输出类似:

BGP routing table entry for 172.16.20.0/24 Paths: (1 available, best #1) 100 10.0.16.1 from 10.0.16.1 (1.1.1.1) Origin IGP, metric 0, localpref 100, valid, external, best

看到区别了吗?R6的AS_PATH只有100,完全没有65001和65002。R6只知道AS 100这个整体,联邦内部的子AS结构对外完全透明。这就是联邦对外表现为单AS的机制。

如果你在这里看到了65001或者65002,说明有些设备漏配了confederation identifier或confederation peers,导致子AS号没有被正确剥离。

5.4 查看外部路由在联邦内的传播

再看反向流量。R6通告的203.0.113.0/24进入联邦后,在R2上查看:

show bgp ipv4 unicast 203.0.113.0/24

你会看到AS_PATH为200,下一跳是1.1.1.1。这条路由从R1传到R2走IBGP,下一跳是R1的Loopback,这符合IBGP规则;再传到R4走联邦EBGP,下一跳仍然是1.1.1.1,没有被R2篡改。R4必须通过OSPF能到达1.1.1.1,否则这条路由在R4上就是死路由。

我建议你在实验里故意把R4上关于1.1.1.1/32的OSPF路由删掉,然后再看R4的BGP表,你会看到路由还在,但ip route找不到1.1.1.1,数据面完全无法转发。这个坑很值得自己踩一次。

5.5 冗余验证:断掉一条联邦EBGP连接

联邦的优势之一是多路径冗余。你可以把R2和R4之间的链路或BGP会话shutdown,然后观察172.16.20.0/24这条路由的路径变化。

正常情况下,R3和R5之间的联邦EBGP连接会承担起路由传递任务,R2依然能从R3学到关于172.16.20.0/24的路由(R2到R3有IBGP)。整个联邦内所有设备依然能学到全部前缀。这比单点RR的组网抗故障能力强。

如果你的实验环境里有现成的Controller或自动化工具,可以写个简单的脚本来轮询show bgp summary,观察断链后会话状态的变化时间。实测下来联邦的收敛速度取决于IGP感知速度,一般不超过几秒。

6. 联邦实验里最容易翻车的三个地方

这部分是我自己搭建实验时踩过的坑,还有一个是学员群里高频出现的问题。单独写一节,希望你能绕开。

6.1 外部邻居的remote-as填错:把联盟ID当本地AS

这是频率最高的错误。很多人在R6上看R1的本地AS是65001,于是把R6的neighbor remote-as配成65001,结果是会话一直起不来。

原因是真实EBGP邻居必须用联邦对外的联盟ID去建邻居。R1对外是AS 100,R6必须写remote-as 100;R1对R6则写remote-as 200。两者都在自己本地BGP进程里填了confederation identifier 100,FRR在处理对外EBGP会话时使用100作为自身AS号。

如果你看到BGP邻居反复进入Active状态,并且系统日志里有类似“BGP Notification sent”的报错,第一反应就去看remote-as是不是填成了65001。

6.2 漏配confederation peers:路由行为全线混乱

联邦EBGP会话有一个特点:即使不配置confederation peers,R2和R4之间的EBGP会话也能建立成功。因为它们的本地AS号确实不同,65001对65002,协议层面认为这就是两个不同的AS。

但这样建立起来的会话不是联邦行为,而是真实EBGP行为。后果包括:下一跳被修改、LOCAL_PREF被重置、MED被重置,更严重的是AS_PATH里的子AS号没有被隐藏,R6会看到65001、65002这些子AS号。整个“联邦对外表现为单AS”的承诺就失效了。

所以检查配置时,一定要确认所有联邦内的路由器都同时配置了confederation identifier和confederation peers。用show running-config过滤bgp相关段落,检查每一台。

6.3 下一跳不可达:联邦EBGP不会帮你改下一跳

联邦EBGP保留下一跳这个特性,在不理解的人看来就是个大坑。路由学过来了,BGP表里也是valid的,但就是ping不通业务地址,一看ip route,下一跳对应地址没有路由。

原因就是前面反复强调的:联邦EBGP不修改下一跳,接收方必须自己通过IGP知道下一跳怎么走。所以在联邦组网里,底层IGP的覆盖范围必须包含所有可能成为BGP下一跳的地址。

我自己的习惯是:把每台设备的Loopback0都宣告进OSPF,并且BGP的IBGP会话全部用Loopback地址建立。这样下一跳地址一定是Loopback地址,你只需要保证所有路由器的Loopback全网互通,就不会有下一跳问题。

6.4 联邦EBGP用Loopback建邻记得加多跳

这是一个进阶坑。我在拓扑里联邦EBGP用的是直连接口,不需要额外配置。但如果你在生产或实验里把联邦EBGP会话也用Loopback地址建立,比如R2和R4之间用2.2.2.2对4.4.4.4,那就要配置ebgp-multihop。

因为EBGP的报文TTL默认是1,跨多跳建立会话时TTL会被丢弃。真实EBGP和联邦EBGP在这个行为上没有区别。VyOS里对应的命令是:

set protocols bgp 65001 neighbor 4.4.4.4 ebgp-multihop '2'

FRR里是:

neighbor 4.4.4.4 ebgp-multihop

最后分享一个我实际实验时的小习惯:先把所有BGP邻居用直连接口建起来,跑通路由以后再改成Loopback,这样能快速隔离到底是BGP配置问题还是IGP问题。联邦这个特性,生产环境里确实不如RR常见,但在需要多个管理域自治、对外又要隐藏内部细节的组网里价值很高,尤其是配合RR把子AS内部再折叠一次,能撑起非常大的网络规模。你如果也在搭类似的实验,建议把“下一跳不变”和“AS_PATH隐藏”这两个点亲手抓一遍。抓住这两个点,你对BGP联邦的理解基本就到下一个层次了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 12:52:16

顶会论文复现失败的真正原因与工程化解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:51:33

DeepSeek流式响应与长文本分块:Python实现与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:51:00

8位累加器设计:从全加器到时序电路的完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:49:56

TwinCAT 3 + EtherCAT FOE:从站固件远程升级实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:48:16

昆仑通态触摸屏U盘CSV导出全链路实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:48:15

STM32 Debug Viewer:不用串口的printf实时可视化调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华