突然发现上个月release的最新版wireshark(1.10)已经全面支持BGP add path数据包的解析了
.于是就把之前做的一个小实验贴了出来。就是简单测了下CISCO路由器的一个稍微新一点的feature,叫BGP add path,目前还是个IETF的draf,最新的是http://tools.ietf.org/html/draft-ietf-idr-add-paths-08 ,但是这个draf貌似刚过期了
。
拓扑和上一次的基本一样。
(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上看:
可以看到有最优的下一跳是10.0.24.2也就是R2,次优的标示为"a"的,下一跳R1。a就是additional-path
R3是否可以收到这两条路由呢:
可以看到R3收到了两条,最优和次优。其中次优路由标示为"b",意为backup-path.
所以即使R2不可达路由被withdraw了,backup路由也会很快成为了best路由,转发流量。BGP的收敛速度肯定就明显加快了。
具体的详细机制,可以再看IETF的daft或者cisco的文档研究,因为过程不是写的这么简单的
。
另外指出的一点,新版的wireshark(1.10.0)已经可以支持解析bgp add path的数据包了
就贴这么多了。