BGP属性

  路由器发送关于目标网络的BGP更新消息,更新的度量值被称为路径属性。属性可以是公认的或可选的、强制的或自由决定的、传递的或非传递的。属性也可以是部分的。并非组织的和有组合都是合法的,路径属性分为4类:

  1——公认强制  2 ——公认自由决定  3 ——可选传递  4 ——可选非传递

  well-known mandatory well-known discretionary optional transitive optional nontransitive

  公认属性,指的是公认所有BGP实现都必须能够识别的属性。这些属性被传递给BGP邻居。公认属性总是可传递的。公认强制属性必须出现在路由描述中,公认自由决定属性可以不出现在路由描述中

  可选属性,非公认属性被称为可选的,可选属性可以是传递的或非传递的;可选属性不要求所有的BGP实现都支持。对于不支持的可选传递属性,路由器将其原封不动地传递给其他BGP路由器,在这种情况下,属性被标记为部分的。对于可选非传递属性,路由器必须将其删除,而不将其传递给其他BGP路由器。

  BGP每条更新消息都有一个长度可变的路径属性序列<属性类型,属性长度,属性值>,如果第1比特是0,则属于是公认属性,如果它是1,则该属性是可选属性,如果第2比特是0,则该属性是不可传递的,如果它是1,则属性是可传递的,属性标志域中的第3个比特指示任选可传递属性中的信息是部分的(值为1)还是完整的(值为0),第4个比特确定该属性长度是1字还是2字节,标志域其他4个比特总为0.属性类型代码字节含有属性代码。如下图所示。

  

  BGP路由几种基本属性和对应的类别

  

  1)AS路径属性(AS-path)

  AS_PATH是一个公认必选的属性,它用AS号的顺序来描述AS间的路径或到NLRI(Network Layer Reachability Information,网络层可达信息)所明确的目的地的路由。当每个运行运行BGP的路由器发起一条路由——当它在自己的AS域内公布一个有关目的地NLRI——它将自己的AS号附加到AS_PATH中。当后续的运行BGP的路由器向外部的对端公布路由,它将自己的AS号附加到AS_PATH中。AS_PATH可以描述所有它经过的自治系统,以最近的AS开始,以发起者的AS结束。如下图所示。

  

AS_PATH有2个值,AS_SET和AS_SEQUENCE。通常主要包含的是AS_SEQUENCE,即每经过一个AS,那么会从左边添加上AS号。show ip bgp,每穿越一个AS,path属性会在左边加上自治系统的号,如依次经过的自治系统号为300 200 100,那么会显示,100,200,300。

AS_SET的作用是将汇总后隐藏的AS号显示出来。

只有将更新消息发送给在另一个AS域内的邻居时,BGP路由器才将它的AS号加到AS_PATH中,也就是说只有在两个EBGP对等体之间公布路由时,AS号才被附加到AS_PATH中。可以通过使用AS附加改变其公布路由的AS_PATH来影响数据流的流向。AS_PATH属性的另一个功能就是避免环路,如果BGP路由器从它的外部邻居收到一条路由,而该路由AS_PATH包含这个BGP路由器自己的AS号,那么该路由器就知道是条环路路由。如下图所示。

    

  AS号进行隐藏,如下配置所示。

  下面是AS属性的另一个实例,如下图所示。

  

  R1在发送更新的时候,剥除私有AS号;并且不将AS100的路由传播给其客户路由器R3,配置如下所示。

  

  聚合后继承明细路由的属性,在大括号里面的as-path在计算长度时,只算一个。在联盟内小括号里面的AS号,在选路时,不计算到as-path长度里面。增加as-path的长度,可以用route-map里面的set as-path prepend来做,如:  

neighbor 1.1.1.1 route-map AS {in|out}
route-map AS
set as-path prepend 10 10

  在neighbor的入向做as-path prepend。是在as-path靠近我的地方加长度,如:10 10 2i 。10 10是新加的。而在neighbor的出向做as-path prepend。是在AS起源的方向加path长度,如:2 10 10i 。10 10是新加的。在as-path prepend的后面还有一个参数,last-as,如:  

route-map AS
set as-path prepend last-as ?
<1-10> number of last-AS prepends

  意思是将离我最近的AS,将它的AS号在as-path里面再重复出现几次。这个10看起来可以和allowas-in里面的10对应起来。假如as-path prepend 与as-path prepend last-as合用的时候,last-as先生效,然后prepend再生效。减小as-path的长度,如用联盟和remove-private-AS等可以实现。注意:Remove-private-as,如果在as-path里交替出现私有和公有的AS号,这样将无法将私有AS号去掉。在起源的时候,连续的时候才有效。

  bgp bestpath as-path ignore(隐藏命令),这条命令可以使我们在选路时,跳过as-path的选路,直接往下继续选择最优路径。

  2)源头属性(Origin)

  ORIGIN是公认强制属性,它定义了路径信息的源头。ORIGIN属性定义路由信息的来源,标记一条路由是怎么成为BGP路由的。它有以下三种类型:

  IGP:优先级最高,路由在起始AS的内部,使用network命令通过BGP通告路由时通常属于这种情况。在BGP表中,IGP源头用i表示

  EGP:优先级次之,说明路由是通过EGP获悉的,在BGP表中用e表示。

  incomplete:优先级最低,它并不是说明路由不可达,而是表示路由的来源无法确定。例如,引入的其它路由协议的路由信息。在BGP表中,不完整源头用?表示

  如下示例所示。

  

  3)下一跳属性(NEXT_HOP)

  NEXT_HOP为公认必选属性,描述了到公布目的地的路径下一跳路由器的IP地址。由BGP NEXT_HOP属性所描述的IP地址不经常是邻居路由器的IP地址,要遵循下面的规则:

  如果正在BGP发言者和接收的路由器在不同的AS中(即EBGP对等体),NEXT_HOP是正在宣告路由器接口的IP地址,如下图所示。

  

  如果BGP发言者和接收的路由器在同一个AS内(即IBGP对等体),并且更新消息的NLRI指明的目的地也在同一个AS内,那么NEST_HOP就是宣告路由的邻居的IP地址。如下图所示。

  

  如果BGP发言者和接收的路由器在同一个AS内(即IBGP对等体),并且更新消息的NLRI指明目的地在不同的AS,则NEXT_HOP就是学习到路由的外部对等实体的IP地址。如下图所示。

  

  从上面图可以知道,在去往192.168.5.0的网段中会出现路径不可达的情况,解决这个问题的方法是保证内部路由器知道与两处自治系统相连的外部网络,可以使用静态路由的办法,但实际的做法是在外部端口上以被动模式运行IGP。但在某种情况下,该方法并不理想。

  第二种方法是采用配置选项来做,这个配置选项被称做next-hop-self。

  解决下一跳不可达的方法:

  ※静态路由

  ※在IBGP邻居所处的IGP中宣告

  ※将与EBGP直连的网络重分布进IGP

  neighbor x.x.x.x next-hop-self(将指向EBGP邻居更新源的地址变为自己的更新源地址)(RR有的版本会将下一跳改变)

  一般情况下,在本路由器上将直连的网络引入BGP,下一跳为0.0.0.0,本路由器聚合的路由的下一跳也为0.0.0.0。

  在本路由器上将从IGP学来的路由引入BGP时,在本路由器上看BGP的转发表,下一跳为IGP路由的下一跳。在多访问网络环境中,用直连接口建立邻居关系,会产生第三方下一跳。

  实例说明:如下图所示,

  

  R2与R1是IBGP邻居,R1与R3是EBGP邻居,当用直连接口建邻居时,R2引入BGP的前缀172.16.2.0/24,在R3的bgp转发表里,将显示为R2的多访问网络接口地址(如:10.1.1.2)。产生第三方下一跳的现象。

   如果R1、R2、R3全部用直连接口建邻居时会产生第三方下一跳。

   如果R1、 R2用环回口而R1、R3用直连建立邻居时,会产生第三方下一跳。

   如果R1、R2用直连而R1、R3用回环口时,不会产生第三方下一跳,如下所示配置。

   如果R1、R2、R3都用环回口建立邻居,则不会产生第三方下一跳,如下配置所示。  

R3#show ip bgp
BGP table version is 4, local router ID is 172.16.3.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*&gt; 172.16.1.0/24 10.1.1.1 0 0 100 i
*&gt; 172.16.2.0/24 10.1.1.2 0 100 i
*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

  

R1
router bgp 100
no synchronization
bgp log-neighbor-changes
network 172.16.1.0 mask 255.255.255.0
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 ebgp-multihop 2
neighbor 3.3.3.3 update-source Loopback1
neighbor 10.1.1.2 remote-as 100
no auto-summary
R3
router bgp 200
no synchronization
bgp log-neighbor-changes
network 172.16.3.0 mask 255.255.255.0
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 ebgp-multihop 2
neighbor 1.1.1.1 update-source Loopback1
no auto-summary

  

R3#sh ip bgp
BGP table version is 8, local router ID is 172.16.3.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*&gt; 172.16.1.0/24 1.1.1.1 0 0 100 i
*&gt; 172.16.2.0/24 1.1.1.1 0 100 i
*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

  

R1
router bgp 100
no synchronization
bgp log-neighbor-changes
network 172.16.1.0 mask 255.255.255.0
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 update-source Loopback1
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 ebgp-multihop 2
neighbor 3.3.3.3 update-source Loopback1
no auto-summary
R2
router bgp 100
no synchronization
bgp log-neighbor-changes
network 172.16.2.0 mask 255.255.255.0
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 update-source Loopback1
no auto-summary
R3
router bgp 200
no synchronization
bgp log-neighbor-changes
network 172.16.3.0 mask 255.255.255.0
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 ebgp-multihop 2
neighbor 1.1.1.1 update-source Loopback1
no auto-summary

  

R3#sh ip bgp
BGP table version is 10, local router ID is 172.16.3.1
Status codes: s suppressed, d damped, h history, * valid, &gt; best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*&gt; 172.16.1.0/24 1.1.1.1 0 0 100 i
*&gt; 172.16.2.0/24 1.1.1.1 0 100 i
*&gt; 172.16.3.0/24 0.0.0.0 0 32768 i

  第三方下一跳:收到路由更新的源地址与将要发出去的接口地址在同一网段的时候,路由的下一跳不改变,为原来路由更新的源地址。有时虽然路由的下一跳可达,但会出现访问网络出现环路的现象。

  实例说明:

  

  R5、R3,R1、R2为EBGP邻居关系,R1、R3为IBGP邻居关系。那么R5通过BGP传给R3的路由(如10.1.1.0/24),R3通过IBGP传给R1,R1通过EBGP传给R2,这时R2访问10.1.1.0/24这个网络的下一跳就在R1上。这时R2去访问R5的时候,就会产生环路。则R2(走下一跳)——R1(走物理链路)——R2,这样环路产生了。

  解决方法:

  neighbor x.x.x.x next-hop-unchanged (此命令只能用在EBGP多跳的环境下,将路由的下一跳,从自己的更新源地址改变为从IBGP学来的下一跳地址)(这时路由的下一跳在路由表里将改变。)

  neighbor x.x.x.x route-map XX {in|out}然后在route-map里面set ip next-hop来改变前缀的下一跳。(在路由表里下一跳会改变。)

  策略路由PBR,强制命令R2到10.1.1.0/24的时候走R3。(路由表里下一跳不会改变)

  4)本地优先属性(Local preference)

  本地优先级是公认自由决定的属性,它告诉AS中的路由器,那条路径离开AS的首选路径。本地优先级越高,路径被选中的可能性越大。本地优先级这种属性只能在同一个AS中的路由器之间交换,本是优先级只适用于内部邻居,用于内部对等体之间的Update消息。本地优先级,可以在本AS和大联盟内传递。越大越优先。影响路由器的出站流量。默认情况下,local-preference为100。

  

  使用下面的命令,

  Router(config-router)#

    bgp default local-preference value

  将路由器收到的所有外部BGP路由的默认本地优先级修改为指定值。对IBGP邻居路由器传过来的路由,不会改变它们的local-preference。如果将一个IBGP邻居传来的路由传给另外一个IBGP邻居,那我必须是RR。

  实例说明:如下图所示。

  

  优先级操作路径,如下所示路由器C的BGP表。

  

  改本地优先级,如下所示。

  

  查看路由器C 的BGP表。

  

  5)原子聚合属性

  原子聚合是一个公认自决的属性。类型代码为6,它告诉邻接AS,始发路由器对路由进行了聚合。可以使用下面的命令进行配置,  

  Router(config-router)#

    aggregate-address ip-address mask [summary-only] [as-set]

  命令只聚合已经包含在BGP表中的网络,这与使用network来通告汇总路由要求不同,后者要求网络必须出 现在IP路由选择表中配置命令aggregate-address后,一条与汇总路由对应的指向null0的BGP路由将自动被加入到IP路由表中。如下示例所示。

  

  可以使用show ip bgp命令来查看

  

  6)权重属性

  权重属性是cisco私有的参数。本地有效。缺省条件下,本地始发的路径具有相同的WEIGHT值(即32768),所有其他的路径的weight值为0。越大越优选。影响路由器的出站流量。权重只影响当前路由器,指定邻居的权重。使用下面命令来修改权重。

  neighbor {ip-address | peer-group-name} weight weight

  可以在neighbor的入向设置。范围0-65535。Neighbor 1.1.1.1 weight 10,从对等体1.1.1.1接收过来的所有路由的weight值都设置为10。还可以用route-map来设定,可以将特定路由的weight值改变。如下所示:  

Neighbor 1.1.1.1 route-map AA in
Route-map AA permit 10
Match ip address prefix AA
Set weight 10
Route-map AA permit 20

  7)MED属性

  MED属性也被称为度量值,是一种可选非传递属性。承载于EBGP的Update消息中。MED用于向外部邻居指出进入AS的首选路径,当入口有多个时,AS可以使用MED来动态地影响其他AS如何选择进入路径,在BGP中,MED是唯一一个可影响数据如何进入AS的属性。度量值越小,路径被选中的可能性越大。与本地优先级不同,MED是在自主系统之间交换的。MED影响进入AS的数据流,而本地优先级影响离开AS的数据流。如下图所示。

  

  Metric和MED:BGP的metric对IBGP同样有效。特指med:从EBGP收到的metric比较的时候才叫MED,MED是借用了BGP的metric在EBGP的时候进行比较。MED(多出口区分)比较EBGP的metric找到最优的出口。

  MED相当于IGP路由的metric值,越小越优先。在新的IOS中,将IGP中的路由重分布进BGP,BGP将自动继承IGP路由的metric值。在老的IOS里,如果需要继承需要在重分布时加route-map,如:  

Redistribute rip route-map RE
Route-map RE
set metric-type internal

  默认情况下,只有在两条路径的第一个(邻近的)AS相同的情况下才会进行比较:任何联盟内的子自治系统都被忽略。任何多跳路径,只有在AS_SEQUENCE中的第一个AS相同的情况下,才会比较MED;任何打头的AS_CONFED_SEQUENCE都将被忽略。如果激活了bgp always-compare-med,那么对于所有路径都比较MED,而不考虑是否来自同一个AS。如果使用了这个选项,就应该在整个AS中都这样做,以避免路由选择环路。

实例说明:如下拓扑图,下面是一个使用策略路由来实现修改MED值的案例。

  

  

  

  

  实例说明:如下图所示,此实例采用了本地优先级与MED属性

  

  

  

  8)共同体属性

  BGP团体是一组共享某些共同特性的目的地,用于简化路由策略的执行,一个团体并不被限制在一个网络或一个AS之中。是另一种过滤入站或出站BGP路由的方法。COMMUNITY属性是一组4个8位组的数值,RFC1997规定,前2个8位组表示自治系统,后2个8位组表示出于管理目的而定义的标识符,格式为AA:NN,而思科的默认格式为NN:AA,可以使用命令ip bgpcommunity new-format将思科默认格式改为RFC1997的标准格式。团体属性是一个可传递属性,类型代码为8。

  no_export——如果接收到的路由携带该数值,不通告到EBGP对等体。如果配置了联盟,则不能将此路由宣告到联盟之外。值:0xFFFFFF01;

  no_advertise——如果接收到的路由携带该数值,不通告给任何对等体,包括EBGP和IBGP。值:0xFFFFFF02;

  internet ——无任何值,所有路由器默认情况下都属于该团体,带此属性的路由在被收到后,应该被通告给所有的其他路由器。值:0;

  local_as——带有此属性的路由在被收到后,应该被通告给本地AS域内的对等体,但不应该被通告给外部系统中的对等体,包括同一个联盟内其它自治系统中的对等体。值:0xFFFFFF03。

  实例说明:如下图所示

  

  

  

  

BGP总结(二)的更多相关文章

  1. TCP/IP笔记 二.网络层(2)——ICMP,RIP,OSPF,BGP

    1. ICMP ICMP (Internet Control Message Protocol) 作用:提高 IP 数据报交付成功的机会. 1.1 特点 ICMP 允许主机或路由器报告差错情况和提供有 ...

  2. 企业BGP网络规划案例(二)

    设计思路梳理 1.AS的划分 : 由于该办公网物理上被划分为总部和两个异地的办公分支,总部和分支互联采用MSTP线路,为了方便管理和更为灵活的进行路由控制,选择BGP作为总部和分支的路由协议.关于AS ...

  3. Huawei BGP和OSPF双边界重分布(二)

    网络拓扑: 本例主要配置和例一致,主要是在AR3260-AR1和AR3260-AR2的路由域的边界上,从AR3260-AR1上重分布进BGP 65001的路由的时候打tag 650011,在AR326 ...

  4. 【CISCO强烈推荐】生成树 《路由协议》 卷一二 拥塞:网络延迟 阻塞:进程中 MTU QS:服务质量 OSPF RIP ISIS BGP 生成树 《路由协议》 卷一二

    协议 CP/IP路由技术第一卷 作    者 (美)多伊尔,(美)卡罗尔

  5. BGP路由协议详解(完整篇)

    原文链接:http://xuanbo.blog.51cto.com/499334/465596/ 2010-12-27 12:02:45 上个月我写一篇关于BGP协议的博文,曾许诺过要完善这个文档,但 ...

  6. H3C TE BGP拓扑排错报告

                                                                                       BGP排错报告 故障一:PPP链路 ...

  7. BGP协议学习总结

    BGP学习总结 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建 ...

  8. BGP多线单IP技术实现形式以及其他双线对比

    自从电信与网通分离之后,北方网通与南方电信网络的互联瓶颈问题一直没有得到很好的解决,这个问题也严重困扰广大的ICP服务商.ICP也只能根据自己网站主流用户群是在南方还是在北方,服务重点是在南方还是北方 ...

  9. bgp选路原则【第二部】

    面向逻辑谈bgp选路原则(第二部) 终于到了BGP终极解析的第二部曲--BGP选路原则.与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类.因为只有从这种角 ...

随机推荐

  1. 死磕以太坊源码分析之MPT树-上

    死磕以太坊源码分析之MPT树-上 前缀树Trie 前缀树(又称字典树),通常来说,一个前缀树是用来存储字符串的.前缀树的每一个节点代表一个字符串(前缀).每一个节点会有多个子节点,通往不同子节点的路径 ...

  2. SQL Server解惑——为什么ORDER BY改变了变量的字符串拼接结果

      在SQL Server中可能有这样的拼接字符串需求,需要将查询出来的一列拼接成字符串,如下案例所示,我们需要将AddressID <=10的AddressLine1拼接起来,分隔符为|.如下 ...

  3. ES6 proxy代理详解及用法

    proxy官方的详细解释为代理器,个人理解为相当于一个拦截器,外部的所有访问必须先通过这层拦截,监视到对象的读写过程,因此提供了这 种机制对外部的访问进行过滤和修改. 上述例子为proxy new一个 ...

  4. 如何下载youtube的视频?

    导言 当youtube视频需要下载时,发现需要会员等其他限制 别急,下面就是比较稳定的方法 准备 gitub链接 youtube-dl github 官网链接 官网 按照官网提示下载对应版本 我这里是 ...

  5. 中移动ipv6-老毛子固件获取ipv6设置

    对于有ipv6的服务商原理上可以参照下图

  6. Liunx运维(十二)-Liunx系统常用内置命令

    文档目录: 一.Liunx内置命令概述 二.LIunx常用内置命令实例 1.help查看内置命令帮助2.查看内置命令使用方法3.":" 占位符4. "." 与s ...

  7. 实战Git命令(界面操作+命令行)

    先说明下公司的发版步骤,当需要开发一个新的功能,先从master分支中拉出一个自己的分支a(假设分支为a),在a分支开发功能完后,需要切换到dev分支,然后把自己的分支a合到dev分支,部署测试环境让 ...

  8. 用 Flutter 搭建标签+导航框架

    前言 在 Flutter 这个分类的第一篇文章总结了下最新的 Mac 搭建 Flutter 开发环境和对声明式UI这个理解的东西,前面也有提过,准备像在 SwiftUI 分类中那样花一些功夫来写一个 ...

  9. python中列表的insert和append的效率对比

    python中insert和append方法都可以向列表中插入数据只不过append默认插入列表的末尾,insert可以指定位置插入元素. 我们来测试一下他俩插入数据的效率: 测试同时对一个列表进行插 ...

  10. (十九)hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 注意:md5和sha25 ...