去评论
海欣资源

BGP路径属性是什么?

ertfg
2022/05/28 14:56:16
路径属性
在默认情况下,到达同一目的地,BGP只走单条路径,并不会在多条路径之间执行负载均衡。对于IGP路由协议,当有多条路径可以到达同一目的地时,则根据最小metric值来选择最优路径,而BGP存在多条路径到达同一目的地时,对于最优路径的选择,BGP并不会以metric值大小为依据,BGP对于最优路径的选择,需要靠比较路由条目中的Path Attributes,即路径属性,只有在比较多条路由的属性之后,才能决定选择哪条为最优路径。BGP的每条路由都带有路径属性,BGP的路径属性可以划分为以下四类:
公认强制 (well-Known Mandatory)
公认自选(Well-Known Discretionary)
可选可传递(Optional Transitive)
可选不可传递(Optional Nontreansitive)

对于个属性的各特点如下:
    公认强制(Well-Known Mandatory)
    对于任何一台运行BGP的路由器,都必须支持公认强制属性,并且在将路由信息发给其它BGP邻接时,必须在路由器中写入公认强制属性,这些属性是被强制写入路由中的,一条不带公认强制属性的路由被BGP路由器被视为无效而被丢弃,一个不支持公认强制属性的BGP,是不正常的,不和法的BGP。
    BGP路由必须携带的公认强制属性有三个:Origin,Next_Hop,AS-path.
    公认自选(Well-Knwn Discretionary)
    公认自选属性并不像公认强制属性那么严格,任何一台运行BGP的路由器必须支持公认属性,必须理解和认识公认自选属性,但是为路由写入公认自选属性并不是必须的,是否要为路由写入公认自选属性可以自由决定,为路由写入上公认自选属性之后,所有BGP路由器都能认识和理解,并且都会自动保留和传递该属性。
    可选可传递(Optional Nontransitive)
    并不是所有运行BGP的路由器都能理解和支持可选可传递属性,路由的可选可传递属性是任意写入的,其它BGP路由器并不一定能理解,也并不一定保留和传递该属性,但是当为路由器设置了可选可传递属性后,可以明确要求BGP路由器保留和传递该属性。
    可选可不选(Optional Nontransitive)
    只有特定的BGP路由器才理解和支持可选不可传递属性,并且可选不可传递属性理论上是不能手工设置的,即使手工设置了可选不可传递属性,这些属性也不能任意传递,只可以传递到特定的BGP路由器。
以上是一些常用BGP属性的介绍:

    Origin(公认强制属性)
在路由器之间建立BGP邻居之后,邻居之间只能相互传递BGP路由表中的路由,在初始状态下,BGP的路由表为空,没有任何路由,要让BGP传递相应的路由,只能先将该路由导入BGP路由表,之后才能在BGP邻居之间传递。默认情况下,任何路由都不会自动进入BGP路由表,只能手工导入,对于路由是怎么进入BGP路由表的,这种方式会被记录在路由条目中,称为Origin属性,Origin属性就反映出了路由是如何进入BGP路由表的。要将路由导入BGP路由表,有三种方式,
第一:因为路由器上默认会有IGP路由表,通过命令show ip route 可以查看到,这些IGP表中的路由可以被手工导入BGP,通过在BGP进程模式下使用命令network,即可将IGP表中的相应路由导入BGP路由表,并且需要指定掩码,只有network后面的网段和掩码在IGP路由表中能找到时,才会进入BGP路由表,并不能通过这种方式将一条不存在的路由凭空导入BGP,通过命令network被导入BGP的路由的Origin属性为IGP属性。
第二:BGP可以从BGP路由协议中获得路由信息,而BGP已经淘汰,被BGP所取代,所以我们很难遇见EGP路由协议,从EGP路由协议获得的路由的Origin属性为EGP。
第三:BGP路由表除了IGP和EGP获取路由外,还可以将路由重分布进BGP路由表,而重发布的路由的Origin属性为Incomplete。
当BGP路由表中到达同一目的地存在多条路径时,会通过比较路由的Origin属性来选择最优路径,它们的优先级为IGP优于EBP,EGP优于Incomplete,即IGP>EGP>Incompete。

    AS_path(公认强制属性)
AS_path中包含了BGP路由器到达目的地所经过的所有AS的集合,AS_Path中会包含了多个AS号码,号码的多少,逻辑上反映了到达目的地的远近。
AS_Path 还能细分为:
AS_SEQUENCE(有序AS号码,即AS号码在AS_Path中是按照一定顺序排列的)
AS_SET(无序AS号码,即AS号码在AS_Path中排列是没有顺序的,通常是将多条将拥有不同AS_Path的路由汇总后产生的)
当BGP路由表中到达同一目的地存在多条路径时,会优选AS-Path最短路径。

    Next_Hop(公认强制属性)
也就是BGP将数据包发往目的地的下一跳,BGP路由的下一跳,就是BGP建立邻,居时的地址,也是BGP之间建立TCP连接所使用的地址。因为这个地址可以是路由器上任意接口的地址,是要能通信即可(其连通性由IGP提供保证),所以BGP在将数据包发往下一跳时,通常需要采用递归查询在IGP路由表中查询该下一跳地址。默认情况下,一台BGP 路由器将路由传递给eBGP邻居时,会将Next-hop属性改为自己的地址,也就是和对方建立邻居所使用的地址,而在将路由传递给iBGP邻居时,不会改变Next-hop属性。
对于将路由传递给BGP 邻居时,是否改变Next-hop属性的功能,可以自由关闭或启用。
BGP路由表中由本地产生的路由而不是从BGP邻居学习来的,即本地发起路由的Next- -hop属性都为0. 0.0. 0。

    Local_Pref(公认自选属性)
Local_ Pref 称为本地优先级,其中的(Local) 本地就是指本AS,或AS内的意思,所以可以想象得出,Local_ Pref 属性的传递范围,只在同一个AS内有效,一条路由的Local_ Pref 属性只能在同一AS内部传递,出了AS后就会被还原成默认值。
Local_ Pref属性在BGP邻居之间是自动传递的,只有在将路由发给iBGP 时才会传递,而在发给eBGP时,是没有Local_ Pref值的,一条路由的Local_ Pref属性
在一个AS内的所有BGP路由器_上是完全相同的。Local_ Pref的默认值为100,由此可以看出,一条路由在AS内的所有路由器上默认值为100。
本地优先级属性是用于区分到同一目的地的各个路由优先程度的。本地优先级越高,路由优先级越高。默认值为100。 .
当BGP路由表中到达同一目的地存在多条路径时,会比较Local_ Pref 值的大小,Local_Pref值大的会被选为最优路径,如110与100,那么110会被选为最优路径。
Local_ Pref 值可以被随意修改,修改后将在整个AS内传递,所以推荐使用Local_ Pref 属性来控制一个AS的路由器去往目的地在其它AS的路径。如下图:

在上图中,AS10中的BGP路由器R3可以同时通过R1与R2去往目的地在AS20中的R4_上时,可以通过在AS 10内部修改路由的Local_ Pref 值来影响选路,比如在R1.上将路由的Local_ Pref 值改为110,而路由器R2_上不作任何改动,最终R3将选择从R1去往AS 20,因为R1的Local_ Pref 值为110,而R2的Local_ Pref 值为100(默认),所以R3选择R1为最优路径。
因为R1和R2在将路由发给iBGP邻居R3时会携带Local_ Pref属性,所以R3同时比较iBGP邻居R1与iBGP邻居R2时,才合适使用Local_Pref属性,因为下一跳都是iBGP邻居,如果下一跳不都是iBGP 邻居,并不建议修改Local_ Pref 属性来影响选路。

    MULTI_EXIT_DISC(MED,可选不可选属性)
    MED就是BGP路由中的metric,是被设计用来影响在多个下一跳都为eBGP邻居时,如何选择最优路径,因为在多个下一跳都为i1BGP 时,是建议使用修改Local_ Pref属性来影响选路的,而多个下一-跳都为eBGP时,则使用MED。MED是BGP路由的metric,所以多条路径中拥有最小MED值的路径会被优先使用。MED默认值为0。
Local_ Pref属性只在同一个AS内部传递,而MED.只能在AS之间传递,只有在将路由发给eBGP邻居时,才会传递MED,"在发给iBGP时,是不会传递MED的。当一条路由被设置MED值后传递给eBGP 邻居,在eBGP邻居收到后,如果将该路由继续传递给iBGP 邻居,那么这个值会被还原为默认值0,也就是说同一个AS内,所有发给iBGP邻居的路由的MED值都为0,这是为了让所有AS内部路由器都能够拥有相同的选路结果。
MED值也是可以随意修改的。


在上图中,当AS 20中的路由器R4要去往目的地为AS 10的网段时,由于下一跳R1与R2都为eBGP邻居,所以可以通过修改MED值来影响R4对于下一跳的选择。比如将R2的MED改为10,而R1的MED保持默认不变,那么最终R4将选择R1去往AS10中的目的地,因为R1的MED值0小于R2的MED值10,所以被优先使用。
默认情况下,只有当去往目的地的多个下一-跳eBGP邻居都为相同AS时,才会比较MED值,如果多个eBGP邻居为不同AS时,是不会比较MED的,若是要强制在多个不同的eBGP邻居之间比较MED值,需要在BGP进程下输入命令: bgp always- compare -med。
    Weight
Weight属性为Cisco私有属性,只有Cisco的路由器才能认识和理解Weight。路由的Weight属性只在路由器本地起作用,BGP 将路由传递给邻居时,并不会保留Weight。Weight 值的范围为0^ 65535,默认为0,如果是BGP本地路由,则Wei ght值为32768。可以手工任意修改路由的Weight值,可以对路由进行修改,也可以对整个邻居进行修改,但也只能对本地起作用,路由的Weight值并不会传递给邻居。
当BGP路由表中到达同一目的地存在多条路径时,会优选Weight值最大的路径。在Cisco路由器中,比较最优路径的第一条规则就是比较Weight值,所以只要改动Weight值,就绝能够控制Cisco路由器的BGP选路。