1)当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID.
2)当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP 路由器会忽略掉这条路由,不做处理。
1)当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个。
2)当RR接收到一条更新路由时,RR会检查Cluster_List.如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由。
配置如下:
IGP配置略,见前篇博文
R1:
router bgp 65000
no synchronization
//关闭同步
neighbor 10.0.0.3 remote-as 65000
/指定
I
BGP邻居和AS
neighbor 10.0.0.3 update-source Loopback0
//指定更新源为LOOPBACK 0
neighbor 10.0.0.3 next-hop-self
//把下跳改为自己(EBGP默认)
neighbor 10.0.0.4 remote-as 65000
neighbor 10.0.0.4 update-source Loopback0
neighbor 10.0.0.4 next-hop-self
neighbor 10.0.15.2 remote-as 65001 //指定EBGP邻居和AS
no auto-summary
//关闭自动汇总
R2:
router bgp 65000
no synchronization
neighbor 10.0.0.4 remote-as 65000
neighbor 10.0.0.4 update-source Loopback0
neighbor 10.0.0.4 next-hop-self
neighbor 10.0.0.3 remote-as 65000
neighbor 10.0.0.3 update-source Loopback0
neighbor 10.0.0.3 next-hop-self
neighbor 10.0.26.2 remote-as 65002
no auto-summary
R3:
router bgp 65000
no synchronization
neighbor 10.0.0.1 remote-as 65000
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.1 next-hop-self
neighbor 10.0.0.1 route-reflector-client
//只需在RR上指定客户端
neighbor 10.0.0.4 remote-as 65000
neighbor 10.0.0.4 update-source Loopback0
neighbor 10.0.0.4 next-hop-self
neighbor 10.0.0.2 remote-as 65000
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 next-hop-self
neighbor 10.0.0.2 route-reflector-client
//只需在RR上指定客户端
network 10.0.0.0 mask 255.255.0.0
/静态发布路由到BGP
no auto-summary
ip route 10.0.0.0 255.255.0.0 null 0
//添加一条静态汇总路由,用来发布
R4:
router bgp 65000
no synchronization
neighbor 10.0.0.1 remote-as 65000
neighbor 10.0.0.1 update-source Loopback0
neighbor 10.0.0.1 next-hop-self
neighbor 10.0.0.1 route-reflector-client
//只需在RR上指定客户端
neighbor 10.0.0.3 remote-as 65000
neighbor 10.0.0.3 update-source Loopback0
neighbor 10.0.0.3 next-hop-self
neighbor 10.0.0.2 remote-as 65000
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 next-hop-self
neighbor 10.0.0.2 route-reflector-client
network 10.3.0.0 mask 255.255.0.0
/静态发布路由到BGP
no auto-summary //关闭自动汇总
ip route 10.3.0.0 255.255.0.0 null 0
//添加一条静态汇总路由,用来发布
R5上测试一下:
分析一下R3的路由表:
从这两条可以看出一条有起源ID一条没有,起源ID只有经过RR么射后才会有,如上面的路由经R2再通告给R4,R4从客户端学习到的路由再反射给客户端和非客户端(R3),起源ID为AS内始发路由器router-id R2 10.0.0.2 ,簇列表为RR router-id R4 10.0.0.4
结合R3和R1的路由表,我们来分析下BGP最优路由的选择原则:
我们结合下路由选择原则(
选择原则见最下面
)可以看出前面10条都是相同的,在这都无法比较最优的,我在网上找了很久路由选择原则,都没有说得很清楚的或有的地方不准确,现在大家和我一起来验证下下面的选择原则是否正确,这也是本次博文的重点!
这两张路由表,前面十条无法选择最优路由,下面看十一条,网上很多地方说是比较ROUTER-ID小的为优,那我现在就修改R3的ROUTER-ID(就是重新指定ROUTER-ID,命令bgp router-id x.x.x.x),再看一下R1的路由表,
大家可以看到由R3通告过来的路由的ROUTER-ID变成10.10.10.10了吧,10.10.10.10比10.0.0.4要大吧,但是它还是最佳路由,显然比较ROUTER-ID是不正确的。那我们接着这12条,还是R3那张路由表,由R2通告过来的路由没有
Originator_ID
吧(因为没经过反射),
所以就用它的ROUTER-ID与另一个
Originator_ID
进行比较,相同则比较簇列表,由R2通过过来的路由没有簇列表,所以最优。再看R1的那张路由表(第三张图),
Originator_ID
和簇列表都相同吧,就比较邻居地址,显然10.0.0.3小于10.0.0.4,所以成为最优的(如果是比较ROUTER-ID的显示是第二条要优)
我们再来验证一下,把R3的邻居地址给改了(这里要重新建立BGP邻居了),再来看看,
大家可以看到这张图跟上面那张图唯一变的就是邻居地址吧20.20.20.20(上面是10.0.0.30),看到没有邻居小地址小的变成最优路由了(开始是在面最优,现在是下面这一条了) 大家在做实验中如果发现我的说法是错误的,一定要通知我哦!赶快去验证吧!
BGP最优路由选择原则总结:
1.丢弃下一条不可达的路由(这里的不可达是指全局路由表中没有下一条的路由,并不是说
不能PING通)
2.在同步状态下,丢弃没有达到同步的路由
3.选择
有最大Weight的路由 (范围0 到 65,535
,本地始发默认为
32768,weight是CISCO私有的参数,路由器配置了权重后在本地有效,即收到的为0
)
4.选择LOCAL_PREF值最大的路由(范围 0到 4,294,967,295,默认都为100).
5.选择本路由器始发的路由(包括network、重分布、及汇总)
6.选择AS_PATH最短的路由(同AS中的as_path为空,只有离开AS才会加上AS号)
7.选择Origin源头最小的路由(IGP>EGP>Incomplete)
8.选择MED 值最小的路由
9.外部路由EBGP优先于联盟(confederation)外部路由优于内部路由IBGP(优选 E-BGP路由)
10.选择下一跳IBGP开销最小的路由
1
1.选择Router-id最小的BGP邻居通告的路由(在配置了路由反射器时具有Originator_ID属性时,不看这一条)
12.选择Originator_ID小的路由(没有Originator_ID时,用Router-id和Originator_ID进行比较,哪个小哪个优)
13.当
Originator_ID
相同时(没有
Originator_ID
和Router-id相同时),选择
Cluster_List
最短的路由(如果没有
Cluster_List
则为最优)
14.选择邻居地址最小的BGP邻居通告过来的路由(BGP只会向外通告一条最优的路由,所以这里是不可能相同的)
BGP路由通告原则:
在BGP邻居建立的基础上,将BGP表中最优的路由使用Update报文通告给BGP邻居。
(1)多条路径时,BGP只选最优的给自己使用
(2)BGP只把最优的路由通告给它的邻居
(3)从EBGP学到的路由会通告给它所有的BGP邻居(包括EBGP和IBGP)
(4)从IBGP学到的路由不通告给其它的IBGP邻居(IBGP水平分割)
(5)从IBGP学到的路由是否通告给它的EBGP邻居视同步情况而定。(非同步状态下,会将从IBGP学到的路由通告给它的EBGP邻居;同步状态下,只将达到同步的路由通告给它的EBGP邻居)
(6)BGP是距离矢量路由协议,遵从水平分割原则:包括基于邻居的水平分割、基于AS_Path的水平分割。
基于邻居的水平分割:从BGP邻居学到的路由不通告给该BGP邻居
基于AS_Path的水平分割:向EBGP邻居通告路由时,在AS_Path属性中附加上自己的AS号;接收BGP邻居通告过来的路由时,丢弃AS_Path属性中含有自己AS号的路由。
(7)BGP邻居一建立,就将自己所有的最优路由通告给它的邻居。
(8)增量更新与路由撤销
1)BGP邻居状态Established,从邻居通告过来的路由有效,BGP只需通过KeepAlive来维持邻居关系,不需要进行路由定期更新;
2)BGP采用增量更新机制:当新发布某些路由时,BGP只将这些新发布的路由通告给邻居;当某些路由失效时,BGP只向邻居发送Withdrawn消息撤销这些路由。(Withdrawn消息:将失效的路由放在BGP Update报文的不可达路由字段中)
3)BGP邻居Down,从邻居通告过来的路由立即失效,从BGP表中清除这些路由,并向其他邻居发送路由撤销消息撤销这些路由。
(9)BGP路由的管理距离
Cisco:EBGP:20 IBGP:200本地始发:200
H3C/ Quidway:EBGP:256 IBGP:256本地始发:256
路由反射器通告原则见本文前面!