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

BGP笔记整理

一、BGP 基础概念与协议特性

1. 产生背景

BGP(Border Gateway Protocol)是自治系统(AS)间的动态路由协议,属于外部网关协议(EGP),用于在不同 AS 之间传递路由信息。它解决了传统IGP(如OSPF、RIP)无法在大规模互联网上有效传递路由的问题。

2. 自治系统(AS)

定义: 一组被统一管理、运行相同 IGP 协议的路由器集合,通常使用相同路由策略。

AS 编号:

  • 2 字节: 范围 0-65535(0 和 65535 保留),其中公有 AS 为 1-64511,私有 AS 为 64512-65535。
  • 4 字节: 公有 AS 为 65536–4199999999,私有 AS 为 4200000000–4294967294。
3. 路由协议分类
  • IGP(内部网关协议): 用于 AS 内部路由,如 RIP、OSPF、IS-IS。
  • EGP(外部网关协议): 用于 AS 之间路由,BGP 是目前唯一广泛使用的 EGP。
4. BGP 协议特性
  • 路由传递范围: 仅负责 AS 间路由传递,AS 内部路由扩散依赖 IGP。
  • 路径矢量协议: 一跳代表一个 AS,路由传入 AS 时,下一跳变为上个 AS 的出接口 IP;AS 内部传递时,下一跳不变。
  • AS 防环机制: 通过 AS_PATH 属性防环,路由每经过一个 AS,会将该 AS 编号按 “右到左” 顺序加入 AS_PATH;若收到的路由 AS_PATH 包含本地 AS 编号,则不学习。
  • 传输层依赖: 基于 TCP 协议,端口号 179,需手动配置邻居。
  • 更新方式: 首次收敛发送完整路由表,后续仅增量更新。
  • 路由控制: 支持多种属性控制选路,支持路由聚合、过滤和策略。
5. BGP 基本术语
  • BGP Speaker: 运行 BGP 协议的路由器。
  • BGP Peer(对等体): 通过 TCP 连接交换路由信息的 BGP Speaker,分为:
    • EBGP 对等体: 跨 AS 的邻居,通常物理直连,从 EBGP 学到的路由会通告给所有对等体(包括 EBGP 和 IBGP)。
    • IBGP 对等体: 同一 AS 内的邻居,可非直连,受 “水平分割” 限制(从 IBGP 学到的路由不传给其他 IBGP)。
6. 路由黑洞及解决方法

产生原因: IBGP 邻居间存在未运行 BGP 的路由器,无法获取 BGP 路由,导致数据包被丢弃。
解决方法:

  • BGP 引入 IGP。
  • 在黑洞路由器上配置静态路由。
  • IBGP 全连接(需所有 IBGP 路由器互建邻居,适用于小规模网络)。
  • 路由反射器(RR,无视 IBGP 水平分割,减少邻居数量)。
  • BGP 联盟(将 AS 划分为子 AS,子 AS 间用 EBGP 连接,减少 IBGP 邻居)。
7. BGP 环路问题(水平分割)
  • EBGP 水平分割: 通过 AS_PATH 属性,若路由包含本地 AS 编号则拒绝学习。
  • IBGP 水平分割: 从 IBGP 对等体学到的路由,不向其他 IBGP 对等体通告。
8. BGP 消息种类
消息类型作用
Open建立对等体连接,携带 router-id、Hold Time(默认 180s)等参数。
Keepalive周期保活(默认 60s 发送一次),维持连接有效性。
Update携带路由更新(新增 / 删除),包含 Withdrawn Routes(撤销路由)和 NLRI(新增路由)。
Notification检测到错误时发送,随后关闭连接。
Router-refresh更改路由策略后,请求对等体重发指定地址族的完整路由表。
9. BGP 状态机
  • Idle: 初始化状态,准备 TCP 连接,停留 30 秒。
  • Connect: TCP 连接建立中,失败则进入 Active 状态。
  • Active: 主动尝试建立 TCP 连接,失败则重试。
  • OpenSent: TCP 连接建立,发送 Open 报文,等待对方响应。
  • OpenConfirm: 收到 Open 报文,发送 Keepalive,等待对方 Keepalive。
  • Established: 收到 Keepalive,邻居关系建立,开始交换路由。
10. BGP 邻居建立条件

1. IBGP 邻居

  • 物理口建邻: 建议用直连接口地址。
  • 环回口建邻: 需 TCP 可达(路由可达),修改更新源为环回口(peer connect-interface LoopBack 0),默认 TTL 为 255。

2. EBGP 邻居

  • 物理口建邻: 建议用直连接口地址。
  • 环回口建邻: 需 TCP 可达,修改最大跳数(ebgp-max-hop),默认 TTL 为 1(需改为更大值,如 2)。

注意: 若路由器同时有 EBGP 和 IBGP 邻居,需修改 IBGP 邻居的下一跳为本机(next-hop-local),否则路由可能不可达。


二、BGP 路由选路原则(13 条)

BGP 选路原则用于从多条到达同一目的地的路由中选择最优的一条。

  1. 丢弃下一跳(NEXT_HOP)不可达的路由。
  2. 优选 Preferred-value 值最大的路由; (默认 0,华为/H3C 私有属性,值越大优先级越高)
  3. 优选本地优先级(LOCAL_PREF)最高的路由; (默认 100,仅 IBGP 传递)
  4. 依次选择 network 命令生成、import-route 命令引入、聚合的路由。
  5. 优选 AS 路径(AS_PATH)最短的路由。
  6. 依次选择 ORIGIN 属性为 IGP(i)、EGP(e)、Incomplete(?)的路由。
  7. 优选 MED(多出口鉴别器)值最低的路由; (默认 0,相邻 AS 间传递)
  8. 依次选择从 EBGP、联盟 EBGP、联盟 IBGP、IBGP 学来的路由。
  9. 优选下一跳 IGP 度量值最低的路由。 (度量值指通过 IGP 协议到达下一跳地址的开销)
  10. 优选 CLUSTER_LIST 最短的路由。
  11. 优选 ORIGINATOR_ID 最小的路由。
  12. 优选 Router ID 最小的路由器发布的路由。
  13. 优选 IP 地址最小的对等体发布的路由。
BGP 负载分担

BGP 协议本身能选出唯一最优路由。通过手动配置或路由策略修改属性,可实现负载分担。

# 允许最多2条等价路径进行负载分担
[Huawei] bgp 100
[Huawei-bgp] maximum load-balancing 2

与 IGP 负载分担的区别:

  • IGP 通过协议自身算法,对度量值相等的路由进行负载分担。
  • BGP 本身无路由计算算法,但通过丰富的选路规则,可在选择后有条件地进行负载分担。
BGP 路由发布策略
  • 只将最优路由发布给对等体。 如果配置了 active-route-advertise 命令,则 BGP 发布 IP 路由表中的最优路由;否则,发布 BGP 路由表中的最优路由。
  • 只把自己使用的路由发布给对等体(自己选的最优路由)。
  • 从 EBGP 获得的路由会向它所有 BGP 对等体发布。
  • 从 IBGP 获得的路由不向它的 IBGP 对等体发布(IBGP 水平分割)。
  • 从 IBGP 获得的路由发布给它的 EBGP 对等体。
  • BGP 连接一旦建立,BGP 发言者将把满足上述条件的所有 BGP 路由发布给新对等体。之后,BGP 发言者只在路由变化时,向对等体发布更新的路由。

三、BGP 属性与路由控制

BGP 属性是描述路由特征的信息,也是控制 BGP 选路的关键。

1. 公认属性:所有路由器都必须识别的属性

公认必遵属性: BGP 发布的路由必须携带,所有路由器必须识别的属性。

(1) AS_PATH

  • 定义: 记录路由传递过程中经过的 AS 编号。
  • 作用:
    • AS 防环: 若收到的路由 AS_PATH 包含本地 AS 编号,则不学习。
    • 路由优选: AS_PATH 短(AS 编号的数量)的路由优先。
  • 注意:
    • AS_PATH 属性增加 AS 编号是在路由从一个 AS 传出时。
    • 增加 AS_PATH 长度控制选路时,建议增加真实经过的 AS 编号,防止 AS 防环机制导致路由无法学习。

实验演示:修改 AS_PATH 长度影响选路

# 在 R2 上修改路由的 AS_PATH (出方向)
[R2] acl 2000
[R2-acl-basic-2000] rule 5 permit source 192.168.1.0 0.0.0.255[R2] route-policy PREPEND_AS permit node 10
[R2-route-policy] if-match acl 2000
[R2-route-policy] apply as-path 300 400 additive # 增加 AS 编号
[R2-route-policy] route-policy PREPEND_AS permit node 20 # 放空节点
[R2-bgp-af-ipv4] peer 100.1.1.1 route-policy PREPEND_AS export# 在 R1 上修改路由的 AS_PATH (入方向)
[R1] acl 2000
[R1-acl-basic-2000] rule permit source 192.168.1.0 0.0.0.255[R1] route-policy PREPEND_AS_IN permit node 10
[R1-route-policy] if-match acl 2000
[R1-route-policy] apply as-path 500 600 additive
[R1-route-policy] route-policy PREPEND_AS_IN permit node 20
[R1-bgp-af-ipv4] peer 100.1.1.2 route-policy PREPEND_AS_IN import# additive: 在原有 AS 编号基础上添加
# overwrite: 覆盖原有 AS 编号

(2) NEXT_HOP:下一跳

  • 注意:
    • 路由发布给 EBGP 邻居时,下一跳变更为指定的 EBGP 邻居地址。
    • 路由发布给 IBGP 邻居时,下一跳不变,仍保持为指定的上个 AS 的 EBGP 邻居地址。
    • 对 IBGP 邻居发布的路由,需使用 next-hop-local 命令将下一跳改为本机。

(3) ORIGIN:路由来源属性

  • 属性值:
    • IGP (i): 来源于 network 命令宣告,聚合的路由。
    • EGP (e): 来源于引入的 EGP 协议路由(不常见)。
    • Incomplete (?): 来源于引入 IGP 协议或静态路由、直连路由。
  • 优选顺序: IGP > EGP > Incomplete。

实验演示:修改 ORIGIN 属性影响选路

# 在 R2 对 R4 上修改出方向的 ORIGIN (示例,实际操作需根据选路需求)
# (省略 ACL 和 route-policy 定义,假设已匹配目标路由)
[R2] route-policy MODIFY_ORIGIN permit node 10
[R2-route-policy] apply origin incomplete
[R2-route-policy] route-policy MODIFY_ORIGIN permit node 20
[R2-bgp-af-ipv4] peer 4.4.4.4 route-policy MODIFY_ORIGIN export# 在 R4 对 R2 上修改入方向的 ORIGIN
[R4] acl 2000
[R4-acl-basic-2000] rule permit source 192.168.2.0 0.0.0.255[R4] route-policy MODIFY_ORIGIN_IN permit node 10
[R4-route-policy] if-match acl 2000
[R4-route-policy] apply origin incomplete
[R4-route-policy] route-policy MODIFY_ORIGIN_IN permit node 20
[R4-bgp-af-ipv4] peer 2.2.2.2 route-policy MODIFY_ORIGIN_IN import

公认可选属性: 所有路由器都识别,但不是必须携带的属性。

(1) LOCAL_PREF:本地优先级

  • 定义: 同一个 AS 内可见,表明 BGP 路由器的优先级。只对 IBGP 邻居传递,不对 EBGP 邻居传递。
  • 注意: 默认值 100,值大的路由优先。

实验演示:修改 LOCAL_PREF 影响选路

# 在 R3 上修改出方向的 LOCAL_PREF (或 R4 的入方向)
[R3] acl 2000
[R3-acl-basic-2000] rule permit source 192.168.2.0 0.0.0.255[R3] route-policy MODIFY_LP permit node 10
[R3-route-policy] if-match acl 2000
[R3-route-policy] apply local-preference 80 # 将优先级改低
[R3-route-policy] route-policy MODIFY_LP permit node 20
[R3-bgp-af-ipv4] peer 4.4.4.4 route-policy MODIFY_LP export

(2) Atomic-aggregate:自动聚合

2. 可选属性

(1) 可选传递属性: 路由器可以不识别该属性,但是会继续向下传递该属性。

  • Aggregator: 手动聚合时携带。
  • Community: 团体属性。

(2) 可选非传递属性: 路由器可以不识别该属性,但是也不会继续向下传递该属性。

  • CLUSTER_LIST: 集群列表,用于路由反射器防环。
  • ORIGINATOR_ID: 集群 ID,用于路由反射器防环。
  • MED(多出口鉴别器): 当一个 AS 有多个入口点时,用于判断流量进入 AS 时的最优路径。
    • 属性值: network 宣告的路由默认值为 0;引入的路由默认值为原 IGP 协议的 cost。
    • 值小的路由优先。

实验演示:修改 MED 影响选路

# 在 R4 上通过路由策略对 2.0 网段路由改 MED 值,使其传给 R5
[R4] acl 2000
[R4-acl-basic-2000] rule permit source 192.168.2.0 0.0.0.255[R4] route-policy MODIFY_MED permit node 10
[R4-route-policy] if-match acl 2000
[R4-route-policy] apply cost 133 # 修改 MED 值
[R4-route-policy] route-policy MODIFY_MED permit node 20
[R4] bgp 200
[R4-bgp-af-ipv4] peer 100.5.5.5 route-policy MODIFY_MED export
3. Preferred-value
  • 定义: 首选项,华为/H3C 私有属性。
  • 属性值: 默认 0,取值范围 0~65535,值越大,优先级越高。

实验演示:修改 Preferred-value 影响选路

# 在 R1 的入方向,对 R2 的路由修改 Preferred-value
[R1] acl 2000
[R1-acl-basic-2000] rule permit source 192.168.1.0 0.0.0.255[R1] route-policy MODIFY_PV permit node 10
[R1-route-policy] if-match acl 2000
[R1-route-policy] apply preferred-value 30
[R1-route-policy] route-policy MODIFY_PV permit node 20[R1] bgp 100
[R1-bgp] peer 100.1.1.2 route-policy MODIFY_PV import
4. 属性控制的选择建议
  • 影响下游所有路由器的路由选择: 建议使用 AS-PATH。
  • 只影响本 AS 内部的某个路由器选择: 建议使用 Local-preference。
  • 只影响下游某一个 AS 的路由器选择: 建议使用 MED。
  • 只影响某一台路由器的路由选择: 建议使用 Preferred-value。

四、大规模 BGP 网络优化方案

1. 解决BGP对等体众多:对等体组(Peer Group)与 BGP 团体(Community)

对等体组(Peer Group):

  • 定义: 将具有某些相同属性的对等体集合起来,简化配置。
  • 特点: 可分为 IBGP 对等体组和 EBGP 对等体组。
  • 建邻要求:
    • IBGP 对等体组常用,适用于 IBGP 全连接场景。
    • EBGP 对等体组不常用,因为只有同一 AS 中的 EBGP 邻居才能加入。
# IBGP 对等体组配置示例
[R2] bgp 200
[R2-bgp] group IN_GROUP internal
[R2-bgp] peer 3.3.3.3 group IN_GROUP
[R2-bgp] peer 4.4.4.4 group IN_GROUP
[R2-bgp] peer 5.5.5.5 group IN_GROUP
[R2-bgp] peer IN_GROUP connect-interface LoopBack 0
[R2-bgp] peer IN_GROUP next-hop-local

BGP 团体(Community):

  • 定义: 相当于路由的标记,一组具有相同特征的目的地的集合,可针对特定路由设置特定的 Community 属性值。
  • 社团属性表达方法: 本质由 32 位二进制构成,有多种表达格式(如 10 进制或 16 位 AS 号:16 位自定义值)。
  • 公认社团属性:
    • Internet: 默认,可通告给所有 BGP 对等体。
    • no-advertise: 路由信息无法发送给自己的 IBGP 或 EBGP 对等体。
    • no-export: 路由信息可发给自己的 BGP 对等体,但不能离开本 AS(可在联盟内子 AS 间传递)。
    • no-export-subconfed:no-export 更严格,即使在联盟内也无法传递。
  • 注意: 大部分厂商默认不传递社团属性,需手动开启。

实验演示:配置团体属性限制路由传播范围

# 在 R1 上配置 ACL 抓取 192.168.0.0/24 网段路由
[R1] acl 2000
[R1-acl-basic-2000] rule permit source 192.168.0.0 0.0.0.255# 创建路由策略,赋予 no-export 团体属性,并配置空节点放行其他路由
[R1] route-policy NO_EXPORT_COMMUNITY permit node 10
[R1-route-policy] if-match acl 2000
[R1-route-policy] apply community no-export
[R1] route-policy NO_EXPORT_COMMUNITY permit node 20# 在 R1 上对 R2 调用路由策略
[R1] bgp 100
[R1-bgp-af-ipv4] peer 100.1.1.2 route-policy NO_EXPORT_COMMUNITY export# 开启团体属性传递
[R1-bgp-af-ipv4] peer 100.1.1.2 advertise-community
[R2-bgp-af-ipv4] peer 100.2.2.4 advertise-community
2. 解决 BGP 路由表庞大:BGP 路由聚合

作用: 减小路由表规模。

1. 自动聚合:

  • 只能对引入的 IGP 路由进行聚合。
  • 只能将明细路由汇总到主类,可能造成路由黑洞。
  • 华为设备默认关闭。
  • 只能在始发路由器上配置。
  • summary automatic:开启自动聚合。聚合后,路由状态码会显示 S (suppressed),表示被抑制的路由不会再加表和传递。

2. 手工聚合:

  • 可实现精确汇总:aggregate <network> <mask>
  • 可在任何路由器上对 BGP 路由进行聚合。
  • 问题: 默认情况下,明细路由依然会被通告,有形成环路的隐患。
  • 解决方法: aggregate <network> <mask> detail-suppressed // 抑制明细路由,不通告明细路由。

常见汇总命令:

  • aggregate <network> <mask> detail-suppressed as-set:汇总路由可继承明细路由的路径属性,特别是 AS_PATH。
  • aggregate <network> <mask> suppress-policy <route-policy-name>:通告汇总路由,并有选择地抑制明细路由。
3. 解决 IBGP 全连接:BGP 路由反射(Route Reflection)与 BGP 联盟(Confederation)

BGP 路由反射(Route Reflection):

  • 定义: BGP 反射器能把从 IBGP 邻居学习的路由反射给其他 IBGP 邻居。
  • 作用: 替代 IBGP 全连接,减少邻居数量;解决 BGP 路由黑洞问题。
  • 角色:
    • RR (Route Reflector): 路由反射器。
    • Client: RR 客户机。
    • 非客户机。
  • 注意: 将一台 BGP 路由器指定为 RR 的同时,还需要指定其 Client。Client 本身无需做任何配置。

反射规则:

  • 从非客户机端接受的路由,仅反射给客户端。
  • 从客户端接受到的路由,反射给所有客户端和非客户端(路由始发者除外)。
  • 从 EBGP 接收的路由,反射给所有的客户端和非客户端。
  • 一个反射群里的所有反射客户端只需与反射器建立 IBGP 邻居关系。

反射集群: 由反射器和客户端组成的网络范围。如果存在多个反射器,配置相同的 cluster_id

路由反射存在问题: 使得 IBGP 水平分割原则失效,可能导致环路。
解决方法:

  • (1) cluster_list(集群列表):
    • 类似 AS_PATH,每个 RR 都有一个 Cluster ID(默认为 Router ID,可手工修改)。
    • 同一个 AS 内的 Cluster ID 必须相同,才能防环。
    • 路由传递过程中,把经过的反射器的 Cluster ID 依次记录在 Cluster_list 中。
    • 用于反射器防环:当反射器收到 BGP 路由时,如果本机的 Cluster ID 出现在 Cluster_list 中,则丢弃该路由。
    • 用于路由优选:Cluster_list 短的优先。
  • (2) Originator_ID:起源 ID
    • 由路由反射器反射一条路由时产生,会在反射出去的路由中增加 Originator_ID(本地 AS 内路由始发者的 Router ID)。
    • 当 BGP 路由器收到一条携带 Originator_ID 属性的 IBGP 路由,并且 Originator_ID 属性值与自身的 Router ID 相同,则它会忽略关于该条路由的更新。
    • 用于路由优选:Originator_ID 短的优先。

BGP 防环机制总结:

  1. AS_PATH: 解决 AS 之间的环路问题。
  2. IBGP 的水平分割: 解决一个 AS 内部 IBGP 邻居之间环路问题。
  3. Cluster-list 防环: 当一个反射群中存在多个反射器时,通过 Cluster-list 防环。
  4. Originator_ID: 在多个反射群之间,通过 Originator_ID 防环。

实验配置:路由反射器

[R2] bgp 200
[R2-bgp] peer 3.3.3.3 reflect-client      # 在反射器上配置其反射客户机
[R2-bgp] peer IN_GROUP reflect-client     # 如果使用对等体组,可配置对等体组为客户机
[R2-bgp] reflector cluster-id 2.2.2.2    # 配置反射器的集群 ID

BGP 联盟(Confederation):

  • 定义: 处理 AS 内部 IBGP 网络连接激增的另一种方法,间接避免了 IBGP 环路问题。
  • 原理: 将一个自治系统划分为若干个子自治系统,每个子自治系统内部的 IBGP 对等体建立全连接关系,子自治系统之间建立联盟内部 EBGP 连接关系。
  • 注意点:
    • 子 AS 使用私有 AS 编号。
    • 其他真实 AS 的路由器仍然和联盟 AS 建立 EBGP 邻居。
    • 跨越子 AS 的 EBGP 邻居仍然需要更改下一跳为本机。
    • 每个联盟里有一台路由器和其他联盟中一个路由器建立邻居关系即可。
    • 实际场景中一般不常用,因为它会改变邻居关系和 AS_PATH 显示。

配置命令:联盟

[R2] bgp 65001        # 进入子 AS 编号
[R2-bgp] confederation id 200    # 声明联盟的主 AS 编号
[R2-bgp] confederation peer-as 65002  # 声明联盟内其他子 AS 编号
[R2-bgp] peer 100.1.1.1 as-number 100       # 指定外部 EBGP 邻居
[R2-bgp] peer 3.3.3.3 as-number 65001       # 联盟内部 IBGP 邻居
[R2-bgp] peer 3.3.3.3 connect-interface LoopBack 0
[R2-bgp] peer 3.3.3.3 next-hop-local
[R2-bgp] peer 100.2.2.5 as-number 65002     # 联盟内部 EBGP 邻居 (跨子 AS)
[R2-bgp] peer 100.2.2.5 next-hop-local      # 跨子 AS 的 EBGP 邻居仍需更改下一跳
4. 解决路由变化频繁:BGP 路由衰减(Route Dampening)

作用: 解决路由振荡(Route flaps),通过惩罚值抑制不稳定路由。

路由衰减方法:

  • 每振荡一次,给其一个惩罚值(默认 1000),惩罚值固定加 1000,不能超过抑制阈值。
  • 一旦惩罚值超过抑制阈值,该路由将被抑制(不再学习和通告)。
  • 惩罚值每隔一段时间(半衰期)自动衰减一半,直到惩罚值衰减到重用阈值以下,方可重新学习这条路由。

衰减参数:

  • Suppress Threshold(抑制阈值,默认 2000): 当惩罚值超过此阈值时,路由被抑制。
  • Reuse Threshold(重用阈值,默认 750): 当惩罚值衰减到此值以下时,路由重新被通告。
  • Half-life Time(半衰期,默认 15 分钟): 惩罚值每 15 分钟减半。
  • Ceiling(最大惩罚值上限,1001-20000)。

配置命令:

[router-bgp] dampening                      # 启用 BGP 路由衰减(使用默认参数)
[router-bgp] dampening 15 750 2000 10000      # 自定义参数:半衰期、重用阈值、抑制阈值、最大惩罚上限
http://www.xdnf.cn/news/1275049.html

相关文章:

  • CST MATLAB 联合仿真超材料开口谐振环单元
  • PWM波的频谱分析及matlab 验证[电路原理]
  • 企业高性能web服务器——Nginx
  • PySpark
  • 【redis初阶】------List 列表类型
  • Mysql 8.0 新特性
  • drippingblues靶机通关练习笔记
  • 搭建本地 Git 服务器
  • nginx-主配置文件
  • Flask多进程数据库访问问题详解
  • Words or Vision Do Vision-Language Models Have Blind Faith in Text
  • Baumer高防护相机如何通过YoloV8深度学习模型实现道路坑洼的检测识别(C#代码UI界面版)
  • 基于FFmpeg的B站视频下载处理
  • 配置timer控制 IO的输出(STC8)
  • 浏览器CEFSharp88+X86+win7 之js交互开启(五)
  • 【LeetCode】102 - 二叉树的层序遍历
  • MySQL 处理重复数据详细说明
  • DBAPI 实现不同角色控制查看表的不同列
  • SQL约束:数据完整性的守护者
  • 【面试场景题】异地多活改造方案
  • 实现两个开发板的串口通讯(基于STC8实现)
  • Oracle lgwr触发条件
  • c语言常见错误
  • 深入解析微服务分布式事务的原理与优化实践
  • 【代码随想录day 16】 力扣 513.找树左下角的值
  • Linux 路由子系统深度分析:框架、实现与代码路径
  • MariaDB 数据库管理
  • 活动策划(展会、年会),在线工具能快速出邀请函不?
  • Python 实例属性和类属性
  • 为wordpress顶部header.php文件中调用不同的标题和摘要