路径矢量路由协议之BGP-2基础实验

以下(图片选取和部分素材笔记来源——《CCNP企业高级路由ENARSI 300-410认证考试指南》作者[加]雷蒙德·拉科斯特)

当前普遍适用的最新版本的BGP是由RFC 4760定义的BGP4+版本,它是对BGP4的扩展。BGP只传递路由信息,不传递其AS内部的拓扑信息。全世界的AS号码都由IANA授权发放;私有段(64512~65535和4200000000~4294967295)除外;在RFC 4893中描述了长度为32bit的扩展ASN。

BGP在AS之间交互路由信息为了确保无环路,BGP的特性如下:

  1. 使用属性(Attribute)描述路径,丰富的属性特征方便实现基于策略的路由调优;

  2. 使用TCP 179作为传输协议,继承了TCP的可靠性和面向连接的特征;

  3. 通过Keepalive消息探测TCP的连接;

  4. 拥有独立的BGP表、邻居表和路由表;

  5. 支持MD5的身份验证;

  6. 使用增量和触发更新的方式。

在以下任意场景中都适合并建议使用BGP:

  1. 一个AS允许数据包穿越并前往其他AS;

  2. 一个AS有多条去往另一个AS的路径;(如果只是单独一条链路则不建议使用BGP)

  3. 必须对进入或离开AS的数据包进行路由策略控制。

BGP使用多种属性可以有效的控制路由信息;其中使用的路径属性有以下4个类别:

  • 公认必遵(Well-Known Mandatory)——是BGP更新信息中必须包含的信息,要被所有BGP厂商设备所能识别的属性,有ORIGIN、AS_PATH和Next-Hop三个属性。

    • ORIGIN(起源)——该属性说明了路由信息的来源,包括IGP、EGP(BGP)和INCOMPLETE( 通过重分布等手段获取到的那些无法明确归类为IGP或EGP的路由来源)三个可能的源;BGP路由器在多条路由的处理中使用该信息;BGP选择具有最低ORIGIN类型的路径,从低到高的顺序为IGP->EGP->INCOMPLETE。

    • AS_PATH(自治系统路径)——包含在Update中的路由信息所经过的ASN序列;

    • Next-Hop(下一跳)——对eBGP来说,下一跳就是通告该路由的邻居路由器的源地址;对iBGP来说,一个是起源AS内部路由的下一跳通告该路由的邻居路由器的源地址;另一个是由eBGP注入AS的路由,它的下一跳会不改变地被带入iBGP中。

  • 公认自决(Well-Known Discretionary)——必须能被所有BGP设备所识别,但是在BGP更新信息中可以发送,也可以不发送该属性,包括LOCAL_PREF和ATOMIC_AGGREGATE两个属性。

    • LOCAL_PREF(本地优先级)——用于AS内有多条路径通告的路由如何离开本地AS;本地优先级越高,路由越优先;该属性仅在iBGP邻居之间传递;

    • ATOMIC_AGGREGATE(原子聚合)——指出已被丢弃的信息;当路由聚合时会导致信息丢失,因为聚合来自具有不同属性的不同来源;如果一台路由器发送了导致信息丢失的聚合,BGP路由器被要求将原子聚合属性附加到该路由上。

  • 可选传递(Optional Transitive)——不要求所有厂商都支持该属性,如果该属性不能被BGP进程所识别,则它就会被标识为传递属性;如果传递标识被设置了,BGP进程会接受这个属性并将它不加改变地传送,包括AGGREGATOR和COMMUNITY。

    • AGGREGATOR(聚合器)——表明实施路由聚合的BGP路由器ID和聚合路由的路由器ASN;

    • COMMUNITY(团体)——指共享一个公共属性的一组路由器。

  • 可选非传递(Optional Nontransitive)——不要求所有BGP都支持;如果这些属性被发送到不能对其识别的BGP路由器上时,这些属性将会被丢弃,不能传递给BGP邻居,包括MED、ORIGINATOR_ID和CLUSTER_LIST。

    • MED( Multi-Exit Discriminator,多出口鉴别器)——用于指示同一AS中多个出口的首选路径;它的作用是告诉外部邻居,在两个或多个出口之间选择最合适的路径;MED的数值越小,表示该路径越优先;MED属性在AS之间交换,但MED属性不能传递到第三方AS;默认情况下,仅当路径来自同一个AS的不同邻居时,BGP路由器才比较它们的MDE属性; 这个属性指的是,MED的值可以被本地AS所使用,但它不会传递给其他AS;也就是说,MED是一个可选的属性,并且非传递的,这意味着它只在同一个自治系统内的BGP路由器之间有效,外部BGP邻居并不会传递MED属性;这通常是为了避免其他AS受到本地出口选择的影响; 它是一种本地使用的、不会被传递到其他AS的路由选择标准;

    • ORIGINATOR_ID(源发器标识符)——路由反射器会附加到这个属性上,它携带本AS源路由器的router-id,用以解决BGP路由环路(尤其是在路由反射器环境中);在BGP路由反射器中,为了避免重复循环传递相同的路由信息,ORIGINATOR_ID 用来标识最初发送该路由的BGP路由器; 在BGP路径中,ORIGINATOR_ID 是由BGP路由反射器添加的,表示原始发布该路由的路由器的BGP ID。通过这个标识符,BGP路由反射器可以检测到该路由是否已经返回到它自己,避免形成环路。

    • CLUSTER_LIST(群集列表)—— 它通过记录路由在多个路由反射器集群间传播的路径,帮助路由反射器识别和丢弃可能的回环路由;此属性显示了采用的反射路径。

只要路由可达,tcp 179号端口未被过滤,就可以连接(跨设备也行),但是不能在互为邻居(对等体PEER)之间双方都用默认路由。

BGP建立邻居默认情况下是使用本地出接口,如果更新源错误,将影响iBGP的邻居建立。比如,使用两端环回口建立邻居,如果不指定更新源地址,iBGP建立对等体邻居时,是使用本地出接口与对等体指定地址建立邻居,而不是通过本地的环回口;对等体也是同样情况。所以为了保证邻居的连通性和可靠性一定要使用更新源可选的必选命令。

eBGP建立邻居对等体时,默认使用直连接口;如果迫不得已必须要使用环回接口建立对等体关系则需要相互有去往对端的静态路由和开启eBGP的多跳更新源。

需要注意的是:用于建立BGP对等体的源地址,不可以再network进BGP的NLRI中去。因为这等于让IGP直连路由再通过某个IGP再学习到一遍一模一样的路由实属于脱裤子放屁。关键这还会造成BGP对等体的震荡问题。

BGP的包头格式是:

+------------------------------+
|      Marker (16 bytes)       |
+------------------------------+
|      Length (2 bytes)        |
+------------------------------+
|      Type (1 byte)           |
+------------------------------+

BGP消息类型主要包括Open、Update、Notification、Keepalive和Route-refresh;这些消息都具有相同的包头,长度为19 Bytes,其中Maker(标记)为16 bytes,用来检测对等体之间同步的丢失情况,以及在支持验证功能时用于验证消息;当不使用验证时所有bit均置为1;Length(长度)为2 bytes,BGP消息总长度包括包头在内,范围是19~4096 bytes;Type(类型)为1 byte,BGP消息类型的取值为1~5,分别是OUNKR。

+----------------------+---------------+-----------------------------+
|   字段               | 长度(字节)   |  描述                         |                        
+----------------------+---------------+-----------------------------+
| Version              | 1             | BGP Version                 |
| My Autonomous System | 2             | local ASN                   |
| Hold Time            | 2             | HoldTime                    |
| BGP Identifier       | 4             | Router-ID                   |
| Optional Parameters  | 1             | optional parameter length   |
| Optional Parameters  | variable      | Negotiate extension         |
+----------------------+---------------+-----------------------------+

 

+----------------------------------+
| Withdrawn Routes Length (2B)     | --> 撤销路由总长度,如果为0,则没有路由被撤销,并在该消息中没有撤销路由的字段
+----------------------------------+
| Withdrawn Routes (variable)      | --> 撤销的路由前缀列表,包含不可达路由列表
+----------------------------------+
| Total Path Attribute Length (2B) | --> 路径属性总长度,如果为0,则没有路径属性字段
+----------------------------------+
| Path Attributes (variable)       | --> 列出所有与NLRI相关的路径属性列表,包括AS_PATH、LOCAL_PREF、ORIGIN等,每个路径属性由一个TLV三元组构成;此属性是BGP用于进行路由控制的重要信息
+----------------------------------+
| NLRI (variable)                  | --> 新通告的路由前缀列表,由可达路由的前缀和前缀长度构成
+----------------------------------+

+---------------------+
|  Error Code (1B)    |  --> 错误代码
+---------------------+
|  Error Subcode (1B) |  --> 错误子码
+---------------------+
|  Data (variable)    |  --> 错误数据,依错误代码类型而定
+---------------------+

+----------------------+------------------+-------------------+
|       Marker         |    Length (2B)   |     Type (1B)     |
+----------------------+------------------+-------------------+
|   0xFF (16 bytes)    |     0x13 (19)    |       0x04        |
+----------------------+------------------+-------------------+

+----------------------+------------------+-------------------+-----------------------------+
|       Marker         |    Length (2B)   |     Type (1B)     |  Route Refresh Request (1B) |
+----------------------+------------------+-------------------+-----------------------------+
|   0xFF (16 bytes)    |     0x10 (16)    |       0x05        |         0x00                |
+----------------------+------------------+-------------------+-----------------------------+

BGP建立邻居时中的5个关键的数据包(OUNKR)的作用:

  1. Open报文——是BGP与对等体建立连接的第一步,即相互收发的第一个消息;在BGP中为初始化会话、交换和协商参数功能起到关键作用;包含BGP版本号,本地AS号,保持时间和BGP路由器标识符,使用这些信息让双方协商会话,以确保双方正常通信;另外,还有可选参数,长度为1 byte,表示可选参数的长度;如果为0则没有可选参数;可选参数的长度可变,用于BGP验证或多协议扩展等功能;包括一个可选参数列表,每个参数由1 byte类型字段、1 byte长度字段和1个包含参数值的可变长度字段来确定,即TLV(Type-Length-Value)方式。

  2. Update报文——当路由器有NLRI时就会在对等体之间交换路由信息,将update报文更新/撤销;就是把自己已知的路由通过network的方式通告/撤销给对方时,就会由此报文通知协商;当某个已知的路由路径属性发生变化时(例如,下一跳、AS路径、MED值等)BGP会通过此报文向对等体发送更新信息;此报文的更新还包括路径属性的传递,这些路径属性帮助BGP对等体评估并选择最佳路径;此报文是BGP用于交换信息的核心报文;

  3. Notification——负责检测对等体的错误与异常信息,报错时会在包中有主次(错误代码和子代码),主包是open或update报文,次包会表面其中哪个参数出了问题;一旦有此报文产生,BGP会立刻中断邻居再重建,一直到各个主次参数正确为止;此保用可以确保BGP对等体之间发生严重错误时,会话能够及时关闭,从而维持网络的稳定和安全性;

  4. Keepalive——提供保活连接、防止超时信息,每隔一个timer参数(Cisco默认是hold为180秒,发送周期是保持时间的1/3,即60秒)更新一次,目的就是维持BGP会话的活跃状态;它还有一个副作用是可以确认Open报文的参数;  

  5. Route-Refresh——此报文是一种用于动态更新BGP路由表的机制,无需中断现有的BGP会话;它允许BGP对等体请求对方重新发送符合某些策略的路由信息;根据路由传递有两个方向,分别是in和out,修改路由属性时,路由更新会比较慢,需要加速收敛时就需要使用Route-refresh报文;关键目的是为了不让BGP的TCP中断连接而重新刷新的方式获取更新信息。

PS:刷新路由软重置——入方向Route-Refresh报文——用于更新/重新应用本地的入站策略,确保接收到的路由信息符合当前的策略要求;in方向发送Route-Refresh路由刷新,后由对等体发送update路由更新。出方向Route-Refresh报文——用于更新对等体发送的出站策略,确保对等体发送的路由信息符合最新的策略要求;out方向直接向对等体发送update路由更新。

BGP使用各种属性来描述路由特性,这些属性和每条路由一起在BGP更新消息中被发送;BGP使用这些属性去选择到达目的链路的最佳路径——以下按优先顺序给出了BGP路径选择中的判定过程:

  • 如下一跳不可达,则不计算该路由;

  • 优先选择具有最大权重(Weight)值的路径;(Weight是Cisco专有属性)

  • 优先选择具有最高本地优先级的路由;

  • 优先选择源自本地路由器上的BGP路由;(标记下一跳路由为0.0.0.0)

  • 优先选择具有最短AS_PATH的路由;

  • 优先选择最低起源的路由;(IGP->EGP->INCOMPLETE)

  • 优先选择最低MED值的路径;

  • 在eBGP路由和联盟eBGP路由中,首选eBGP路由,在联盟eBGP路由和iBGP路由中,首选联盟eBGP路由;

  • 优先选择距离IGP邻居最近的路径;

  • 优先选择存在最久的eBGP路径;

  • 优先选择最低BGP Router-ID的路径;

  • 优先选择邻居IP地址最小的路径。  

BGP路由抑制(Route Dampening)是一种机制,用于减少网络中不稳定的路由信息传播。当某个路由因为某些原因频繁变化(比如某个链路反复断开和恢复),可能会导致路由表的频繁更新和BGP路由的震荡,进而影响网络的稳定性。路由不稳定的还有一种特别的表现形式是路由翻动(RouteFlaps),即路由表中的某条路由反复消失再重现。当发生路由翻动时,路由协议就会向邻居发布路由更新信息,收到更新信息的路由器需要重新计算路由并修改路由表。所以频繁的路由翻转会消耗大量的带宽资源和路由器硬件资源,严重时会影响到网络的正常工作。BGP使用路由抑制以防止持续的路由翻动带来的不利影响。

BGP路由抑制的工作原理如下所示:

惩罚分数
  ^
  |                            _______
  |                           /       \
  |                          /         \                       ________
  |        _______          /           \                     /        \
  |       /       \        /             \                   /          \
  |      /         \      /               \                 /            \
  |-----|           |----|                 |-----抑制------|              |
  |     |           |    |                 |               |              |
  |     |           |    |                 |               |              |
  |     |           |    |                 |               |              |
  +--------------------------------------------------------------------------> 时间
   初始    冲击事件              半衰期           抑制后           恢复
  • 半衰期:单位为分钟,每经过一个半衰期的时间,抑制值就会减半;Cisco默认为15分钟。

  • 重新使用界限:当一条被抑制路由的惩罚值低于该值后,该路由可重新使用;Cisco默认值为750。

  • 抑制阈值:超过该值路由被抑制,不再向其他BGP对等体发布更新报文;Cisco默认值为2000。

  • 最大抑制时间:被抑制路由的抑制时间超过该值后,不管惩罚值为多少,都会重新使用;Cisco默认为60分钟,即4倍的半衰期时间。

  • 初始: 路由刚刚开始工作,惩罚分数为0。

  • 冲击事件: 当路由发生故障(比如链路断开或恢复),BGP会给该路由增加惩罚分数。每次路由发生变动,分数会增加。

  • 半衰期: 随着时间的推移,惩罚分数会逐渐衰减。半衰期定义了分数衰减的速度。例如,如果半衰期为60秒,那么每经过60秒,惩罚分数会减少一半。

  • 抑制阶段: 如果路由的惩罚分数超过阈值(例如750),路由就会被抑制,不再传播。

  • 恢复阶段: 如果抑制的路由在一段时间内保持稳定(没有进一步的冲击),其惩罚分数会逐渐降低,直到低于恢复阈值(例如200),路由重新成为可用的候选路由,可以恢复传播。

主要阈值:

  • 抑制阈值: 当惩罚分数达到一定值(例如750)时,路由会被抑制。

  • 恢复阈值: 当惩罚分数低于一定值(例如200)时,路由恢复传播。

这种机制通过“衰减”惩罚分数,使得那些不稳定的路由在一段时间内不会对网络造成过多的影响,从而减少了频繁的路由变化和“震荡”。

  • 每个路由都有一个抑制分数(dampening penalty): 每当某个路由发生“冲击”(如链路失败或恢复),BGP会给该路由增加一个惩罚分数。惩罚分数会随着时间的推移逐渐递减。

  • 抑制条件:

    • 如果一个路由的惩罚分数达到设定的阈值(通常是half-life-time),这个路由就会被抑制,BGP会停止将其传递给其他邻居。

    • 如果一个被抑制的路由在一定时间内没有发生变化,其惩罚分数将逐渐降低,当分数低于某个恢复阈值时,路由就会重新成为可用的候选路由,并且可以再次传播。

  • 分数递减与阈值:

    • Penalize(惩罚): 每次发生“冲击”时,路由的惩罚分数会增加,越频繁的变化,分数增加得越多。

    • Decay(衰减): 随着时间的推移,惩罚分数会逐渐减少,直到它降到一个阈值以下,路由重新被认为是稳定的。

  • 配置参数:

    • dampening:启用BGP路由抑制。

    • maximum suppression time:最大抑制时间。达到这个时间,路由将永远不会再次传播。

    • half-life:惩罚分数衰减的半衰期,表示每经过一段时间,路由的惩罚分数会减少一半。

    • reuse:当抑制的路由分数降低到此值时,路由将重新被接纳并传播。

    • suppress:当惩罚分数达到此值时,路由将被完全抑制。

例如,当一条路由出现翻动时,这条路由会被加上一个1000的惩罚值,这个惩罚值会每5秒钟递减,等到15分钟时,惩罚值会减少到一半,也就是500。

如果这条路由连续出现翻动,每一次翻动这条路由的惩罚值都会加1000,例如,一条路由连续出现了3次翻动,那么这时候惩罚值就接近3000;当惩罚值大于2000时,这条路由就会在BGP表中被标为Suppressed;再经过了15分钟后(如果没有再发生翻动),这条路由的惩罚值会被减少一半至1500,这条路由还是被标为Suppressed;再经过15分钟后,惩罚值再减一半,即为750,这条路由才可以重新被使用;也就是说经过30分钟,路由器认为这条路由是稳定的,才会重新使用它。如果一条路由不停地翻动,例如16次,这时候惩罚值会接近16000;每过15分钟惩罚值会减少一半,可是到了60分钟时,惩罚值还是大于750,这时因为已经超过了最大抑制时间,所以这条路由会被重新使用。

需要注意的是,BGP路由抑制只对通过eBGP学到的路由起作用。

示例:

假设一个路由的初始惩罚分数是0,每次发生冲击时惩罚分数增加,比如初始值是100。如果这个路由反复出现问题(比如链路不稳定),每次都会给它增加惩罚分数。当惩罚分数累计到某个设定阈值(比如200),这个路由就会被BGP停止传播,并进入抑制状态。经过一段时间后,如果路由不再出现问题,惩罚分数会逐渐下降,当它低于恢复阈值时,BGP就会重新传播该路由。

优点:

  • 减少震荡: 对于频繁变动的路由,能够有效防止网络中的“路由震荡”现象,提升网络稳定性。

  • 降低带宽消耗: 减少了不必要的路由更新,降低了BGP协议在网络中传输的开销。

注意事项:

  • 过度的抑制可能导致一些临时网络问题被错误地长时间抑制,从而影响网络的灵活性和快速恢复能力。因此,配置时需要根据实际网络环境和业务需求来调整惩罚分数、半衰期等参数。

BGP路由抑制的常见配置示例:

router bgp 65001
  bgp dampening 15 750 2000 60
  • 15:冲击后的惩罚分数初始值。(初始惩罚分数:当路由发生“冲击”时,惩罚分数会增加15分钟。)

  • 750:路由被抑制的阈值。(最大抑制阈值:如果惩罚分数达到750,该路由将被抑制,不再传播。)

  • 2000:路由恢复的最低惩罚分数。(恢复阈值:当惩罚分数降到2000以下时,路由会恢复并重新传播。)

  • 60:惩罚分数每60分钟减半。(半衰期:每经过60分钟,惩罚分数会减半。)

PS:半衰期——是指在一定时间内,惩罚分数会衰减一半; 半衰期的单位是时间(分钟),表示惩罚分数衰减的速度; 惩罚分数和阈值——表示惩罚分数的阈值,单位是分数而非时间。

这样配置后,BGP会根据路由的稳定性动态地调整是否传播该路由。

以上两个显示BGP抑制参数的命令,使用哪个都可以。

在BGP路由抑制机制中,主要使用以下几个参数:

  • 初始惩罚分数(Penalize):当路由发生冲击时,惩罚分数会增加,通常初始惩罚分数为100或其他自定义值。

  • 最大抑制阈值(Maximum suppression threshold):当路由的惩罚分数达到此阈值时,路由会被抑制,不再传播。比如750是一个可能的设置值,意味着当惩罚分数达到750时,该路由将被抑制。

  • 恢复阈值(Reuse threshold):当路由的惩罚分数下降到此值时,路由将重新可用。比如200是一个常见的恢复阈值,意味着惩罚分数降低到200时,路由会重新恢复传播。

  • 半衰期(Half-life):这是与时间相关的参数,它定义了惩罚分数衰减的速度。比如60秒表示每经过60秒,惩罚分数会减少一半。

在配置路由抑制的时间和分数的参数时,注意reusing的分数必须小于等于suppressing的分数,即设置bgp dampening时,第3个参数必须大于等于第二个参数;例如:

实验基础理论之后第一个的BGP基础实验

配置BGP时,最好从模块化的角度来考虑配置过程。

BGP路由器的配置需要以下组件:

  • BGP会话参数:负责提供与远程BGP邻居建立通信关系所需的设置,包括BGP对等体的ASN、认证、保持定时器以及会话的源IP地址和目的IP地址;

  • 地址簇初始化:需要在BGP路由器配置模式下初始化地址簇,网络宣告和路由汇总都发生在地址簇内;

  • 在BGP对等体上激活地址簇:必须激活BGP对等体的地址簇,以便BGP启动与该对等体的会话;路由器的IP地址被添加到邻居表中,BGP会尝试建立BGP会话或者接受对等路由器发起的BGP会话。

Cisco IOS默认激活IPv4地址簇,因而简化了IPv4环境的配置操作;但是,如果还使用了其他地址簇,就有可能会产生混乱,此时,可以通过BGP路由器配置命令no bgp default ip4-unicast禁止IPv4 AFI自动激活。以下演示两种BGP配置方法;

R1的BGP配置部分为:

R1#sh run | s bgp
router bgp 65001
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 10.1.12.2 remote-as 65002
 neighbor 10.1.12.2 password ciscobgp
 neighbor 10.1.12.2 timers 15 50
 !
address-family ipv4
  bgp dampening
  network 1.1.1.1 mask 255.255.255.255
  neighbor 10.1.12.2 activate
exit-address-family

R2的BGP配置部分为:

R2#sh run | s bgp
router bgp 65002
 bgp log-neighbor-changes
 bgp dampening 5 500 1200 20
 network 2.2.2.2 mask 255.255.255.255
 neighbor 10.1.12.1 remote-as 65001
 neighbor 10.1.12.1 password ciscobgp
 neighbor 10.1.12.1 timers 10 30

查看已建立的BGP会话:

验证BGP会话摘要信息:

命令(show ip bgp summary)是在MP-BGP出现前发布的,没有为BGP的多协议功能提供层次化结构。无论BGP交换的是何种信息,使用AFI和SAFI语法的好处是可以确保命令的一致性。如果工程师使用了IPv6、VPNv4或VPNv6等地址簇,那么这一点就会非常明显。

  • Neighbor:BGP对等体的IP地址;

  • V:BGP对等体使用的BGP版本;

  • AS:BGP对等体的ASN

  • MsgRcvd:从BGP对等体收到的消息数量;

  • MsgSent:发送给BGP对等体的消息数量;

  • TblVer:发送给BGP对等体的BGP数据库版本;

  • InQ:来自BGP对等体的待处理排队消息数量;

  • OutQ:需要发送给BGP对等体的排队消息数量;

  • Up/Down:BGP会话建立的时长;如果会话不是已建立状态,那么显示的是当前状态;(例如Idle;Active等,非建立连接的状态)

  • State/PfxRcd:BGP对等体的当前状态/从BGP对等体收到的前缀数量。

使用命令show bgp afi safi neighbors ip-address/show ip bgp neighbors ip-address获取BGP邻居的会话状态、定时器及其他重要的对等信息。

BGP通过下面3张表来维护前缀的网络路径和PA信息:

  • Adj-RIB-in表(邻居表/对等体表):包含原始形式(处理入站路由策略之前)的NLRI路由;处理完所有路由策略之后就会清除该表,以节省内存;

  • Loc-RIB表(BGP表/BGP数据库/BGP拓扑表):包含所有本地发起或者从其他BGP对等体收到的NLRI路由;这些NLRI路由通过了有效性和下一跳可达性检查之后,BGP最佳路径算法就会为特定前缀选择最佳NLRI;Loc-RIB是向IP路由表提供路由的表。

  • Adj-RIB-out表:(BGP路由表)包含所有已处理出站路由策略的NLRI路由。

BGP的network命令并不是为特定接口启用BGP,而是标识将要安装到BGP表(Loc-RIB表)中的特定网络前缀。就说只能把ip route表中存在的并且已标识明确前缀掩码的路由转存至此。配置完BGP network之后,BGP进程会在全局RIB中搜索精确的网络前缀匹配项,这里的网络前缀可以是直连网络、辅助直连网络或来自路由协议的路由。确认network与全局RIB中的前缀相匹配之后,就可以将前缀安装到BGP Loc-RIB表中。将BGP前缀安装到Loc-RIB表中时,将根据RIB前缀类型设置以下BGP PA。

  • 直连网络:将下一跳BGP属性设置为0.0.0.0,将BGP路由来源属性设置为i(对于IGP来说),将BGP权重设置为32,768。

  • 静态路由或路由协议:将下一跳BGP属性设置为RIB中的下一跳IP地址,将BGP路由来源属性设置为i(对于IGP来说),将BGP权重设置为32,768,将MED(Multi-Exit Discriminator,多出口鉴别器)设置为IGP度量。

BGP并不会将Loc-RIB表中的每条路由都宣告给BGP对等体;将Loc-RIB表中的路由宣告给BGP对等体时,需要遵循以下步骤:

  1. 验证NLRI有效且下一跳地址可以在全局RIB中解析;如果NLRI有问题,那么仍然保留NLRI,但不会进行下一步处理。

  2. 处理所有特定的出站邻居策略;处理完策略之后,如果路由未被出站策略拒绝,就将该路由保留在Adj-RIB-Out表中,供后续使用。

  3. 将NLRI宣告给BGP对等体;如果NLRI的下一跳BGP PA为0.0.0.0,就将下一跳地址更改为BGP会话的IP地址。

PS:无论BGP Loc-RIB表中存在多少条路由(NLRI路由),BGP仅将最佳路径宣告给BGP对等体。

PS:将学自IGP的路由重分发到BGP中是非常安全的,但是反过来,将学自BGP的路由重分布进IGP时必须格外小心!因为BGP面向大规模网络,能够处理Internet规模的路由表(的几十万至上百万条前缀),而不管是哪种类型的IGP在处理路由数量上是远不及BGP的处理能力的,IGP路由表装入2万条就可能会出现稳定性问题。

下面再扩展一下实验,拓扑如下:

R1的配置信息为:

R1#sh run | s bgp       
router bgp 65001
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 10.1.12.2 remote-as 65002
 neighbor 10.1.12.2 password ciscobgp
 neighbor 10.1.12.2 timers 15 50
 !
address-family ipv4
  bgp dampening
  network 1.1.1.1 mask 255.255.255.255
  network 3.3.3.3 mask 255.255.255.255
  network 4.4.4.4 mask 255.255.255.255
  network 10.1.12.0 mask 255.255.255.0
  redistribute ospf 1
  neighbor 10.1.12.2 activate
exit-address-family

R1#sh run | s eigrp
router eigrp 88
 network 1.1.1.1 0.0.0.0
 network 10.3.13.1 0.0.0.0
 eigrp router-id 11.11.11.11

R1#sh run | s ospf
router ospf 1
router-id 111.111.111.111

R1#sh run int e0/3
Building configuration...


Current configuration : 96 bytes
!
interface Ethernet0/3
ip address 10.5.15.1 255.255.255.0
ip ospf 1 area 0
duplex auto
end


R1#sh run int loo0
Building configuration...


Current configuration : 81 bytes
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
ip ospf 1 area 0
end

R1#sh run | s ip route
ip route 4.4.4.4 255.255.255.255 Ethernet0/2 10.4.14.4

其他AS65001内的IGP配置略……

从BGP对等体收到前缀之后,并不会将Loc-RIB表中的每条前缀都宣告给BGP对等体或者安装到全局RIB中。

BGP的路由处理步骤如下:

  1. 将路由以原始状态存储在Adj-RIB-In表中,并根据收到该路由的邻居应用入站路由策略。

  2. 使用最新表项更新Loc-RIB表,清除Adj-RIB-In表以节省内存。

  3. 执行有效性检查,以验证路由是否有效以及下一跳地址在全局RIB中是否可以解析。如果路由有问题,就将路由保留在Loc-RIB表中,但不进行下一步处理。

  4. 确定BGP最佳路径,仅将最佳路径及其PA传递到下一步。

  5. 将最佳路径路由安装到全局RIB中,处理出站路由策略,将非丢弃路由存储到Adj-RIB-Out表中并宣告给BGP对等体。


     

以下完整展示了BGP路由处理逻辑,包括从BGP邻居接收到的路由以及BGP选择最佳路径的算法。

查看特定BGP路由及路径属性:

特定邻居的Adj-RIB-Out表信息:

使用命令show bgp ipv4 unicast summary/show ip bgp summary验证节点之间交换的NLRI路由。

使用命令show ip route bgp在全局IP路由表(RIB)中显示BGP路由。

基础实验二:(拓扑如下)

配置BGP时,将IGP重分布到BGP中是没问题的,但是将BGP重分布到IGP是非常不适合的,如果不加任何过滤更是万万不可的。所以要在BGP边界有路由,需要在OSPF域中下发默认路由和在EIGRP系统中的接口下汇总下发默认汇总。

路由器R1的配置如下(删除系统默认配置并开启接口):

R1#sh run | b interf
interface Ethernet0/0
 ip address 12.12.12.1 255.255.255.0
!
interface Ethernet0/1
 ip address 10.89.13.1 255.255.255.0
 ip ospf network point-to-point
 ip ospf 1 area 0
!
router ospf 1
router-id 1.1.1.1
default-information originate always
!
router bgp 1001
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 network 3.3.3.3 mask 255.255.255.255
 neighbor 12.12.12.2 remote-as 2002

路由器R2的配置如下(删除系统默认配置并开启接口):

R2#sh run | b interf
interface Ethernet0/0
 ip address 12.12.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 10.88.24.2 255.255.255.0
 ip summary-address eigrp 88 0.0.0.0 0.0.0.0
!
router eigrp 88
 network 10.88.24.2 0.0.0.0
 eigrp router-id 2.2.2.2
!
router bgp 2002
 bgp router-id 2.2.2.2
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 12.12.12.1 remote-as 1001
!
address-family ipv4
  network 4.4.4.4 mask 255.255.255.255
  neighbor 12.12.12.1 activate
exit-address-family
!

路由器R3的配置如下(删除系统默认配置并开启接口):

R3#sh run | b interf
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
 ip ospf network point-to-point
 ip ospf 1 area 0
!
interface Ethernet0/0
 ip address 10.89.13.3 255.255.255.0
 ip ospf network point-to-point
 ip ospf 1 area 0
!
router ospf 1
 router-id 3.3.3.3
!

路由器R4的配置如下(删除系统默认配置并开启接口):

R4#sh run | b interf
interface Loopback0
 ip address 4.4.4.4 255.255.255.255
!
interface Ethernet0/0
 ip address 10.88.24.4 255.255.255.0
!

router eigrp 88
 network 4.4.4.4 0.0.0.0
 network 10.88.24.4 0.0.0.0
 eigrp router-id 4.4.4.4
!

查看R1和R2的BGP三张表——邻居表(Adj-RIB-in)、拓扑表/数据库(loc-RIB)、路由表(Adj-RIB-out):

测试两个远端站点的连通性:

直接ping是不具备完整全路由的,BGP只转存标准已存在路由,不能搬运没有的路由。

所以在测试BGP连通性时一定要记得带源地址或接口!

BGP使用AS_PATH作为环路检测与预防机制。AS_PATH可以为eBGP邻居提供环路检测功能,因为向其他AS宣告路由时它会附加自己的ASN。但iBGP对等体并不会在AS_PATH中附加自己的ASN,因为NLRI将无法通过有效性检查,不会将前缀安装到IP路由表中。

iBGP会话没有其他的环路检测方法,RFC 4271禁止将从iBGP对等体收到的NLRI宣告给其他iBGP对等体。RFC 4271指出,AS内的所有BGP路由器都必须建立全网状连接,以提供完整的无环路由表并防止流量黑洞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pt1043

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值