BGP基础

BGP介绍

为了管理规模不断扩大的网络,网络被分为了不同的AS(Autonomous System,自治系统),早期EGP(Exterior Gateway Protocol,外部网关协议)被实现在AS之间动态交换路由信息,但EGP知识简单发布网络可达的路由信息,没有考虑环路避免和路由优选的问题,因此产生BGP用于完善EGP。

AS指的是在同一个组织管理下,使用同一选路策略的设备集合。不同AS通过AS号区分,AS存在16bit和32bit两种表达方式,在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。

BGP在AS之间传递路由,不会暴露AS内拓扑信息,并且基于TCP连接(端口号为179),并且是触发式更新,不是周期性更新。

BGP基本概念

  • BGP发言者(路由器):运行BGP的路由器
  • 对等体:两个建立BGP会话的路由器互为对等体,BGP对等体互相交换BGP路由表。由于BGP基于TCP连接,因此不需要对等体直连。
  • 路径属性:BGP通过路径属性控制路径选择,不像IS-IS,OSPF只能通过COST控制路由选择,BGP具有丰富的可操作性。

对等体关系建立

  • 对等体关系包括EBGP和IBGP:

    • EBGP:位于不同AS的BGP路由器之间的对等体关系,建立EBGP对等体关系要求两个路由器的AS不同,并且Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能正确建立。

    • IBGP:位于相同AS的BGP路由器之间的BGP邻接关系。

先启动BGP的一端先发起TCP连接,如上图,R1先启动BGP,R1使用随机端口号向R2的179端口发起TCP连接,通过三次握手完成TCP连接。

建立连接后,R1、R2互相发送Open报文,携带参数用于对等体建立,参数协商正常之后双方相互发送Keepalive报文,收到对端发送的Keepalive报文后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接。

Open报文中包含的参数包括:

  • My Autonomous System:自身AS号
  • Hold Time:用于协商后续Keepalive报文发送时间
  • BGP Identifier:自身Router ID

对等体都会发起三次握手,所以会有两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID 和对端Router ID,会使用Router ID大发起的TCP连接进行后续BGP报文交互。

缺省情况下,BGP使用报文出接口作为TCP连接的本地连接接口。

  • 在部署IBGP对等体关系时,一般使用Loopback地址作为更新源地址。Loopback接口稳定,并且可以借助AS内的IGP和冗余拓扑来保证可靠性。

  • 部署EBGP对等体关系时,通常使用直连的IP地址作为源地址,如果使用Loopback接口建立EBGP对等体关系,应注意EBGP多跳问题。

报文类型

image-20220815151223295

五种报文拥有相同的头部格式:

image-20220815151330428

Open报文

Open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系

image-20220815151657414
字段名作用
VersionBGP的版本号。对于BGP 4来说,其值为4
My AS本地AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS
Hold Time保持时间。在建立对等体关系时两端要协商Hold Time , 并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update 报文,则认为BGP连接中断
BGP IdentifierBGP标识符,以IP地址的形式表示,用来识别BGP路由器
Opt Parm LenOptional parameters的长度
Optional parameters宣告自身对于一些可选功能的支持,比如认证、多协议支持

Update报文

image-20220815152050621

Update报文用于在对等体之间传递路由信息,用于发布、撤销路由。一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络层可达信息)中,也可以携带多条不可达路由,用户告知对方撤销路由,保存在Withdrawn Routers字段中。

字段作用
Withdrawn routes不可达路由的列表
Path attributes与NLRI相关的所有路径属性列表,每个路径属性由一个NLV三元组构成
NLRI可达路由的前缀和前缀长度二元组
Total path attribute length路径属性字段的长度,以Byte为单位。如果为0则说明没有Path Attributes 字段

Notification报文

image-20220815153648579

当BGP检测到错误状态时(对等体关系洼立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断

字段作用
Error Code 、Error subcode差错码、差错子码,用于告知对端具体的错误类型。
Data用于辅助描述详细的错误内容,长度并不固定

Keepalive报文

image-20220815153903471

BGP路由器收到对端发送的Keepalive报文,将对等体状态置为己建立,同时后续定期发送keepalive报 文用于保持连接。Keepalive报文格式中只包含报文头,没有附加其他任何字段。

Route-refresh报文

image-20220815154437777

用来要求对等体重新发送指定地址族的路由信息,一般是本端修改了路由策略后,让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。

BGP状态机

image-20220815154538151
  1. Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP才开始尝试和其它BGP对等体进行TCP连接,并转至Connect状态。
    • Start事件是由一个操作者配置一个BGP过程,或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的。
    • 任何状态中收到Notification报文或TCP拆链通知等Error事件后,BGP都会转至Idle状态。
  2. 在Connect状态下,BGP启动连接重传定时器(Connect Retry),等待TCP完成连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP转至Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
  3. 在Active状态下,BGP总是在试图建立TCP连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至OpenSent状态。
    • 如果TCP连接失败,那么BGP停留在Active状态。
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至Connect状态。
  4. 在OpenSent状态下,BGP等待对等体的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
    • 如果收到的Open报文正确,那么BGP发送Keepalive报文,并转至OpenConfirm状态。
    • 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  5. 在OpenConfirm状态下,BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
  6. 在Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文。
    • 如果收到正确的Update或Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
    • 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
    • Route-refresh报文不会改变BGP状态。
    • 如果收到Notification报文,那么BGP转至Idle状态。
    • 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。
image-20220815165601822 image-20220815165629385

BGP路由

BGP协议本身不发现路由,因此需要将其他路由引入到BGP路由表,实现AS间的路由互通。当一个AS需要将路由发布给其他AS时,AS边缘路由器会在BGP路由表中引入IGP的路由。为了更好的规划网络,BGP在引入IGP的路由时,可以使用路由策略进行路由过滤和路由属性设置,也可以设置MED值指导EBGP对等体判断流量进入AS时选路。

BGP引入路由时支持Import和Network两种方式:

  • Import方式是按协议类型,将RIP、OSPF、ISIS等协议的路由引入到BGP路由表中。为了保证引入的IGP路由的有效性,Import方式还可以引入静态路由和直连路由。
  • Network方式是逐条将IP路由表中已经存在的路由引入到BGP路由表中,比Import方式更精确。

BGP路由通告原则

BGP设备将最优路由加入BGP路由表,形成BGP路由。BGP设备与对等体建立邻居关系后,采取以下交互原则:

  • 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。

    image-20220815170716504
  • 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体。

    image-20220815170804379
  • 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体(水平分割)。

    image-20220815170839733 image-20220815171224032
  • BGP同步:当一台路由器从自己的IBGP对等体学习到一条BGP路由时( 这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体, 除非它又从IGP协议( 例如OSPF等, 此处也包含静态路由)学习到这条路由, 也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题

    image-20220815171409966 image-20220815171442935

    解决方式便是建立全互联的IBGP对等关系

BGP路径属性

  • 任何一条BGP路由都拥有多个路径展性。
  • 当路由器将BGP路由通告给它的对等体时, 一并被通告的还有路由所携带的各个路径展性。
  • BGP的路径腐性将影响路由优选。

BGP路径属性可以分为以下四类:

  • 公认必须遵循(Well-known mandatory):所有BGP设备都可以识别此类属性,且必须存在于Update报文中。如果缺少这类属性,路由信息就会出错。
  • 公认任意(Well-known discretionary):所有BGP设备都可以识别此类属性,但不要求必须存在于Update报文中,即就算缺少这类属性,路由信息也不会出错。
  • 可选过渡(Optional transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,但它仍然会接收这类属性,并通告给其他对等体。
  • 可选非过渡(Optional non-transitive):BGP设备可以不识别此类属性,如果BGP设备不识别此类属性,则会被忽略该属性,且不会通告给其他对等体。

常见的BGP路径属性见下图:

image-20220816095631798

Origin

Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:

  • IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
  • EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
  • Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

AS_Path

AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。在接收路由时,设备如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路

当BGP Speaker传播自身引入的路由时:

  • 当BGP Speaker将这条路由通告到EBGP对等体时,便会在Update报文中创建一个携带本地AS号的AS_Path列表。
  • 当BGP Speaker将这条路由通告给IBGP对等体时,便会在Update报文中创建一个空的AS_Path列表。

当BGP Speaker传播从其他BGP Speaker的Update报文中学习到的路由时:

  • 当BGP Speaker将这条路由通告给EBGP对等体时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
  • 当BGP Speaker将这条路由通告给IBGP对等体时,不会改变这条路由相关的AS_Path属性。
image-20220816102546317

路由聚合解决了两类问题,一是减轻了设备的负担,二是隐藏了明细的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险,为此可以通过AS_SET类型的AS_Path属性携带聚合前的AS路径信息。 • 当发生路由聚合后,如果需要聚合路由携带所有明细路由中AS_Path属性携带的AS号防止环路,则在配置聚合的命令中增加as-set参数。 • 在AS_SET的示例中AS 300内发生了路由聚合并配置了as-set参数,则聚合路由会将明细路由的AS_Path信息用一个AS-Set集表示(放在中括号{}里的AS号信息,该集合内的AS号没有先后顺序),在聚合路由中携带用以防止环路。

Next_Hop

Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:

  • BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。

    image-20220816103031975
  • BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。(同上)

  • BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

    image-20220816103053132
  • 如果路由器收到某条BGP路由,该路由的Next_ Hop属性值与EBGP对等体( 更新对象)同属一个网段, 那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体。

    image-20220816103120121

Local_Preference属性

Local_Pref属性表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由。当BGP的设备通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。Local_Pref属性可以手动配置,如果路由没有配置Local_Pref属性,BGP选路时将该路由的Local_Pref值按缺省值100来处理。

image-20220816103951486
注意事项
  • Local_Preference 属性只能在IBGP对等体间传递(除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失), 而不能在EBGP对等体间传递, 如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference , 则会进行错误处理。
  • 但是可以在AS边界路由器上使用Import方向的策略来修改Local_Preference属性值。也就是在收到路由之后,在本地为路由赋予Local_Preference 。
  • 使用bgp default local- preference命令修改缺省Local_Preference值, 该值缺省为100 。
  • 路由器在向其EBGP对等体发送路由更新时, 不能携带Local_Preference腐性, 但是对方接收路由之后,会在本地为这条路由赋一个缺省Local_Preference值( 100 ) , 然后再将路由传递给自己的IBGP对等体。
  • 本地使用network命令及import- route命令引入的路由, Local_Preference为缺省值100 , 并能在AS 内向其他IBGP对等体传递, 传递过程中除非受路由策略影响,否则Local_Preference不变。

MED属性

MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

image-20220816105209541
注意事项
  • 缺省情况下,路由器只比较来自同—相邻AS的BGP路由的MED值, 也就是说如果去往同—个目的地的两条路由来自不同的相邻AS , 则不进行MED值的比较。
  • —台BGP路由器将路由通告给EBGP对等体时, 是否携带MED属性,需要根据以下条件进行判断(不对EBGP对等体使用策略的情况下) :
    • 如果该BGP路由是本地始发(本地通过network或import- route命令引入)的,则缺省携带MED属性发送给EBGP对等体。
    • 如果该BGP路由为从BGP对等体学习到,那么该路由传递给EBGP对等体时缺省不会携带MED属性
    • 在IBGP对等体之间传递路由时, MED值会被保留并传递,除非部署了策略,否则MED值在传递过程中不发生改变也不会丢失。

MED操作:

  • 如果路由器通过IGP学习到一条路由,并通过network或import- route的方式将路由引入BGP , 产生的BGP路由的MED值继承路由在IGP中的metric。例如上图中如果R2通过OSPF学习到了10.0.1.0/24路由,并且该路由在R2的全局路由表中OSPF Cost=100 , 那么当R2将路由network进BGP后,产生的BGP路由的MED值为100
  • 如果路由器将本地直连、静态路由通过network或import-route的方式引入BGP , 那么这条BGP路由的MED为0, 因为直连、静态路由cost为0 。
image-20220816110728556
  • 如果路由器通过BGP学习到其他对等体传递过来的路由,那么将路由更新给自己的EBGP对等体时,默认是不携带MED的。这就是所谓的:“MED不会跨AS传递”。例如在下图中,如果R3从R2学习到一条携带了MED属性的BGP路由,则它将该路由通告给R4时,缺省是不会携带MED属性的。
  • 可以使用default med命令修改缺省的MED值,default med 命令只对本设备上用import-route命令引入的路由和BGP的聚合路由生效。例如在R2上配置default med 999 , 那么R2通过import- route及aggregate命令产生的路由传递给R3时,路由携带的MED为999 。
image-20220816111006227

Community属性

团体属性(Community)用于标识具有相同特征的BGP路由,使路由策略的应用更加灵活,同时降低了维护管理的难度。

image-20220816104406993 image-20220816104424376

团体属性分为自定义团体属性和公认团体属性。下表为公认团体属性

团体属性名称团体属性号说明
Internet0(0x00000000)设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。
No_Advertise4294967042(0xFFFFFF02)设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。
No_Export4294967041(0xFFFFFF01)设备收到具有此属性的路由后,将不向AS外发送该路由。
No_Export_Subconfed4294967043(0xFFFFFF03)设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由。(该属性涉及 BGP联邦 )

团体属性的格式一般为AA:NN,其中AA为AS号,NN为自定义编号。 image-20220816105106538

Atomic_Aggregate及Aggregator

Atomic_Aggregate属于公认任意属性, 而Aggregator属性属于可选过渡属性。

image-20220816111805122
  • Atomic_Aggregate是一个公认自由决定属性,它只相当于一种预警标记,而并不承载任何信息。当路由器收到一条BGP路由更新且发现该条路由携带Atomic_Aggregate属性时,它便知道该条路由可能出现了路径属性的丢失,此时该路由器把这条路由再通告给其他对等体时,需保留路由的Atomic_Aggregate属性。另外,收到该路由更新的路由器不能将这条路由再度明细化。(只有执行手动聚合时才有该属性,否则没有)
  • 另一个重要的属性是Aggregator,这是一个可选传递属性,当路由聚合被执行时,执行路由聚合操作的路由器可以为该聚合路由添加Aggregator属性,并在该属性中记录本地AS号及自己的Router-ID,因此Aggregator属性用于标记路由聚合行为发生在哪个AS及哪台BGP路由器上

Preferred Value属性

  • Preferred -Value (协议首选值)是华为设备的特有属性,该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时,将优先选择Preferred -Value值的路由。
  • 取值范围: 0~65535 ;该值越大,则路由越优先。
  • Preferred -Value只能在路由器本地配置, 而且只影响本设备的路由优选。该腐性不会传递给任何BGP对等体。
image-20220816164539960

Originator ID和Cluster_List

这两个可选非过渡属性都是为了解决路由反射中出现的环路问题,在路由反射器中的 防环机制 再介绍。

路由反射器

由于为了保证AS内所有BGP路由器能学到完整的BGP路由,需要实现BGP全互联,但全互联产生的问题也很明显,路由器需要维护大量的TCP连接,尤其在路由器较多的时候,同时可扩展性较差。这时可以使用路由反射。

路由反射角色:

image-20220816141557841
  • 路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
  • 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
  • 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系
  • 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
  • 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。

实现原理

RR突破了“从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体。”的限制,并采用独有的Cluster_List属性和Originator_ID属性防止路由环路。RR向IBGP邻居发布路由规则如下:

  • 从非客户机学到的路由,反射给所有客户机。
  • 从客户机学到的路由,反射给所有非客户机和客户机(发起此路由的客户机除外)。
  • 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。
image-20220816142105132 image-20220816142125948
反射和发送

“发送”指的是传统情况下(相当于RR不存在)的BGP路由传递行为,而反射指的是遵循路由反射规则下,RR执行的路由传递动作,被反射出去的路由会被RR插入特殊的路径属性。

例如规则三中实际上就是 BGP路由通告原则 的第二条

RR将路由反射时不会修改以下的BGP路径属性:Next_Hop、AS_Path、Local_Preference、MED,如果反射器修改这几个路径属性的值则有可能产生路由环路。

防环机制

RR 的设定使得IBGP水平分割原则失效, 这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:Originator_ lD和Cluster_List

  • Originator

    image-20220816144339489
    • RR 将一条BGP 路由进行反射时会在反射出去的路由中增加Originator_ lD, 其值为本地AS中通告该路由的BGP路由器Router ID
    • 若AS内存在多个RR , 则Originator_lD展性由第一个RR创建,并且不被后续的RR更改。当BGP 路由器收到—条携带Originator_lD属性的IBGP路由,并且Originator_lD属性值与自身的Router ID相同, 则它会忽略关于该条路由的更新。
  • Cluster_List

    • 路由反射簇包括反射器RR及其Client 。一个AS 内允许存在多个路由反射簇(如下图) 。

    • 每一个簇都有唯一的簇ID ( Cluster_lD, 缺省时为RR的BGP Router ID) 。

    • 当一条路由被反射器反射后,该RR(该簇)的Cluster_lD就会被添加至路由的Cluster_list属性中。

    • 当RR收到—条携带Cluster_list质性的BGP路由, 且该属性值中包含该簇的Cluster_lD时, RR认为该条路由存

      在环路, 因此将忽略关于该条路由的更新

      image-20220816144808622 image-20220816145032601
    • R2发送给R1的路由,经过R1反射给R3时除了添加Originator_lD之外还会添加Cluster_List: 10.0.1.1。R3再次反射给R4 时,Cluster _List 值为10.0.3.3,10.0.1.1, R4 再次反射给R1 时Cluster_List 值为:10.0.4.4,10.0.3.3, 10.0.1.1

    • 当R4将路由反射给R1时,R1发现Cluster_List包含了自身Cluster_lD, 判断存在环路,从而忽略该路由更新。

备份RR

为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的RR。由于RR打破了从IBGP对等体收到的路由不能传递给其他IBGP对等体的限制,所以同一集群内的RR之间中可能存在环路。这时,该集群中的所有RR必须使用相同的Cluster ID,以避免RR之间的路由环路。

image-20220816145934751

如上图,RR1和RR2两台设备在同一集群内,配置了相同的Cluster ID

  • 当客户机Client1从EBGP对等体接收到一条更新路由,它将通过IBGP向RR1和RR2通告这条路由。
  • RR1和RR2在接收到该更新路由后,将本地Cluster ID添加到Cluster List前面,然后向其他的客户机(Client2、Client3)反射,同时相互反射。
  • RR1和RR2在接收到该反射路由后,检查Cluster List,发现自己的Cluster ID已经包含在Cluster List中。于是RR1和RR2丢弃该更新路由,从而避免了路由环路。

多集群RR

一个AS中可以存在多个集群,各个集群的RR之间建立IBGP对等体。当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR。当RR所处的网络层相同时,可以将不同集群的RR全连接,形成同级RR

image-20220816150812048

其中Cluster 1内的四台设备是核心路由器,采用备份RR的形式保证可靠性。Cluster 1 部署了两个 1级-RR , 其余两台路由器作为1级-RR的客户机。Cluster 2和Cluster 3中分别部署了一个2级-RR,而2级RR同时也是1级-RR的客户机。两个2级-RR 之间无需建立IBGP连接关系。

image-20220816151059626

四个RR分别处千Clusterl 、Cluster2 、Cluster3 、Cluster4 中, 它们之间互相建立IBGP连接,而每个客户机 只与所在集群内的RR建立IBGP连接。

BGP路由优选

丢弃下一跳不可达的路由,只要下一跳不可达,直接丢弃,不进入下面的优选规则。注意这里的丢弃是指不将路由加入到IP路由表,但还是会加入到BGP路由表,并且指明该路由是无效路由。


  1. 优选Preferred-Value属性值最大的路由
  2. 优选Local_Preference属性最大的路由(用来告诉本AS中的路由器,那条路径是离开本AS的首选路径) 这两条都是取值越大越优

  1. 本地始发的BGP路由优于其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学习到的
  2. 优选AS_Path属性最短的路由
  3. 优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete
  4. 优选MED属性最小的路由(用来告诉EBGP对等体哪条路径是进入自己AS的最佳路径)
  5. 优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP)
  6. 优选到Next_Hop的IGP度量值最小的路由
  7. 优选Cluster_List最短的路由
  8. 优选Router_ID(Orginator_ID)最小的设备通告的路由
  9. 优选具有最小IP地址的对等体通告的路由 这九条都是取值越小越优

自动聚合产生的聚合路由并不会携带Atomic-aggregate属性。

形成负载分担的条件:

  1. Preferred-Value属性值相同
  2. Local_Preference属性值相同
  3. 都是聚合路由或非聚合路由
  4. AS_Path属性长度
  5. Origin类型相同
  6. MED属性相同
  7. 都是EBGP或都是IBGP路由
  8. AS内部IGP的Metric相同
  9. AS_Path属性完全相同

也就是前八条规则相同的情况,就可以配置负载分担。

配置了负载分担后,设备依然只会在多条到达同一目的地的BGP路由中优选一条路由,并只将这条路由通告给其他对等体。

路由优选举例
image-20220816161414549 image-20220816161437560
  • AS 、设备互联地址如图所示, 所有设备均创建Loopback0接口, IP地址为10.0.x. x (x为设备编号),所有设备使用环回口地址作为Router ID 。
  • AS200内运行OSPF, 在内部互联接口( 不包含连接外部AS的接口)、Loopback接口上激活OSPF 。
  • AS内部基于Loopback0接口建立IBGP对等体关系, AS之间基于直连接口建立EBGP对等体关系。
  • R4 、R5上存在相同的网段: 10.0.45.0/24 , 通过import - route命令将该网段的直连路由注入到BGP , 用于验 证BGP路由优选规则。
  1. 丢弃不可达路由

    image-20220816161846534
    • R4 、R5将BGP路由10.0.45.0/24通告给AS200时,Next_Hop展性值为10.0.24.4 、10.0.34.5 。
    • R2 、R3将路由通告给R1时不修改Next_Hop属性值, R1 学习到的两条BGPffi 由10 .0.45 .0/24下一跳为10.0.24.4 、10.0.35.5 。
    • R1 进行BGP路由下一跳迭代查询时, 由于R2 、R3未在连接外部AS的接口上激活OSPF , 导致路由迭代失败, R1 上的BGP路由10.0.45.0/24下一跳不可达。
    • 在R1上通过display bgp routing查询BGP路由表, 此时BGP路由10.0.45.0/24为非有效路由条目。
    image-20220816162218616
  2. 优选Preferred-Value属性值最大的路由

    image-20220816162333749 image-20220816162348756
  3. 优选Local Preference属性值最大的路由

    image-20220816162446900 image-20220816162504192
  4. 本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合> 自动聚合>network> import>从对等体学到的.

    手动聚合:(验证本地优于对等体)

    image-20220816162604340 image-20220816162620345

    这里比较路由来源应该是:本地产生优于对等体产生,优选本地手动聚合的BGP路由

    image-20220816163111225

    自动聚合:(验证手动聚合优于自动聚合)

    image-20220816162740996 image-20220816163137020 image-20220816163516717 image-20220816163540386

    后续的根据前文提到的路径属性类比即可。

参考文章