BGP路由协议(四):工作原理
BGP路由信息库
BGP路由信息库用来存放用于决策的BGp路由:
- Adj-RIB-In 这些信息来自对等体接收到的更新,但是没有经过处理过的路由,存储在该信息库中
- Loc-RIB 经过BGP的输入策略引擎,运行策略之后所存储的信息库,用于本地的路径选择
- Adj-RIB-Out 经过BGP的输出引擎策略,运行策略之后所存储的信息库,用于通告给其他的对等体
### 查看从对等体接收到的路由信息
display bgp routing-table peer 10.1.0.1 {reviced-routes}### 查看向对等体发送的路由信息
display bgp routing-table peer 10.1.0.1### 查看BGP路由信息库
display bgp routing-table {advertised-routes}
###BGP路由信息决策过程
BGP决策过程是指对Adj-RIB-In中的路由使用本地策略,同时将选定过的或者修改过的路由放到Loc-RIB中和Adj-RIB-Out中:
- 当从对等体接收到更新数据包时,路由器会把这些更新数据包存储在路由选择信息库中,并指明是来自哪个对等体
- 这些更新数据包经过BGP输入策略引擎修改属性或者路由的过滤
- 路由器将会执行路径选择算法,来为每一条前缀确定最佳路径
- 得出的最佳路径被存储到本地BGP RIB(Loc-RIB)中,然后将Loc-RIB的路由加载到IP-RIB中,用于路由选择
- Loc-RIB中的内容在被通告给到其他对等体之前,必须通过输出策略引擎,只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中
###BGP选路规则
选路规则记忆小技巧:PL LAO MEN(漂亮老男人)
- 优选协议首选值(PrefVal)数值最高的路由
a. PreVal是华为设备的特有属性,也是选路规则中位列第一位
b. 该属性仅针对本地路由器有意义,不会传递给其他设备
c. 默认值为0
d. 数值越大,优先级越高 - 优选本地优先级(Local_Pref)数值最高的路由
a. 该属性在整个AS内传递,但不会传递到AS之外
b. 默认值为100
c. 数值越大,优先级越高 - 本地起源优先顺序,优先级由高到低
a. 手动聚合路由
b. 自动聚合路由
c. network命令通告的路由
d. import-route命令引入的路由
e. 从对等体学习的路由 - 优选AS路径(AS_PATH)最短的路由
- 依次优选Origin类型为
a. IGP
b. EGP
c. incomplete - 优选MED值最低的路由
a. 默认值为0
b. 如果是来自不同邻居AS的路由,MED不参与比较,除非开启compare-different-as-med命令 - 依次优选eBGP、iBGP路由
- 优选BGP下一跳IGB的度量值(Metric)最小的路由
- 优选Cluster_List最短的路由(如果没有Cluster_List,则没有Cluster_List属性的路由优先)
- 优选Router_ID最小的设备发布的路由
a. 如果路由携带Originator_ID属性,Originator_ID最小的路由优选
b. 如果Originator_ID一样,也不再比较RouterID,直接开始规则11 - 优选从具有最小IP Address的对等体学习来的路由
###BGP的负载分担
一般情况下,只有BGP选择路由的规则前8个属性完全相同,且AS_PATH属性也相同时,BGP路由之间才能相互等价,实现负载分担。或者通告配置修改实现路由负载分担。负载分担只对本地设备有效,本设备还是会根据选路原则选出最优路由发给其他对等体,但在本设备路由表中显示的是负载分担
BGP实现负载分担的两种形式:
- 多条不同下一跳的BGP路由同时出现IP路由表中(前提条件是前8条优选规则完全相同)
- 下一跳路由的负载分担
### maximum load-balancing eBGP/iBGP number
### 命令配置BGP负载分担的最大等价路由条数,默认为1条### 同一个AS内路由负载分担 该方式可能会引起路由环路
load-balancing as-path-ignore
###BGP同步
在一个AS内,BGP的邻居可以跨越路由器建立,但是有可能造成路由黑洞
BGP同步是指BGP路由器必须与IGP同步,AS内的路由器不仅要通过BGP学习到此路由,而且要从IGP协议学习到该路由,AS内的路由器才会认为该路由在AS内完全可达。
在把这条路由通告给eBGP邻居之前,该路由器需要验证内部的可达性,首先检查该目标前缀,了解通往下一跳路由器的路由是否存在,然后检查IGP中是否存在该目标前缀。满足以上条件时,才能将该路由通告给eBGP
华为设备默认关闭BGP同步,且不能手动开启。那么解决BGP路由黑洞有两种方法:
- 建立iBGP全互联,使每台路由器都能收到路由,保证AS内部的可达性
- 使用MPLS VPN技术
###BGP路由的注入
出现在BGP表中的路由,主要通过以下几种方式进入路由表
- 通过network方式注入来自IGP的路由
a. 注入路由时,要注意路由的前缀和掩码要与路由表中完全一致
b. 通过network注入的路由,origin属性为igp - 通过import-route方式引入外部路由
a. 缺省路由不能引入BGP
b. 通过import-route方式引入的路由,origin属性为incomplete - 通告aggregate进行聚合的路由
###路由聚合
路由聚合分为手动聚合和自动聚合,手动聚合路由优于自动路由聚合
- 如果聚合路由中所包含的明细路由的origin属性各不相同,那么origin属性按照优先级incomplete>egp>igp,且聚合路由会继承明细路由中的所有团体属性
- aggregate用于手动聚合路由,手动路由聚合优于自动路由聚合
自动聚合:
- BGP的自动聚合是针对外部引入的路由进行有类的聚合,但不能对network方式注入的路由进行自动聚合,自动聚合通告summary automatic命令实现,该功能默认不启用
- 自动聚合必须在引入路由的设备上操作,其他设备配置自动聚合命令不生效
手动聚合: - 手动聚合可以针对外部引入的路由和通过network方式通告的路由
- 通过aggregate命令实现手动聚合
- 手动聚合路由优于自动聚合路由
- 手动聚合可以在任何地方实现