BGP特性

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。

    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,团体属性修改等)导致的路由更新受更新报文定时器影响。

配置更新报文定时器时间

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路由
相关推荐
明月_清风2 天前
开发者网络概念全扫盲:一篇搞定
后端·网络协议
刘马想放假2 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
王二端茶倒水3 天前
一套可落地的无线运营方案,不能只管 AP,还要管用户、计费和运维
网络协议
162723816083 天前
EtherCAT 分布式时钟(DC)原理与配置实战:把多轴真正"对齐到同一时刻"
网络协议
王二端茶倒水4 天前
宽带无线项目,怎么从一次性交付变成长期运营收入?
网络协议
用户2530171996275 天前
第6篇:从技术到产品 — Ghost Proxifier 的设计哲学
网络协议
用户2530171996275 天前
第3篇:注入的艺术 — Ghost Proxifier 核心架构拆解
网络协议
王二端茶倒水6 天前
商业 WiFi 不是免费上网,而是门店数字化的入口
网络协议