BGP additional paths

突然发现上个月release的最新版wireshark(1.10)已经全面支持BGP add path数据包的解析了 BGP <wbr>additional <wbr>paths.于是就把之前做的一个小实验贴了出来。就是简单测了下CISCO路由器的一个稍微新一点的feature,叫BGP add path,目前还是个IETF的draf,最新的是http://tools.ietf.org/html/draft-ietf-idr-add-paths-08 ,但是这个draf貌似刚过期了 BGP <wbr>additional <wbr>paths BGP <wbr>additional <wbr>paths
拓扑和上一次的基本一样。
BGP <wbr>additional <wbr>paths
(1) 其中AS64512里RR-client的结构,R1,R2,R3是client。R1和R2分别于R5建立EBGP peer,并且从R5收到一条5.5.5.5/32的BGP路由。
(2) R1,R2收到EBGP路由后,会分别把路由发送给RR,其中R2设置了route-map,修改了这条路由的local preference,由原来默认的100改成了500.
(3) RR分别从R1和R2收到这条路有,根据best path选路原则,判定从R2收到的路由为best,于是把这条best的路由反射给他的client,其中包括R1.
(4) 拓扑收敛,R1,R2,R3去往5.5.5.5/32的流量都会走R2下一条,然后到达R5

以上这种情况,假如R2因为某种原因(比如down掉了),那么RR会withdraw之前的路由,然后等待R1发送新的5.5.5.5/32路由,然后RR再反射,再收敛。OK。

BGP add path的机制是什么呢?就是路由器除了发送最佳best路由给对方外,还会发送非best的次佳,或者次次佳路等等给对方,这样对方相当于是去往目的地有多条路由,不光只有最佳路由。

根据上面的情况,首先RR本身就没有次优路由,只有最优best路由,就是从R2收到的5.5.5.5/32这条路由。
为了让RR从收到R1发过来的路由,在R1上做一个配置:
r1#sh run | b r b
router bgp 64512
  bgp log-neighbor-changes
  no bgp default ipv4-unicast
  neighbor 10.0.14.4 remote-as 64512
  neighbor 10.0.15.5 remote-as 64511
  !
  address-family ipv4
    bgp advertise-best-external
   neighbor 10.0.14.4 activate
   neighbor 10.0.14.4 next-hop-self
   neighbor 10.0.15.5 activate
  exit-address-family
加上这条 bgp advertise-best-external  以后,R1收到RR反射过来的R2的路由后,也不会认为它是最佳,而认为自己从EBGP收到的为最佳,于是还会把这条路由发送给RR。 然后RR就有了两条去往5.5.5.5/32的路由,一条是R1,一条是R2过来的,其中R2的为best。

那么为了让R3不止收到RR反射给它的最佳best路由,还要能收到次优的,也就是下一条是R1的路由,RR和R3做如下配置:

rr#sh run | b r b
router bgp 64512
  bgp log-neighbor-changes
  no bgp default ipv4-unicast
  neighbor 10.0.14.1 remote-as 64512
  neighbor 10.0.24.2 remote-as 64512
  neighbor 10.0.34.3 remote-as 64512
  !
  address-family ipv4
    bgp additional-paths select best 2
   neighbor 10.0.14.1 activate
   neighbor 10.0.14.1 route-reflector-client
   neighbor 10.0.24.2 activate
   neighbor 10.0.24.2 route-reflector-client
   neighbor 10.0.34.3 activate
   neighbor 10.0.34.3 route-reflector-client
    neighbor 10.0.34.3 additional-paths send receive
  neighbor 10.0.34.3 advertise additional-paths best 2
  exit-address-family

r3#sh run | b r b
router bgp 64512
  bgp log-neighbor-changes
  no bgp default ipv4-unicast
  neighbor 10.0.34.4 remote-as 64512
  !
  address-family ipv4
   bgp additional-paths install
   neighbor 10.0.34.4 activate
    neighbor 10.0.34.4 additional-paths send receive
  exit-address-family

neighbor 10.0.34.4 additional-paths send receive 是用于BGP open capacity协商的。
capacity code请参考IANA http://www.iana.org/assignments/capability-codes/capability-codes.xhtml
(涉及到的capacity有两个,一个是69, ADD-PATH Capability, 一个是70, Enhanced Route Refresh Capability  http://tools.ietf.org/html/draft-keyur-bgp-enhanced-route-refresh-02 ) 相关的东西还没看
neighbor 10.0.34.3 advertise additional-paths best 2 是说 要给R3次优路由。

在RR上看:
BGP <wbr>additional <wbr>paths

可以看到有最优的下一跳是10.0.24.2也就是R2,次优的标示为"a"的,下一跳R1。a就是additional-path
R3是否可以收到这两条路由呢:
BGP <wbr>additional <wbr>paths

可以看到R3收到了两条,最优和次优。其中次优路由标示为"b",意为backup-path.

所以即使R2不可达路由被withdraw了,backup路由也会很快成为了best路由,转发流量。BGP的收敛速度肯定就明显加快了。

具体的详细机制,可以再看IETF的daft或者cisco的文档研究,因为过程不是写的这么简单的 BGP <wbr>additional <wbr>paths BGP <wbr>additional <wbr>paths
另外指出的一点,新版的wireshark(1.10.0)已经可以支持解析bgp add path的数据包了BGP <wbr>additional <wbr>paths
BGP <wbr>additional <wbr>paths

BGP <wbr>additional <wbr>paths

就贴这么多了。

你可能感兴趣的:(BGP additional paths)