BGP 十一条选路原则与BGP路由传递的注意事项介绍
十一条选路规则
1.优选Preferred-Value 属性值最大的路由。
2.优选Local_Preference 属性值最大的路由。
3.本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的。
即本地产生的BGP路由更优先,而本地的路由又分为普通路由与聚合路由,其中聚合路由更优先。
4.优选AS_Path属性值最短的路由。
5.优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete。
6.优选MED属性值最小的路由。
7.优选从EBGP对等体学来的路由(EBGP路由优先级高于IBGP路由)。
指学习到两条相同目的路由时,一条为IBGP路由,一条为EBGP路由,将优先选择EBGP路由。
8.优选到Next_Hop的IGP度量值最小的路由。
9.优选Cluster_List最短的路由。
经过反射簇次数最少的路由条目。
10.优选Router ID(Originator_ID)最小的设备通告的路由。
指学习到两条相同目的路由,其它属性一致,但通告的router-id(或反射后的路由Originator ID)不一致时,优先选择地址最小的通告者路由。
11.优选具有最小IP地址的对等体通告的路由。
选路规则口诀
1、在BGP路由选择中,如果存在多条路由的前8条规则相同,那么这些路由将会进行负载分担。
前8条相同路由会负载分担,但默认负载分担的条目只有1条,故只看到一个下一跳。
需要存在多个下一跳,需要在BGP模式中输入:
[实现IBGP路由负载分担]
maximum load-balancing ibgp 2
[实现EBGP路由负载分担]
maximum load-balancing 2
虽然说前8条相同则在IBGP内负载,但对外EBGP不可能说存在两条相同的路由,故需要后3条进行选举出最优的路由传递给EBGP。
2、为了方便记忆这些规则可记忆该口诀:漂亮老男人(PL LAO MEN)
P= preferred-value协议首选值
L= Local_Preference本地优先级
L= Local,本地始发路由的更优先
A= AS_Path
O= Origin起源
M= Med值
E= EBGP对等体优先于IBGP
N= Next_Hop下一跳最小
BGP路由传递注意事项
1、建立邻居时,需要确保TCP可达
如何定义TCP可达?
两端都有对方的路由,中间设备无TCP过滤(TCP/179)
2、路由传递时,从IBGP邻居学习到的路由不会传递给IBGP邻居(水平分割机制,用来防止环路产生)
3、路由传递时,从EBGP邻居学习到的路由可以传递给其它EBGP邻居,也可以传递给IBGP邻居,但传递给IBGP邻居时,下一跳不变。
BGP在传递路由时,从EBGP邻居学习到的路由,发布给IBGP邻居时,下一跳不变。
【十大路径属性中Next_Hop缺省值定义提到】
为了解决EBGP下一跳不变,通过命令:
peer 邻居 next-hop-local
有下一跳改变,也有下一跳不改变:
peer 邻居 next-hop-invariable
4、在建立IBGP邻居时建议使用Loop环回口建立,保证网络的冗余性、可靠性。
避免使用物理接口建立邻居时,链路坏了还需要重新配置。
使用环回口建立邻居,如果一边不指定源环回口,一边指定源,结果还是会正常进行建立邻居的。
因为BGP只要建立起了一个TCP连接就能够建立起BGP邻居并传递路由。
在ENSP中,BGP建立双向邻居时,会产生两个TCP连接,但最终只会保留router-id大的一方发起的TCP连接。
但在实际环境中,BGP建立邻居产生的两个TCP连接,只会保留最后建立的TCP连接。
关于BGP的TCP连接数量个人见解
以IBGP使用环回口建立为例,如果双方路由器都相互指定环回口建立,那么在这个BGP对等关系中将会产生两条TCP连接。虽然最后会自动删除掉一条TCP连接,但这个过程还是消耗了设备与链路的一定资源。
当网络存在多个邻居,重复如此建立两条TCP连接,又删除一条连接的动作,对设备的负担和链路的负担是直线上升的。
为此,IBGP在使用环回口建立邻居时,进行单向的指定即可。
这样只会建立一条TCP连接,同时也能正常的进行传递路由。
5、在建立EBGP邻居时一般使用直连接口建立,因为EBGP邻居建立时考虑到安全问题,默认数据包的TTL为1,只有直连链路会接收并处理该数据包,非直连链路不会处理该数据包(TTL归0)。
如果通过环回口建立EBGP邻居,首先保证两台设备之间的环回口TCP可达,其次需要更改EBGP默认的TTL,才能让EBGP邻居之间通过环回口建立邻居关系。
1、EBGP邻居建立关系时,使用环回口建立:
peer 1.1.1.1 connect-interface loopback0
2、设置TTL最大跳数:
peer 1.1.1.1 ebgp-max-hop 100
6、运行BGP的设备,默认情况下同一条路由有多个下一跳时,只会将BGP路由表中最优且有效的路由,将进路由表中(即BGP路由条目左侧有*>)。
若该路由条目没有*也没有>,表示该路由条目并非最优的、非有有效的,自身不计算该路由同时也不会传递给其它邻居。(BGP只传递最优路由,只计算有效路由)
7、BGP的同步机制
同步机制,指路由器学习到一条IBGP路由时,默认不能将该路由通告给其它BGP对等体。
除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条IBGP路由,也就是要求IBGP路由与IGP路由同步时才能将进行传递给其它BGP邻居。
同步规则主要用于规避BGP路由黑洞问题。
原因:我学习到该IBGP路由,我并不一定知道去往该路由的下一跳(学习到的IBGP路由并不一定有效)故不会使用且不会通告给其它IBGP邻居,如果我配置的IGP知道路由下一跳的话,我才就能使用和通告该路由。
扩展:华为设备默认禁止BGP路由同步机制,故学习到的IBGP路由可以传递给其它邻居。即使说该IBGP的下一跳不可达,也会进行传递出去。
关于BGP的一些疑惑记录
1、IBGP进行跨设备建立时,会产生BGP路由黑洞,那么如何解决BGP路由黑洞呢?
1、建立BGP全互联,BGP两两建立,但手动建立的命令数量过大。
2、配置BGP反射器,大减少命令配置。会打破原先的水平分割机制,但也引入其它防环机制(cluster-list、Originator ID)。
3、还有后面会介绍到的MPLS标签交换
2、跨设备配置BGP的好处?
减轻中间网络设备的负担
3、为什么说BGP一般传业务路由,不会传递邻居的链路信息?
假设两个EBGP邻居通过环回口建立建立邻居,必然需要提前配置去往对端环回口的静态路由(优先级60)。
那么EBGP中发布环回口的话,EBGP路由优先级为255,很明显没有静态路由的优先,故BGP一般传业务不传建立邻居路由信息。
IGBP建立发布也是一样的,底层的IGP路由肯定比IBGP的路由优先级高。