BGP的几种属性讲解

2018年6月26日09:05:04 发表评论 3,299 views

BGP属性分为四种 

  • 公有强制
  • 公有非强制
  • 可选传递
  • 可选非传递
  1. ORIGIN

公有强制属性,标识此条路由的起始位置。分为三种,IGP,EGP和incomplete。 在数据包中分别用012表示。

在BGP选录的时候,IGP>EGP>INCOMPLETE

2. AS_PATH

公有强制属性,此属性标识一条路由所经过的所有AS号。在BGP选录的时候,优先选取AS_PATH短的那个,但是这个特性是CISCO的IOS特有的。如果用CISCO的设备和其他设备互连的时候,可以关闭这一属性,用as-path ignore这个命令。

需要注意的是,BGP只有当这条路由传出本AS的时候才会在AS PATH上面加上本AS的号码,并且是加在最前面。(这个只要注意用来标识起源的i在最末尾就知道了)

AS_PATH分成4种:

AS_PATH

AS_PATH_SEQUENCE

AS_CONFEDREATION_PATH

AS_CONFEDERATION_SEQUENCE

实际上应该是简写标识的,但是我忘了简写的单词了。。。上面用的是单词,具体就是这个意思吧。SEQ和AS-PATH区别就是AS-PATH是不注重顺序的。AS-PATH本身是用来防环的,所以只要这个as number在这个list里就够了。

3. NEXT-HOP

公有强制属性。

这个属性没什么可说的,就是这条路由的下一跳。需要注意的是,只有这条路由传输跨越AS的时候才会修改路由的下一跳,所以可能造成一些IBGP因为下一跳不可达问题造成路由不优。此时采用next-hop-self来修复这个问题。

4.Local Preference

公有非强制属性。

这个属性只在IBGP内部传输,主要用来做策略,当IBGP收到多条路由的时候,他有限选择local preference值大的那个。

默认值是100.

5.MED(MULTI-EXIT-DISC)

可选非传递属性。

相当于metric,越低越好。这个是在EBGP之间传输的,主要用来告诉自己的EBGP邻居自己想要哪条路进来。

也就是说,用来控制EBGP邻居选路。默认是0。

这个属性可以传递给EBGP邻居,但是只能传一跳,也就是说只能影响自己的直连邻居。(逻辑上的。。。)如果想对多跳以外的邻居做策略,要用AP_PATH。(当然,还有好多其他的。。)

6.atomic_aggregate and aggreator

共有,非强制属性。

这个属性是在做了路由汇总的路由器加在路由条目上的,同来通告下游的路由器AS PATH的缺失。因为BGP在聚合之后会丢失掉一部分AS PATH,把自己当作original router传递路由。

aggreator 也是在做汇总的这个路由器加上去的。前面的原子聚合只是告诉下游路由器发生了聚合,而aggreator是加上聚合路由器的AS和router id,思科的设备是这样的,别的不知道
.......

(我还得再说一次,what a fucking design...)

7.Community

可选传递属性。主要用来做策略标记一从一台路由器出来的一组路由,有点像打tag。

曾经是Cisco独有的技术,后来被标准化了。。。

在RFC文档里,community的格式是AA:NN,AA代表AS号,NN就相当于number,标识这台路由器。但是CISCO的传统格式是NN:AA,再次无语。。。想要把这个格式改成RFC的格式用ip bgp-community new-format

值得注意的是,有一些固定的community属性。

internet----默认情况下就是这个,没啥区别。

no-export-----标记这个的路由传出去之后,接受的路由器不能再传递给自己的EBGP邻居。

no-advertise-----标记这个的路由压根就不能传递。

local-as------RFC管这个东西叫做NO_EXPORT_SUBCONFED,其实还是RFC的名字好。意思就是,收到了这个路由不能传给EBGP邻居,同时也不能传给被confederation隔开的,本来是IBGP,现在变成EBGP的邻居。

8.The ORIGINATOR_ID and CLUSTER_LIST Attributes

可选非传递属性,主要用在RR上。

本来为了放环,路由不能在IBGP之间传输,但是现在有了RR,能传了,所以得想个办法防环。传统的BGP防环技术是通过AS path,看见自己就不收,但是as内部不改变AS号。

因此,RR将一个route-reflector-client的路由转发给另外一个client的时候,标记了这个路由的originator,所以如果路由器接收到一条路由,发现originator有自己,就不收了。

cluster list也是RR标上去的,主要是在一个大的AS里,可能会有RR树。因此当一个RR收到一条路由的时候,看看cluster list有没有自己,如果有的话就知道打环了。

9.Administrative Weight

思科私有的BGP属性。

有点像local preference,区别在于这个属性只用于本路由器,不会传递给别的邻居。这个是越大越好。

默认情况下,从邻居学到的路由weight是0, 自己产生的是32768,最大是65535。

个人觉得这个是最好用的了,只可惜是私有属性,不知道别的厂商有没有什么替代的物质,毕竟写这个玩意很容易,关键是创意。

10.AS_SET

这个没太多说的,就是AS-PATH.

分成两种,一个是AS-PATH,一个是AS-SEQUENCE,前者不区分顺序,后者区分。

主要是在BGP做聚合的时候用来防环的。因为BGP聚合的时候默认会删掉所有属性,变成新的路由,这个时候传递出去由于丢失ASPATH属性可能造成环路。但是加上as set的话BGP会把之前所有路由的AS PATH都给加到这条汇总路由里面,然后传递出去,防环。

但是这个其实也有一定的坏处。比如 100 200 300这三个AS过来的路由在400上被聚合,传递出去之后加上AS SET的话应该就是400 300 200 100了。但是我们知道,路由聚合除了压缩路由表之外,一个很大的优势在于我们可以把网络抖动给控制在最小范围之内,做了聚合之后,在这个地址下面的部分出问题不会影响到聚合外的网络。但是有了这个AS SET,假如100的路由忽然没了,那么聚合的路由器就会修改这个as path,然后告诉他的邻居。这样无形的扩大了影响。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: