在IGP时代我们都知道,比如说ospf,链路状态协议,在进行路由选择的时候,比的是链路的耗费,哪条链路耗费小则会更优先,如果两个链路耗费是一样的,那么就做负载均衡。
实际上就2个原则成就了ospf---最短路径优先的工作原理。
那如果在BGP中,有多条路由可以到达目的的时候,应当如何进行选择呢?哪一条路径是比较优先的呢?
来看看这11个属性的优先级,加深记忆,最好能熟练的背下来:
1 HIGHEST WEIGHT--cisco私有属性
2 HIGHEST LOCAL PRERENCE -----公认可选
3 ROUTE ORIGINATED BY THE ROUTER NEXT HOP=0.0.0.0 * -----公认必尊well-known mandatory
4 SHORTEST AS PATH * -----公认必尊well-known mandatory
5 LOWEST ORIGINATED IGP>EGP>INCOMPLETE * -----公认必尊well-known mandatory
6 LOWEST MED
7 EBGP PATH OVER IBGP PATH
8 PREFER THE PATH THROGH THE CLOSEST IGP NEIGHBOR
9 RREFER OLDEST ROUTER FOR EBGP PATH
10 PREFER THE PATH WITH THE LOWEST NEIGHBOR BGP ROUTER ID
11 BGP LOWEST ROUTER ID
12 MINIMUM CLASTER LIST LENGTH
在bgp中,除了有一大堆原理需要深刻理解以外,选路原则是重中之重。一定需要掌握(要想对bgp有所认识和故障排查,这里一定是要掌握而不是了解)选路原则。
该文档会逐一对每个属性进行验证.力求能达到让我自己在心里有数对这些概念。
再来看看BGP的选路原则:
1、 优先选取具有最大权重(weight)值的路径,权重是Cisco专有属性。
2、 如果权重值相同,优先选取具有最高本地优先级的路由。
3、 如果本地优先级相同,优先选取本地路由(下一跳为0.0.0.0)上的BGP路由。
4、 如果本地优先级相同,并且没有源自本路由器的路由,优先选取具有最短AS路径的路由。
5、 如果具有相同的AS路径长度,优先选取具有最低源代码(IBGP<EBGP<INCOMPLETE)的路由。
6、 如果起源代码相同,优先选取具有最低MED值的路径。
7、 如果MED都相同,在EBGP路由和联盟EBGP路由中,首选EBGP路由,在联盟EBGP路由和IBGP路由中,首选联盟EBGP路由。
8、 如果前面所有属性都相同,优先选取离IGP邻居最近的路径。
9、 如果内部路径也相同,优先选取最低BGP路由器ID的路径。
Next-hop 属性详解:
我查了房至勇IE笔记,还有中文版的TCP/IP路由技术(卷二),还有一些cisco的培训PPT.在这些资料上,提到了三个原则关于Next-hop的。在本文档中会一一覆盖。但是,我个人认为,既然是选录原则,就一定要进行比较,而这些所有资料中提到的都是工作原则,那么我的疑问是,如果weight还有Local_Pref都是默认的情况,第三条比较Next-HOP该如何比较?在井同学的帮助下,找到了英文版中的描述,才解开了这个谜团。应该说之前我查的哪些资料都没有问题,可是都少些了一个关键的东西,如果比较Next-hop这个问题,什么才叫:如果本地优先级相同,优先选取本地路由(下一跳为0.0.0.0)上的BGP路由。
Prefer the path that was locally originated through a network or aggregate BGP subcommand, or through redistribution from an IGP. Local paths sourced by network/redistribute commands are preferred over local aggregates sourced by the aggregate-address command.
首先还是来说一下Next-HOP的三个工作原则:
原则一:
如果宣告路由器与接收路由器的位置位于不同的AS,那么Next-Hop是宣告路由的接口地址。
在TCP/IP卷二上面,是这样表示的。
这个和IGP一样的。没有什么好说的,如果BGP的update消息通过EBGP进行宣告,那么Next-hop属性将是Ebgp的IP地址.
普通的IGP是router by router的,而BGP是AS by AS的。
所以当两个EBGP在通告路由的时候,达到的效果就是和IGP一样的效果。因为两个路由器相互是EBGP,都是ASBR.
所以下一跳刚好是另外一个区域的EBGP邻居地址。
原则二:
如果正在宣告的路由器和接收路由器在同一个AS内,并且UPdate消息中的路由前缀NLRI目的也是在同一个AS 中,则next_hop为宣告路由器的IP地址.
其实在这个图中,当最后一个路由收到了第一个路由器传递过来的IBGP路由172.16.5.0的时候,所携带的下一跳是172.16.83.2.
对于最后一个路由器来说,如果要到达172.16.5.0的网段,首先要有IGP路由能到172.16.83.2,进行路由的递归查找,最后才能到达目的网段。
所以为什么说BGP实际上查找路由表的时候是进行递归查找的。
原则三:
如果宣告路由器和接收路由器是不同AS的路由器,那么所学到的路由的下一跳始终是宣告路由器的接口IP地址。
直接上图:
在这里如果想路由器172.16.101.2学到的路由207.135.64.0的路由,下一跳是ASBR 172.16.83.2,那么必须在ASBR 172.16.83.2上面的bgp进程下面:neighbor 172.16.101.2 next-hop-self.
这样下一跳才会真正变成IBGP邻居。
我们先用命令验证一下最后这个原则,然后再说关于Next-hop的比较原则:
在这里,R1上面bgp的配置为:
在R4上面,把这条nex-hop-self取消:
根据这个图,我们知道R1和R4都会将100.100.100.100通告给R3.
那么R3会从两个IBGP邻居都接收到同一个路由.
但是在R1上面next-hop-self,在R4上面却没有。这里我们就可以来验证一下关于原则三了,在R3上面:
在R3上面show ip bgp的时候,100.100.100.100有两个下一跳,一个下一跳是1.1.1.1。R1,一个是13.1.1.1已经是R2了。
因为在R3上面没有到13.1.1.1的IGP TCP可达的路由,所以只会是1.1.1.1会优.
这个就是原则三,从IBGP传递过来的EBGP路由是不会改变下一跳的。需要用命令neigbor x.x.x.x next-hop-self修改下一跳。
在CISCO的培训PPT上面只讲解了2个Next-hop的工作原则,还是没有说明清楚比较原则:
下面就来看看今天的重头戏,如果,weight相同,local_pref相同,那么如果比较Next-HOP.
这就是比较原则。从概念上来讲:
1、 优先选取具有最大权重(weight)值的路径,权重是Cisco专有属性。默认始发是32768,其他任何路由器的该属性都是0.越大越优先.
2、 如果权重值相同,优先选取具有最高本地优先级的路由。Local_pref的本地优先级默认是100.越大越优先。
3、 如果本地优先级相同,优先选取本地路由(下一跳为0.0.0.0)上的BGP路由。
首先构建一个环境:
我们首先一步一步来看看如果来验证BGP的next-HOP属性,在图中,会有两个不同的loopback配置相同的网段,R1通过ospf将100.100.100.1的网段路由通告给R2,R2是一个ASBR,然后起bgp 65500,在bgp65500下面network 100.100.100.0/24给R3,R3上面会再起一个loopback0,地址为100.100.100.2/24,然后也network到bgp 65500下面,最后R3实际上通过自己的network学习到下一跳是0.0.0.0的100.100.100.0的网段,也通过R2通告过来的bgp路由学习到100.100.100.0/24的网段,如果在weight和local_pref都一样的情况,那么下一跳是0.0.0.0会优.
这里一定要注意,R2通告过来的关于100.100.100.0的路由的weight一定要是32768,因为如果在R3上面起一个loopback0=100.100.100.2的话,那么作为始发路由器他这条路由的weight默认就是32768.如果通告过来的路由weight是0,那还没有轮到比较next-hop就直接根据weight进行选举了。这页是为什么需要在R2上面做一个出站策略来通告路由的原因。
我们先来看看结果,配置会附在后面,下面是在R3上面的结果:
原始配置:
R1配置:
interface Loopback0
ip address 100.100.100.1 255.255.255.0
ip ospf network point-to-point
!
interface FastEthernet0/0
ip address 1.1.1.1 255.255.255.0
duplex full
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
ip route 2.1.1.0 255.255.255.0 1.1.1.2
R2配置:
interface FastEthernet0/0
ip address 1.1.1.2 255.255.255.0
duplex full
!
interface FastEthernet1/0
ip address 2.1.1.1 255.255.255.0
duplex full
speed auto
!
router ospf 1
log-adjacency-changes
network 1.1.1.0 0.0.0.255 area 0
!
router bgp 65500
no synchronization
bgp log-neighbor-changes
network 100.100.100.0 mask 255.255.255.0
neighbor 2.1.1.2 remote-as 65500
neighbor 2.1.1.2 next-hop-self
no auto-summary
!
R3配置:
在R3上面一定要将从R2学习到的bgp路由的weight设置为32768.否则还没有到比较Next-HOP的时候就会根据weight来进行选路了。
interface Loopback0
ip address 100.100.100.2 255.255.255.0
!
interface FastEthernet1/0
ip address 2.1.1.2 255.255.255.0
duplex full
speed auto
!
router bgp 65500
no synchronization
bgp log-neighbor-changes
network 100.100.100.0 mask 255.255.255.0
neighbor 2.1.1.1 remote-as 65500
neighbor 2.1.1.1 route-map set_weight in
no auto-summary
!
access-list 1 permit any
!
route-map set_weight permit 10
match ip address 1
set weight 32768
!
route-map set_weight permit 20
本文转自 hny2000 51CTO博客,原文链接:http://blog.51cto.com/361531/702712