理论知识
1.1 先把“BGP 是什么”讲清楚(核心结论)
- BGP(BGP-4)是用于自治系统(AS)之间交换路由信息的路径向量协议(path-vector),是互联网骨干路由的基石。它通过建立基于 TCP 的邻居会话来交换路由(协议规范见 RFC 4271)。
- 在实验环境通常区分 eBGP(不同 AS 之间)和 iBGP(同一 AS 内部)。eBGP 与 iBGP 在 next-hop 处理、AS_PATH 改写、对等策略等方面有不同规则(稍后详述).
1.2 建立会话的基本机制(很重要)
- BGP 使用 TCP(端口 179) 建立可靠连接;连接建立后交换 OPEN/Capabilities,然后用 KEEPALIVE/UPDATE/NOTIFICATION 完成会话和路由交换。典型的 BGP 消息类型:OPEN / UPDATE / KEEPALIVE / NOTIFICATION(和可选的 route-refresh 等)。
- BGP 有自己的有限状态机(Idle → Connect → OpenSent → OpenConfirm → Established),会话不在 Established 就无法交换路由,排查常见问题时应查看这些状态。
1.3 重要路径属性(用于决策与策略)
按属性功能分为:Well-known mandatory / Well-known discretionary / Optional transitive / Optional non-transitive(RFC 定义)。实践中最常见且最常用来影响选路的属性包括:
- AS_PATH(路径回溯与环路检测)
- NEXT_HOP(数据包下一跳,递归解析)
- LOCAL_PREF(同 AS 内偏好,本地值,影响出口选择)
- MED(Multi-Exit Discriminator) (跨 AS 的入口偏好,低值优先)
- ORIGIN(IGP/EGP/INCOMPLETE)
- COMMUNITY / EXTENDED COMMUNITY(标签化并用于策略)
这些属性的组合与优先级决定了路由的“最佳路径”选择。RFC
1.4 BGP 最佳路径选择(步骤要熟记)
不同厂商略有细节差异,但主流实现(Cisco/Juniper 等)的常见比较顺序(简化版)大致是:
- Weight(厂商私有,路由器本地最高优先)
- Local-Preference(本 AS 内,值大者优先)
- 是否本地来源(network/aggregate/redistribute)
- AS_PATH 最短(更少 AS 跳数优先)
- ORIGIN(IGP < EGP < INCOMPLETE)
- MED(值小优先;通常只在同一邻居 AS 间比较,厂商可调)
- prefer eBGP 路径胜过 iBGP
- IGP 路由到 next-hop 的开销(更小优先)
- Router ID / 最后 tiebreakers(如最小 BGP router-id)
(此为通用流程,厂商实现会有附加 tie-breaker,例如 Cisco 的 weight、deterministic-med 等设定。)Cisco
1.5 iBGP 的“全网内”限制与扩展机制
- iBGP 不会把从一个 iBGP 学到的路由再通告给另一个 iBGP 对等体(为避免环路),因此在大型 AS 中需要:
-
- 全互连(full-mesh iBGP;规模小可行)
- Route Reflector(路由反射器)
- Confederation(联合体) 三种扩展方案来缩放 iBGP。
- Route Reflector 在“反射”时一般不应改变 NEXT_HOP/AS_PATH 等关键属性(规范上是 SHOULD NOT,但实现上不同厂商/平台可能有可选的 next-hop 改写功能)。这就是为什么在 iBGP 设计中,next-hop 的可达性与 IGP(或 next-hop-self)配置非常关键。NetworkLessons.comipSpace.net Blog
1.6 next-hop 的实务要点(很常踩坑)
- eBGP 对等体向外宣布时通常会将 next-hop 设置为自身(来源接口);而当一台边缘路由器把从 eBGP 学到的路由通过 iBGP 广播给其他内部路由器时,默认不会改写 next-hop(因此内部路由器必须能通过 IGP/静态等方式解析到该 next-hop 才能转发)。如果不能,就需要用
next-hop-self(或等效命令)或把 next-hop 所在网段注入 IGP/advertise。
info.support.huawei.com/info-finder…
实验
2.1 拓扑图
2.2 各机器配置
A SW1
#
interface LoopBack0
ip address 192.168.10.1 255.255.255.0
#
interface GigabitEthernet0/0
port link-mode route
combo enable copper
ip address 100.1.1.1 255.255.255.0
#
#
bgp 100
router-id 1.1.1.1
peer 100.1.1.2 as-number 200
#
address-family ipv4 unicast
network 192.168.10.0 255.255.255.0 #引入业务网段
peer 100.1.1.2 enable
#
return
B SW2
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
interface GigabitEthernet0/0
port link-mode route
combo enable copper
ip address 100.1.1.2 255.255.255.0
#
interface GigabitEthernet0/1
port link-mode route
combo enable copper
ip address 100.2.2.2 255.255.255.0
#
#
ospf 1 router-id 2.2.2.2
import-route bgp #防止黑洞
#
分析:由于 R3 没有运行 BGP ,无法学习到业务网段路由,
然而业务网段之间通讯的数据包会经过 R3 转发,所以造成 R3 上存在 BGP 路由黑洞
这里通过把 BGP 引入到 OSPF,使 R3 可以通过 OSPF 学习到业务网段的路由,
来解决 BGP 路由黑洞问题
#
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 100.1.1.0 0.0.0.255
network 100.2.2.0 0.0.0.255
#
#
bgp 200
router-id 2.2.2.2
peer 4.4.4.4 as-number 200 #ibgp
peer 4.4.4.4 connect-interface LoopBack0 #ibgp建立连接并不要求直连,所以会指定src端口为loopback
peer 100.1.1.1 as-number 100 #ebgp
#
address-family ipv4 unicast
peer 4.4.4.4 enable
peer 4.4.4.4 next-hop-local # 针对ibgp情况,把自己设为下一跳,避免邻居收到了不可达的 next-hop
peer 100.1.1.1 enable
#
C SW3
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
interface GigabitEthernet0/0
port link-mode route
combo enable copper
ip address 100.2.2.3 255.255.255.0
#
interface GigabitEthernet0/1
port link-mode route
combo enable copper
ip address 100.3.3.3 255.255.255.0
#
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 100.2.2.0 0.0.0.255
network 100.3.3.0 0.0.0.255
#
D SW4
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
interface GigabitEthernet0/0
port link-mode route
combo enable copper
ip address 100.3.3.4 255.255.255.0
#
interface GigabitEthernet0/1
port link-mode route
combo enable copper
ip address 100.4.4.4 255.255.255.0
#
#
ospf 1 router-id 4.4.4.4
import-route bgp
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 100.3.3.0 0.0.0.255
network 100.4.4.0 0.0.0.255
#
return
#
bgp 200
router-id 4.4.4.4
peer 2.2.2.2 as-number 200
peer 2.2.2.2 connect-interface LoopBack0
peer 100.4.4.5 as-number 300
#
address-family ipv4 unicast
peer 2.2.2.2 enable
peer 2.2.2.2 next-hop-local
peer 100.4.4.5 enable
#
return
E SW5
#
interface LoopBack0
ip address 192.168.20.1 255.255.255.0
#
interface GigabitEthernet0/0
port link-mode route
combo enable copper
ip address 100.4.4.5 255.255.255.0
#
#
bgp 300
router-id 5.5.5.5
peer 100.4.4.4 as-number 200
#
address-family ipv4 unicast
network 192.168.20.0 255.255.255.0
peer 100.4.4.4 enable
#
return