BGP特性

0 阅读8分钟

BGP特性

调整BGP收敛速度

配置BGP连接重传计时器 【默认32秒】

BGP建立TCP连接不成功,则会在连接重传计时器超时后重新尝试建立新的连接,默认32秒

BGP进程内Peer指定邻居后,会尝试建立TCP连接,发送TCP-SYN报文,等待对端回应。TCP-SYN报文自身的重传由操作系统内核控制,遵循指数退避算法(通常初始间隔为1秒,后续翻倍),并非在32秒时发送“第二个”SYN报文。BGP的32秒连接重传计时器超时后,是指BGP进程会断开当前的连接尝试,并重新发起一次全新的TCP连接(即重新发送一个新的TCP-SYN报文),而不是重传上一个连接里的第二个SYN报文。

bgp 100
 timer connect-retry <time>   ----- 默认32秒

配置BGP存活时间和保持计时器 【keepalive默认60 hold默认180】

针对所有的BGP邻居存活时间与保持计时器

bgp 100
 timer keepalive <time> hold <time>

针对特定的BGP邻居存活时间和保持计时器

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。

    1. 协商后Hold = MIN(180, 90) = 90秒
    2. 计算阈值 = 90/3 = 30秒
    3. 本地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,团体属性修改等)导致的路由更新受更新报文定时器影响。

配置更新报文定时器时间

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连接快速复位

bgp 100
 undo ebgp-interface-sensitive

华为需要在地址簇下配置

bgp 100
 ip-family unicast
  undo ebgp-interface-sensitive

配置BGP路由衰减 【针对EBGP路由频繁震荡】**

注意:BGP路由衰减,只针对EBGP,对IBGP无影响。

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路由标记为历史路由

image.png

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

image.png

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

image.png

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

image.png

查看路由解除抑制倒计时

image.png

总结

开启damped路由抑制之后,EBGP路由频繁震荡,惩罚值大于抑制值,路由被抑制。抑制时间到达一小时或者惩罚值小于重用值,路由解除抑制。
惩罚值每15分钟,惩罚值减半。

BGP可靠性

BGP与BFD联动
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) 出向路由过滤

bgp 100
 address-family ipv4 unicast
  peer 172.16.12.2 capability-advertise orf prefix-list { both | receive | send }

案例配置

image.png

设备配置

R1

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

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

image.png

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

image.png

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

image.png

配置验证

效果验证

[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路由过滤方式

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
  
ip as-path-filter 1 permit <正则表达式>

// 例:ip as-path-filter 1 permit ^235$  只允许起源为235
ip community-filter 1 permit 100:1
ip community-filter 1 permit no-export

BGP路由复位

硬复位 【所有BGP邻居中断】

reset bgp all

软复位 【现网常用】

refresh bgp all export   // 重新发布自己的BGP路由
refresh bgp all import   // 发送refresh报文给BGP邻居,邻居收到后发送BGP路由