BGP

一、理论

1、BGP消息

BGP的消息

BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive、Route-refresh和Capability几种消息类型。
•Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认连接有效后,对等体间可以交换Update、Notification、Keepalive和Route-refresh消息。
•Update消息:用于在对等体之间交换路由信息。Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
◾一条Update消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。
◾一条Update消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGP Speaker之间先前通告过的路由。
◾一条Update消息可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。

•Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
•Keepalive消息:BGP会周期性地向对等体发出Keepalive消息,用来保持连接的有效性。
•Route-refresh消息:Route-refresh消息用来请求对等体重新发送所有的可达路由信息。
在所有BGP设备使能Route-refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP设备会向对等体发布Route-refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP设备。这样,可以在不中断BGP连接的情况下,动态刷新BGP路由表并应用新的路由策略。
•Capability消息:用于在一个已经建立的BGP会话基础上动态更新对等体的能力,可保证已有对等体连接不中断。

2、BGP有限状态机

BGP有限状态机共有六种状态,分别是Idle、Connect、Active、OpenSent、OpenConfirm和Established。

在BGP对等体建立的过程中,通常可见的三个状态是:Idle、Active、Established。

•Idle状态下,BGP拒绝任何进入的连接请求,是BGP初始状态。
•Connect状态下,BGP等待TCP连接建立完成后再决定后续操作。
•Active状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。
•OpenSent状态下,BGP等待对等体的Open消息。
•OpenConfirm状态下,BGP等待一个Notification报文或Keepalive报文。
•Established状态下,BGP对等体间可以交换Update报文、Route-refresh报文、Keepalive报文和Notification报文。
BGP对等体双方的状态必须都为Established,BGP邻居关系才能建立,双方通过Update报文交换路由信息。

3、BGP处理过程

•因为BGP的传输层协议是TCP协议,所以在BGP对等体建立之前,对等体之间首先进行TCP连接。BGP邻居间会通过Open消息协商相关参数,建立BGP对等体关系。
•建立连接后,BGP邻居之间交换整个BGP路由表。BGP协议不会定期更新路由表,但当BGP路由发生变化时,会通过Update消息增量地更新路由表。
•BGP会发送Keepalive消息来维持邻居间的BGP连接。
•当BGP检测到网络中的错误状态时(例如收到错误报文时),BGP会发送Notification消息进行报错,BGP连接会随即中断。

4、BGP属性

BGP路由属性是一套参数,它对特定的路由进一步的描述,使得BGP能够对路由进行过滤和选择。事实上,所有的BGP路由属性都可以分为以下4类:
•公认必须遵循的(Well-known mandatory):所有BGP设备都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。
•公认任意(Well-known discretionary):所有BGP设备都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来选择。
•可选过渡(Optional transitive):在AS之间具有可传递性的属性。BGP设备可以不支持此属性,但它仍然会接收这类属性,并通告给其他对等体。
•可选非过渡(Optional non-transitive):如果BGP设备不支持此属性,则相应的这类属性会被忽略,且不会通告给其他对等体。
下面介绍几种常用的BGP路由属性:
•Origin属性,属于公认必须遵循属性,Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:
  ◾IGP:具有最高的优先级。通过路由始发AS的IGP得到的路由信息,比如通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
  ◾EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
  ◾Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

•AS_Path属性,属于公认必须遵循属性,AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。
当BGP Speaker本地通告一条路由时:
◾当BGP Speaker将这条路由通告到其他AS时,便会将本地AS号添加在AS_Path列表中,并通过Update消息通告给邻居路由器。
◾当BGP Speaker将这条路由通告到本地AS时,便会在Update消息中创建一个空的AS_Path列表。
当BGP Speaker传播从其他BGP Speaker的Update消息中学习到的路由时:
◾当BGP Speaker将这条路由通告到其他AS时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP设备根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
◾当BGP Speaker将这条路由通告到本地AS时,不会改变这条路由相关的AS_Path属性。
AS_Path属性有四种形式,分别是:AS_Sequence、AS_Set、AS_Confed_Sequence和AS_Confed_Set。◾AS_Sequence:它是到目的地的路径上所经过的AS号的有序集合,按照顺序记录了路由经过的所有AS。
  ◾AS_Set:它是到目的地的路径上所经过的AS号的无序集合。AS_Set通常用在路由聚合的场景,由于路由聚合后,系统无法将聚合前的具体路由所经过的AS再排出一个有序集合的,所以只能使用AS_Set进行无序记录。AS_Set内不管含有多少AS号,在BGP选路时都按照长度为1进行计算。
  ◾AS_Confed_Sequence:是联盟内子AS的一个有序集合。联盟是处理AS内部的IBGP网络连接激增的一种方法,它将一个AS划分为若干个子自治系统(Sub AS),每个子AS内部建立IBGP全连接关系,子AS之间建立EBGP连接关系。
  ◾AS_Confed_Set:是联盟内子AS的一个无序集合,主要用在联盟内路由聚合的场景。
  AS_Confed_Sequence和AS_Confed_Set的作用是避免联盟内的AS间路由循环和进行联盟内的路由选路。

    image

•Next_Hop属性,属于公认必须遵循属性,BGP的下一跳属性和IGP的有所不同,不一定就是邻居路由器的IP地址。通常情况下,Next_Hop属性遵循下面的规则:
  ◾BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  ◾BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  ◾BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

    image

 •MED属性,属于可选非过渡属性,MED(Multi-Exit-Discriminator)属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。

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

image

•Local_Pref属性,属于公认任意属性,Local_Pref属性仅在IBGP对等体之间有效,不通告给其他AS。它表明路由器的BGP优先级。
 Local_Pref属性用于判断流量离开AS时的最佳路由。当BGP的路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。

image

 .团体属性

BGP将具有相同特征的路由归为一组,称为一个团体,通过在路由中携带团体属性标识路由所属的团体。团体没有物理上的边界,不同AS的路由可以属于同一个团体。
根据需要,一条路由可以携带一个或多个团体属性值(每个团体属性值用一个四字节的整数表示)。接收到该路由的路由器可以通过比较团体属性值对路由作出适当的处理(比如决定是否发布该路由、
在什么范围发布等),而不需要匹配复杂的过滤规则(如ACL),从而简化路由策略的应用和降低维护管理的难度。公认的团体属性有:
    INTERNET:缺省情况下,所有的路由都属于INTERNET团体。具有此属性的路由可以被通告给所有的BGP对等体。
    NO_EXPORT:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS
    NO_ADVERTISE:具有此属性的路由被接收后,不能被通告给任何其他的BGP对等体。
    NO_EXPORT_SUBCONFED:具有此属性的路由被接收后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。
 
。扩展团体属性
  随着团体属性的应用日益广泛,原有四字节的团体属性无法满足用户的需求,备支持的扩展团体属性有VPNTarget、SoO(Site of Origin,源站点)属性、Color属性和Priority-Color属性。
    SoO扩展团体属性用来标识路由的原始站点。路由器不会将带有SoO属性的路由发布给该SoO标识的站点,确保来自某个站点的路由不会再被发布到该站点,从而避免路由环路。在AS路径信息丢失时,可以通过SoO属性来避免发生环路
 
.联盟(Confederation)是处理自治系统内部的 IBGP 网络连接激增的另一种方法,它将一个自治系统划分为若干个子自治系统,每个子自治系统内部的 IBGP 对等体建立全连接关系,子自治系统之间建立联盟内部 EBGP 连接关系。

   image 

   在不属于联盟的 BGP 发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟 ID 就是标识联盟这一整体的自治系统号,如上图中的 AS 200 就是联盟 ID。
 

5、BGP报文格式

image

 Marker:用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

 type:OPEN UPDATE NOTIFICATION KEEPALIVE REFRESH CAPABILITY 

OPEN报文:TYPE为1

image

          可选参数:BGP可选参数列表,每一个可选参数是一个TLV格式的单元

UPDATE报文:TYPE为2

image 

image

 NOTIFICATION报文:TYPE为3

image

 

KEEPALIVE报文:type为4

REFRESH报文:type为5

CAPABILITY报文:type为6

image

 3、BGP对路由的处理:BGP路由来源包括从其他协议引入和从邻居学习两个部分,为了减少路由规模,可以对优选的BGP路由进行聚合。在引入路由、从邻居接收或发送路由的过程中,可以通过路由策略实现对路由的过滤,也可以修改路由的属性。

image

  路由引入:

BGP协议自身不能发现路由,所以需要引入其他协议的路由(如IGP或者静态路由等)注入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。

BGP引入路由时支持Import和Network两种方式:•Import方式是按协议类型,将RIP路由、OSPF路由、IS-IS路由、静态路由和直连路由等某一协议的路由注入到BGP路由表中。
•Network方式比Import方式更精确,将指定前缀和掩码的一条路由注入到BGP路由表中。

  路由选择:

在设备的实现中,当到达同一目的地存在多条路由时,BGP采取如下策略进行路由选择:1.优先从非GR状态邻居学习到的路由。
缺省情况,未配置优选从非GR状态邻居收到路由的功能,选路时跳过该项比较。
配置bestroute non-gr-prior命令后,优选从非GR状态邻居学习到的路由。当前仅对SRv6 TE Policy路由生效。
2.优选没有迭代到Graceful Down(该SRv6 TE-Policy处于延迟删除状态)的SRv6 TE-Policy的路由。
3.在与RPKI(Resource Public Key Infrastructure)服务器进行连接的情景中,RPKI验证顺序依次是:ROA -> 区域验证 -> ASPA验证,应用每种验证结果后的BGP路由优先级顺序为Valid > NotFound > Invalid。
4.优选没有误码的路由。
配置bestroute bit-error-detection命令后将优选没有误码的路由。否则BGP路由不会按照此规则进行选路,跳过该项比较。

5.优选下一跳地址类型为IPv4或者IPv6的邻居路由或远端交叉路由。
配置bestroute nexthop-priority ipv4 high-level命令后,优选下一跳地址是IPv4类型的路由。
配置bestroute nexthop-priority ipv6 high-level命令后,优选下一跳地址是IPv6类型的路由。
该项比较的路由必须同是邻居路由或远端交叉路由,对于携带标签的邻居路由不比较,跳过该项。
对于BGP-VPN实例IPv4地址族视图或者BGP-VPN实例IPv6地址族视图下的bestroute nexthop-priority { ipv4 | ipv6 } high-level命令,设备只会在远端交叉路由之间、私网邻居路由之间比较下一跳类型,
远端交叉路由与私网邻居路由之间不会比较下一跳类型。由于路由选路不比较下一跳类型且路由接收顺序不同,可能会导致路由选路结果不同。
6.优选从VPNv4/VPNv6学习并交叉到私网的前缀路由、或者从EVPN学习并交叉到私网的前缀路由。 配置bestroute address-family-priority vpnv4 high-level命令后BGP在选择最优路由时比较VPN地址族类型,且从VPNv4交叉的IPv4前缀路由优于从EVPNv4交叉的IPv4前缀路由。 配置bestroute address-family-priority evpnv4 high-level命令后BGP在选择最优路由时比较VPN地址族类型,且从EVPNv4交叉的IPv4前缀路由优于从VPNv4交叉的IPv4前缀路由。 配置bestroute address-family-priority vpnv6 high-level命令后BGP在选择最优路由时比较VPN地址族类型,且从VPNv6交叉的IPv6前缀路由优于从EVPNv6交叉的IPv6前缀路由。 配置bestroute address-family-priority evpnv6 high-level命令后BGP在选择最优路由时比较VPN地址族类型,且从EVPNv6交叉的IPv6前缀路由优于从VPNv6交叉的IPv6前缀路由。 7.优选协议首选值(PrefVal)最高的路由。 协议首选值是华为设备的特有属性,该属性仅在本地有效。 8.优选下一跳迭代SRv6隧道类型的路由,且下一跳迭代SRv6 TE Policy的路由优于下一跳迭代SRv6 BE的路由。 缺省情况下,未配置BGP在选择最优路由时比较下一跳迭代SRv6隧道类型的功能,选路时跳过该项比较。 配置bestroute nexthop-recursive-priority srv6-te-policy命令后BGP在选择最优路由时比较下一跳迭代SRv6隧道类型,且下一跳迭代SRv6 TE Policy的路由优于下一跳迭代SRv6 BE的路由。 9.优选本地优先级(Local_Pref)最高的路由。 如果路由没有本地优先级,BGP选路时将该路由按缺省的本地优先级100来处理。通过执行default local-preference命令可以修改BGP路由的缺省本地优先级。
10.优选本地生成的路由(本地生成的路由优先级高于从邻居学来的路由)。 本地生成的路由包括通过network命令或import-route命令引入的路由、手动聚合路由和自动聚合路由。a.优选聚合路由(聚合路由优先级高于非聚合路由)。 b.通过aggregate命令生成的手动聚合路由的优先级高于通过summary automatic命令生成的自动聚合路由。 c.通过network命令引入的路由的优先级高于通过import-route命令引入的路由。 11.优选携带AIGP(Accumulated Interior Gateway Protocol Metric)属性的路由。 •有AIGP属性的路由优先级高于没有AIGP属性的路由。 •如果路由都存在AIGP属性,则比较AIGP属性与其下一跳的IGP Metric之和,优选该值较小的。 12.优选AS路径(AS_Path)最短的路由。•AS_Path的长度不包括AS_CONFED_SEQUENCE和AS_CONFED_SET。 •AS_SET的长度为1,无论AS_SET中包括多少AS号。 •执行bestroute as-path-ignore命令后,BGP选路时,忽略AS_Path的比较。 配置load-balancing as-path-ignore命令后,AS_Path不同的路由也可以进行负载分担。 13.比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由。 14.优选MED(Multi Exit Discriminator)值最低的路由。 如果配置了bestroute med-plus-igp命令,将优选MED值与IGP Metric分别乘对应系数相加的结果较小的路由。 •BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。 •如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;执行bestroute med-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。 •执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。 •执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。 15.依次优选本地VPN路由、LocalCross路由、RemoteCross路由。 LocalCross路由指本地VPN交叉路由。 从某个VPN实例的对等体收到的路由及该VPN实例引入的路由,称为本地VPN路由;PE上某个VPN实例的VPNv4路由的ERT匹配其他VPN实例的IRT后复制到该VPN实例,称为LocalCross;从远端PE学习到的VPNv4路由的ERT匹配某个VPN实例的IRT后复制到该VPN实例,称为RemoteCross。 16.从邻居学习的路由中,EBGP路由优先级高于IBGP路由。对于VPN相关地址族(比如VPNv4、EVPN和VPNv6地址族等),VPN实例向VPN发布的路由优先于邻居学习的路由。 17.优选迭代BGP LSP隧道中携带AIGP属性的单播路由,且优选该值较小的。 配置了bestroute nexthop-resolved aigp命令后,优选迭代BGP LSP隧道中携带AIGP属性的单播路由,且优选该值较小的。否则,选路时跳过该项比较。 18.优选从对等体学习的VPNv4、EVPN和VPNv6路由。 执行peer high-priority命令后,配置优选从IPv4邻居或IPv6邻居学习到的VPNv4、EVPN和VPNv6路由。 19.优选从VPNv4或VPNv6邻居学习并交叉到私网的下一跳地址类型为IPv4或者IPv6的路由。 执行bestroute nexthop-priority ipv4命令后,配置从VPNv4/VPNv6学习到的路由同时交叉到私网实例后优选下一跳地址是IPv4类型的路由。 执行bestroute nexthop-priority ipv6命令 后,配置从VPNv4/VPNv6学习到的路由同时交叉到私网实例后优选下一跳地址是IPv6类型的路由。 20.优选到BGP下一跳IGP Metric较小的路由。 执行bestroute igp-metric-ignore命令后,BGP选路时,忽略IGP Metric的比较。 如果下一跳迭代结果不存在IGP Metric值,跳过IGP Metric值比较。 21.优选Cluster_List最短的路由。 缺省情况下,BGP在选择最优路由时Cluster-List优先于Router ID。配置bestroute routerid-prior-clusterlist命令后,BGP在选择最优路由时Router ID优先于Cluster-List。 22.优选Router ID最小的路由器发布的路由。 执行bestroute router-id-ignore命令后,BGP选路时,忽略Router ID的比较。 如果路由携带Originator_ID属性,选路过程中将比较Originator_ID的大小(不再比较Router ID),并优选Originator_ID最小的路由。 23.比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由。 该项比较的路由必须是相同类型的路由,比如同是邻居路由,同是RemoteCross路由、同是公私网互引路由等,否则,选路跳过该项比较。 24.当本地配置了BGP Flow Specification路由时,优选先配置的BGP Flow Specification路由。 25.对于本地引入的路由,如果同时引入直连路由、静态路由和IGP路由,则优选顺序为直连路由、静态路由>IGP路由。 26.优选ADD-PATH路由的recv pathID较小的路由。 27.优选远端交叉路由中RD较小的路由。 配置了bestroute rd-large-first命令后,优选RD大的路由。 28.对于公私网互引的路由和本地收到的路由,优选本地收到的路由。 29.优选较早学到的路由。

 路由聚合

在大规模的网络中,BGP路由表十分庞大,使用路由聚合(Routes Aggregation)可以大大减小路由表的规模。

路由聚合实际上是将多条路由合并的过程。这样BGP在向对等体通告路由时,可以只通告聚合后的路由,而不是通告所有的具体路由。

BGP路由聚合支持两种方式:•自动聚合:对BGP引入的路由进行聚合。配置自动聚合后,对参加聚合的具体路由进行抑制。配置自动聚合后,BGP将按照自然网段聚合路由(如10.1.1.1/32和10.2.1.1/32将聚合为A类地址10.0.0.0/8),并且BGP向对等体只发送聚合后的路由。
•手动聚合:对BGP本地路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。

IPv4支持自动聚合和手动聚合两种方式,而IPv6仅支持手动聚合。

BGP发布路由

BGP发布路由时采用如下策略:•存在多条有效路由时,BGP Speaker只将最优路由发布给对等体。
•BGP Speaker从EBGP获得的路由会向它所有BGP对等体发布(包括EBGP对等体和IBGP对等体)。
•BGP Speaker从IBGP获得的路由不向它的IBGP对等体发布。
    学习路由的对等体和该路由需要发布的对等体,如果两个对等体属于不同地址族,不受此规则限制。
•BGP Speaker从IBGP获得的路由发布给它的EBGP对等体。
•连接一旦建立,BGP Speaker将把自己可发布的BGP最优路由发布给新对等体。

.发布路由策略:
如果同时配置了几种过滤策略,则按照如下顺序过滤发布的路由信息:
     peer prefix-list export
     peer filter-policy export
     peer as-path-acl export
     filter-policy export
     peer advertise-policy exist-policy
     peer advertise-policy non-exist-policy
     peer route-policy export  

4、团体属性:团体属性(Community)是一种路由标记,主要用于标识具有相同特征的BGP路由。团体属性用一组以4字节为单位的列表来表示,设备中团体属性通常使用两种格式,分别是十六进制的aa:nn格式和十进制的整数格式(这里将其称为团体号),两种格式之间可以互相转换

  公认的团体属性:

image

 AIGP:

累加IGP度量值AIGP(Accumulated Interior Gateway Protocol Metric)是一种新的BGP路由属性,用于传递并累加IGP Metric值,该属性是可选非过渡属性,因特网地址分配组织IANA(Internet Assigned Number Authority)为AIGP分配的属性类型码是26。

通常运行在一个管理域内的路由协议(各种IGP协议),为每一条链路分配一个开销值(Metric,也称为Cost),在选路时优选开销值最小的路径。由于不同自治域间的开销值不具有可比性,BGP协议作为跨域的路由协议,没有使用开销值作为选路的依据。但如果在一个管理域(AIGP域)内运行多个BGP网络,这时就需要BGP协议也能够像IGP一样,基于开销值进行选路。AIGP就提供了这种机制,使BGP协议也可以基于IGP Metric进行选路

 

posted @ 2026-06-29 09:38  hopeccie  阅读(25)  评论(0)    收藏  举报