一、BGP 基础概念解析
1. 产生背景
BGP(Border Gateway Protocol,边界网关协议)作为自治系统(AS)之间的动态路由协议,属于外部网关协议(EGP)的范畴。它的主要功能是在不同的自治系统之间传递路由信息,从而实现跨 AS 的网络通信。
2. 自治系统(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 是唯一被广泛使用的 EGP 协议。
三、BGP 协议特性说明
- 路由传递范围:BGP 仅负责在自治系统之间传递路由信息,而自治系统内部的路由扩散则依赖于 IGP 协议。
- 路径矢量协议:在 BGP 中,一跳代表一个自治系统。当路由传入某个 AS 时,下一跳会变为上个 AS 的出接口 IP;而在 AS 内部传递时,下一跳保持不变。
- AS 防环机制:借助 AS_PATH 属性来防止环路。路由每经过一个 AS,该 AS 的编号会按 “右到左” 的顺序加入 AS_PATH。如果收到的路由的 AS_PATH 中包含本地 AS 编号,路由器则不会学习该路由。
- 传输层依赖:BGP 基于 TCP 协议运行,使用的端口号为 179,并且需要手动配置邻居关系。
- 更新方式:在首次收敛时,BGP 会发送完整的路由表;后续的更新则仅进行增量更新,即只发送变化的路由信息。
- 路由控制:BGP 支持通过多种属性来控制路由选择,同时也支持路由聚合、过滤和策略配置等功能。
四、BGP 基本术语解释
- BGP Speaker:指运行 BGP 协议的路由器。
- BGP Peer(对等体):通过 TCP 连接交换路由信息的 BGP Speaker,可分为以下两种:
- EBGP 对等体:处于不同 AS 的邻居,通常物理上直接连接。从 EBGP 学到的路由会通告给所有对等体,包括 EBGP 和 IBGP 对等体。
- IBGP 对等体:位于同一 AS 内的邻居,可以非直接连接。但受 “水平分割” 限制,即从 IBGP 学到的路由不会传递给其他 IBGP 对等体。
五、路由黑洞及解决方法
- 产生原因:当 IBGP 邻居之间存在未运行 BGP 的路由器时,这些路由器无法获取 BGP 路由,从而导致数据包被丢弃,形成路由黑洞。
- 解决方法:
- 将 BGP 路由引入 IGP。
- 在黑洞路由器上配置静态路由。
- 实现 IBGP 全连接,即所有 IBGP 路由器之间互相建立邻居关系,这种方法适用于小规模网络。
- 使用路由反射器(RR),它可以无视 IBGP 水平分割,减少邻居数量。
- 采用 BGP 联盟,将一个 AS 划分为多个子 AS,子 AS 之间通过 EBGP 连接,以减少 IBGP 邻居数量。
六、BGP 环路问题(水平分割)
- EBGP 水平分割:通过 AS_PATH 属性来实现,若收到的路由包含本地 AS 编号,则拒绝学习该路由。
- IBGP 水平分割:从 IBGP 对等体学到的路由,不会向其他 IBGP 对等体通告,以此避免环路。
七、BGP 消息种类介绍
消息类型 |
作用 |
Open |
用于建立对等体连接,携带 router-id、Hold Time(默认 180s)等参数。 |
Keepalive |
周期性发送(默认每 60s 发送一次),用于维持连接的有效性。 |
Update |
携带路由更新信息,包括新增和删除的路由,包含 Withdrawn Routes(撤销路由)和 NLRI(新增路由)。 |
Notification |
当检测到错误时发送,随后会关闭连接。 |
Router-refresh |
在更改路由策略后,请求对等体重发指定地址族的完整路由表。 |
八、BGP 状态机流程
- Idle:初始化状态,准备建立 TCP 连接,在此状态停留 30 秒。
- Connect:TCP 连接建立过程中,若失败则进入 Active 状态。
- Active:主动尝试建立 TCP 连接,若失败则会重试。
- OpenSent:TCP 连接建立后,发送 Open 报文,等待对方响应。
- OpenConfirm:收到对方的 Open 报文后,发送 Keepalive 报文,等待对方的 Keepalive 报文。
- Established:收到对方的 Keepalive 报文,邻居关系建立,开始交换路由信息。
九、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 基本配置步骤
1. 启动 BGP 并创建连接
TypeScript取消自动换行复制
[huawei] bgp <as-number> # 启动BGP,指定AS编号
[huawei-bgp] router-id <router-id> # 配置Router-id(可选,建议配置)
[huawei-bgp] peer <ip-address> as-number <as-number> # 指定对等体及AS
[huawei-bgp] address-family ipv4 unicast # 进入IPv4地址族(华三设备)
[huawei-bgp-ipv4] peer <ip-address> enable # 使能对等体路由交换
2. 优化配置
TypeScript取消自动换行复制
[huawei-bgp] peer <ip-address> connect-interface <interface> # 指定TCP连接源接口
[huawei-bgp] peer <ip-address> ebgp-max-hop <hop-count> # 修改EBGP最大跳数
3. 发布路由
TypeScript取消自动换行复制
# 宣告本地路由
[router-bgp] network <ip-address> [mask <mask-length>] [route-policy <name>]
# 引入其他协议路由
[router-bgp] import-route <protocol> [process-id] [route-policy <name>]
4. 查看命令
TypeScript取消自动换行复制
display bgp peer # 查看BGP邻居状态
display bgp routing-table # 查看BGP路由表
十一、BGP 选路原则(13 条)
- 丢弃下一跳不可达的路由。
- 优选 Preferred-value(首选项)最大的路由(默认 0,华为 / H3C 私有属性)。
- 优选 Local_Pref(本地优先级)最高的路由(默认 100,仅 IBGP 传递)。
- 依次选择 network 生成、import-route 引入、聚合的路由。
- 优选 AS_PATH 最短的路由。
- 依次选择 ORIGIN 为 IGP(i)、EGP(e)、Incomplete(?)的路由。
- 优选 MED(多出口鉴别器)最小的路由(默认 0,相邻 AS 间传递)。
- 依次选择从 EBGP、联盟 EBGP、联盟 IBGP、IBGP 学到的路由。
- 优选下一跳 IGP 度量值最低的路由。
- 优选 CLUSTER_LIST 最短的路由。
- 优选 ORIGINATOR_ID 最小的路由。
- 优选 Router ID 最小的路由器发布的路由。
- 优选 IP 地址最小的对等体发布的路由。
十二、BGP 属性分类
1. 公认必遵属性(所有路由必须携带)
- AS_PATH:记录路由经过的 AS 编号,用于防环和选路(短路径优先)。
- Next-hop:路由的下一跳 IP,EBGP 邻居间传递时更新,IBGP 邻居间传递时不变(需手动修改为本地)。
- ORIGIN:路由来源,优先级:IGP(i)> EGP(e)> Incomplete(?)。
2. 公认可选属性(所有路由器识别,非必须携带)
- Local_Pref:本地优先级,仅 IBGP 传递,值越大越优先(默认 100)。
- Atomic-aggregate:自动聚合标记。
3. 可选传递属性(可不识别,但会传递)
- Community(团体属性):标记路由,用于批量控制,如 no-export(不传出 AS)、no-advertise(不向任何对等体通告)。
4. 可选非传递属性(可不识别,不传递)
- MED:多出口鉴别器,用于相邻 AS 间选路,值越小越优先。
- Cluster_list:路由反射器集群列表,用于防环。
- Originator_ID:路由反射器中路由的始发者 ID,用于防环。
十三、大规模 BGP 网络优化手段
1. 对等体组(Peer Group)
- 定义:将具有相同属性的对等体分组,以简化配置操作。
- 配置示例:
TypeScript取消自动换行复制
[R2-bgp] group <group-name> internal # 创建IBGP对等体组
[R2-bgp] peer <ip1> group <group-name> # 加入对等体
[R2-bgp] peer <group-name> connect-interface LoopBack 0 # 统一配置更新源
2. 路由聚合
- 自动聚合:仅对引入的 IGP 路由聚合到主类,这种方式可能产生黑洞,命令为 summary automatic。
- 手动聚合:可以精确汇总,并且能够抑制明细路由,命令为:
TypeScript取消自动换行复制
[router-bgp] aggregate <network> <mask> detail-suppressed # 抑制明细路由
3. 路由反射器(RR)
- 作用:替代 IBGP 全连接,减少邻居数量,允许将从 IBGP 学到的路由反射给其他 IBGP 邻居。
- 角色:包括 RR(反射器)、Client(客户机)、非客户机。
- 反射规则:
- 从非客户机学到的路由,仅反射给客户机。
- 从客户机学到的路由,反射给所有客户机和非客户机(除始发者)。
- 从 EBGP 学到的路由,反射给所有客户机和非客户机。
- 防环机制:通过 Cluster_list(记录经过的 RR 集群 ID)和 Originator_ID(路由始发者 ID)来防止环路。
- 配置示例:
TypeScript取消自动换行复制
[R2-bgp] peer <client-ip> reflect-client # 配置客户机
[R2-bgp] reflector cluster-id <id> # 配置集群ID(可选)
4. BGP 联盟(Confederation)
- 作用:将一个 AS 划分为多个子 AS(使用私有 AS 编号),子 AS 之间通过 EBGP 连接,以减少 IBGP 邻居数量。
- 配置示例:
TypeScript取消自动换行复制
[R2] bgp <子AS编号>
[R2-bgp] confederation id <主AS编号> # 声明主AS
[R2-bgp] confederation peer-as <其他子AS编号> # 声明联盟内其他子AS
5. 团体属性(Community)
- 作用:对路由进行标记,以便批量控制路由的发布范围。
- 公认团体属性:
- Internet:默认属性,路由可通告给所有对等体。
- no-advertise:路由不向任何对等体通告。
- no-export:路由不传出 AS(但可在联盟内子 AS 间传递)。
- 配置示例:
TypeScript取消自动换行复制
[R1] route-policy <name> permit node 10
[R1-route-policy] apply community no-export # 标记为no-export
[R1-bgp] peer <ip> route-policy <name> export # 应用策略
[R1-bgp] peer <ip> advertise-community # 允许传递团体属性
6. 路由衰减(Route Dampening)
- 作用:解决路由振荡(频繁上下线)问题,通过惩罚值来抑制不稳定的路由。
- 参数:抑制阈值(默认 2000)、重用阈值(默认 750)、半衰期(默认 15 分钟)。
- 配置示例:
TypeScript取消自动换行复制
[router-bgp] dampening # 启用默认参数
十四、BGP 实验实例
1. 基本配置实验
- 目标:配置 EBGP 和 IBGP 邻居,宣告业务网段,解决路由黑洞问题。
- 关键步骤:
- 配置 IP 地址和 OSPF(实现 AS 内部互通)。
- 建立 EBGP(直连)和 IBGP(环回口)邻居关系。
- 宣告业务网段,通过 import-route bgp 将 BGP 路由引入 IGP,以解决路由黑洞问题。
2. 路由控制实验
- 目标:通过修改属性来控制选路(如 MED、Preferred-value、AS_PATH、Local-pref)。
- 示例:修改 MED 使路由优选某路径:
TypeScript取消自动换行复制
[R2] acl 2000 # 抓取目标网段
[R2-route-policy] apply cost 100 # 提高MED值
[R2-bgp] peer <ip> route-policy <name> export # 应用策略
3. 路由反射器实验
- 目标:配置 RR 以减少 IBGP 邻居,实现路由反射功能。
- 关键步骤:
- 配置 OSPF 确保 TCP 可达。
- 建立 IBGP 对等体组,配置 RR 及客户机。
- 聚合业务网段,抑制明细路由。