BGP特性
调整BGP收敛速度
配置BGP连接重传计时器 【默认32秒】
BGP建立TCP连接不成功,则会在连接重传计时器超时后重新尝试建立新的连接,默认32秒
BGP进程内Peer指定邻居后,会尝试建立TCP连接,发送TCP-SYN报文,等待对端回应。TCP-SYN报文自身的重传由操作系统内核控制,遵循指数退避算法(通常初始间隔为1秒,后续翻倍),并非在32秒时发送"第二个"SYN报文。BGP的32秒连接重传计时器超时后,是指BGP进程会断开当前的连接尝试,并重新发起一次全新的TCP连接(即重新发送一个新的TCP-SYN报文),而不是重传上一个连接里的第二个SYN报文。
sql
bgp 100
timer connect-retry <time> ----- 默认32秒
配置BGP存活时间和保持计时器 【keepalive默认60 hold默认180】
针对所有的BGP邻居存活时间与保持计时器
sql
bgp 100
timer keepalive <time> hold <time>
针对特定的BGP邻居存活时间和保持计时器
sql
bgp 100
peer 10.1.1.1 keepalive <time> hold <time>
Hold时间协商规则(open报文)
BGP邻居建立时,双方通过OPEN报文交换Hold Time配置值,协商过程遵循 "取小优先" 原则,Keepalive间隔则基于协商结果自动适配。
1. Hold Time 协商(取小原则)
- 双方在OPEN报文中通告各自的Hold Time配置值(如华为默认180秒)。
- 协商结果 = MIN(本地配置值,对端配置值) 。
- 若协商结果为 0,表示关闭存活检测机制(双方互不发送Keepalive,邻居永不清除,除非物理链路中断)。
2. Keepalive 发送间隔的自适应推导
确定最终Hold Time后,本地Keepalive报文的实际发送间隔根据以下规则动态调整:
| 本地Keepalive配置值与协商后Hold Time的关系 | 实际生效的Keepalive间隔 |
|---|---|
| 配置值 ≤ Hold Time / 3 | 保持不变(使用本地配置值) |
| 配置值 > Hold Time / 3 | 自动缩减 为 Hold Time / 3 |
举例说明:
-
本地配置 Hold=180s、Keepalive=60s;对端配置 Hold=90s。
- 协商后Hold = MIN(180, 90) = 90秒。
- 计算阈值 = 90/3 = 30秒。
- 本地Keepalive配置值为60s,60 > 30 ,触发规则二 → 实际Keepalive自动降为 30秒发送。
-
若本地Keepalive配置为20s(20 ≤ 30),则触发规则一 → 实际Keepalive保持 20秒不变。
BGP Keepalive 与 Hold
| 对比维度 | Keepalive(管自己发包时间) | Hold Time (邻居老化时间) |
|---|---|---|
| 报文方向 | 我发出去给对端 | 我期待收到对端的报文 |
| 功能目的 | 向邻居证明"我还活着" | 检测邻居是否"死亡"或"不可达" |
| 触发动作 | 本地定时器到期 → 发送Keepalive包 | 对端定时器到期 → 重置BGP会话 |
| 默认值(华为/思科) | 60秒 | 180秒(Keepalive的3倍) |
| 取值范围 | 可手动配置 | 可手动配置(0表示无限,不检测) |
| 协商机制 | 不直接协商,由Hold Time推导(通常Hold的1/3) | OPEN报文中协商 ,取双方配置的较小值 |
配置更新报文定时器 【缺省 IBGP 15秒,EBGP 30秒】
BGP协议采用"触发式增量更新"机制 ,即不会像距离矢量协议(如RIP)那样周期性地刷新整个路由表,而是仅当路由信息发生变更时,通过Update报文通告变更的路由(撤销或新增)。
重点:
- 缺省情况下 华为 IBGP 邻居更新报文定时器为15秒 ,EBGP 邻居更新报文定时器为30秒
- 注意:路由新增或者撤销,路由器会立即发送Update报文,不受更新报文定时器影响。
- 此配置只影响,修改路由属性(下一跳,开销值,MED,团体属性修改等)导致的路由更新受更新报文定时器影响。
配置更新报文定时器时间
sql
bgp 100
peer 10.1.1.1 route-update-interval <time>
直连EBGP会话快速复位功能 【缺省开启】
-
默认开启快速复位 :直连物理接口Down(比如拔网线、光模块掉电),BGP进程收到链路层Down事件,立即 将该EBGP邻居置为Down(耗时 0秒)。
-
关闭快速复位后 :即使物理接口Down了,BGP进程假装没看见 ,不会立刻中断邻居。它老老实实等待 Hold Time(默认180秒) 超时,期间收不到对端任何Keepalive报文,180秒后宣布邻居Down。
配置关闭EBGP连接快速复位
csharp
bgp 100
undo ebgp-interface-sensitive
华为需要在地址簇下配置
csharp
bgp 100
ip-family unicast
undo ebgp-interface-sensitive
配置BGP路由衰减 【针对EBGP路由频繁震荡】**
注意:BGP路由衰减,只针对EBGP,对IBGP无影响。
yaml
bgp 100
adress
dampening 15 750 2000 16000
| 参数顺序 | 你的值 | 真实含义 | 单位 | 官方取值范围 |
|---|---|---|---|---|
| 第1个 | 15 | 半衰期(Half-life) | 分钟(分钟) | 1~45 分钟 |
| 第2个 | 750 | 重用门限(Reuse) | 数值(惩罚值) | 1~20000 |
| 第3个 | 2000 | 抑制门限(Suppress) | 数值(惩罚值) | 1~20000 |
| 第4个 | 16000 | 最大惩罚值(Ceiling / 上限) | 数值(惩罚值) ,非时长 | 1001~20000 |
假设一条路由在 0 秒时发生一次抖动(惩罚值 +1000):
- 0 分钟:惩罚值 = 1000(未达抑制门限 2000,不抑制)。
- 1 分钟 :再抖一次,惩罚值累加至 2000,触发抑制。
- 15 分钟后 :如果路由稳定不再抖,惩罚值按半衰期衰减为 1000(减半)。
- 再过约 15 分钟 (即总计约 30 分钟):惩罚值降到 750 以下,路由自动解除抑制(重用)
当路由失效,BGP路由标记为历史路由

路由震荡一次,惩罚值出现。并且随着时间增长,惩罚值减少

Penalty大于抑制门限,则路由被抑制。当Penalty小于重用值750,路由生效。

最多抑制一个小时,如果一个小时惩罚值任然低于重用值,路由会解除抑制。

查看路由解除抑制倒计时

总结:
开启damped路由抑制之后,EBGP路由频繁震荡,惩罚值大于抑制值,路由被抑制。抑制时间到达一小时或者惩罚值小于重用值,路由解除抑制。
惩罚值每15分钟,惩罚值减半。
BGP可靠性
BGP与BFD联动
php
bfd echo-source-ip 172.16.12.1
bgp 100
peer 172.16.12.2 bfd {选项}
| 选项 | 含义 | 适用场景 |
|---|---|---|
| multi-hop | 建立多跳BFD会话 | BGP邻居不是直连的(比如IBGP通过Loopback建邻 ,或EBGP多跳),中间隔了其他路由器。 |
| single-hop | 建立单跳BFD会话 | BGP邻居是直连 的(物理接口同网段,通常是直连EBGP)。 |
<cr> |
直接回车(不选任何参数) | 表示命令完整,直接生效。默认等同于 single-hop(单跳)**。 |
BGP按需路由发布 ORF*
ORF(outbound routing filter) 出向路由过滤
css
bgp 100
address-family ipv4 unicast
peer 172.16.12.2 capability-advertise orf prefix-list { both | receive | send }
案例配置

设备配置
R1
csharp
bgp 100
router-id 1.1.1.1
peer 172.16.12.2 as-number 234
#
ipv4-family unicast
undo synchronization
peer 172.16.12.2 enable
peer 172.16.12.2 capability-advertise orf ip-prefix receive // R1收
R2
swift
bgp 234
router-id 2.2.2.2
peer 172.16.12.1 as-number 100
#
ipv4-family unicast
undo synchronization
peer 172.16.12.1 enable
peer 172.16.12.1 capability-advertise orf ip-prefix send //R2发
ip ip-prefix 1 permit 10.1.1.1 32 greater-equal 32 less-equal 32 // 只接收10.1.1.1
bgp 234
#
ipv4-family unicast
peer 172.16.12.1 ip-prefix 1 import // 配置ip-prefix引入
报文分析
建立邻居 OPEN报文 两端会协商是否支持ORF

R2会发送 ROUTE-REFRESF报文 会携带ORF字段信息 内容为自己接收的IP路由

R1只发送R2指定想要的路由

配置验证
效果验证
csharp
[R2]dis bgp routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.1.1.1/32 172.16.12.1 0 0 100i
[R2]
控制BGP路由的发布与接收
BGP路由过滤方式
dart
bgp 234
peer 10.1.1.1 filter-policy <acl> <import | export>
peer 10.1.1.1 ip-prefix <name> <import | export>
peer 10.1.1.1 as-path-filter <number> <import | export>
peer 10.1.1.1 router-policy <name> <import | export>
peer 10.1.1.1 conmmunity-filter
# 通过公有community来过滤
no-advertise
no-export
no-export-subconfed
python
ip as-path-filter 1 permit <正则表达式>
// 例:ip as-path-filter 1 permit ^235$ 只允许起源为235的
python
ip community-filter 1 permit 100:1
ip community-filter 1 permit no-export
BGP路由复位
硬复位 【所有BGP邻居中断】
css
reset bgp all
软复位 【现网常用】
arduino
refresh bgp all export // 重新发布自己的BGP路由
refresh bgp all import // 发送refresh报文给BGP邻居,邻居收到后发送BGP路由