BGP 通告原则:
① 仅将自己最优的路由发布给邻居 (> 最优)
② 通过EBGP邻居获得的最优路由可以发布给所有的BGP邻居
③ 通过IBGP邻居获得的路由不会发布给IBGP邻居(防止IBGP路由环路)
④ BGP和IGP同步(华为默认关闭该特性)
⑤ 默认从EBGP邻居学到的BGP路由的下一跳是EBGP对等体的IP地址,当该路由向AS内部传递至时,路由传递给IBGP邻居时下一跳地址(next-hop)不变(还是上一个AS的接口地址),此时有可能会引发下一跳不可达
选路属性优先级
BGP的Update报文
BGP通过Network和Import两种方式生成BGP路由,BGP路由封装在Update报文中通告给邻居。BGP在邻居关系建立后才开始通告路由信息。
Update消息主要用来公布可用路由和撤销路由,Update中包含以下信息:
①网络层可达信息(NLRI):用来公布IP前缀和前缀长度。
②路径属性:为BGP提供环路检测,控制路由优选。
③撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度。
在通告BGP路由时,由于各种因素的影响,为了避免路由通告过程中出现问题,BGP路由通告需要遵守一定的规则。
接下来进行一一介绍:
一、仅将自己最优的路由发布给邻居
在RTD的BGP路由表中可以看到,RTD去往100.0.0.0/24网段有两条路,但是只会选择一条路走,然后通过BGP传递给RTE之后,在RTE的BGP路由表中可以看到,只有把最优的一条路由传递给了RTE,而不是两条。(*表示可用,>表示最优)
二、通过EBGP邻居获得的最优路由发布给所有的BGP邻居
如图,现在在AS100中,有个100.0.0.0/24的网段,现在通过BGP传递给了RTB,然后RTB就会传递给自己所有的BGP邻居,包括IBGP和EBGP邻居。RTD和RTC中的BGP路由表中都有相应100.0.0.0/24网段的信息。
三、通过IBGP获得的最优路由不会发布给其它的IBGP邻居(也称作水平分割原则)
**简单理解就是只能往后传一跳。**下面进行分析原因:
现在RTA左边有个100.0.0.0/24的网段,于是会传递给RTB和RTC,那RTB会不会传递给RTC呢?
如果传递给了RTB传递给了RTC,那么在RTC的BGP表仍然只会产生一条最优的路由,从B走的那条路由作为备用路由,现在如果A相连的这个100.0.0.0/24网段出现故障,那么C就会把消息发往B,于是就会产生问题。
四、BGP与IGP同步
简单说就是BGP说要传递的信息,在IP路由表中必须有才行。
下面进行情景分析:
RTA上存在一个100.0.0.0/24的用户网段,通过EBGP发布给RTB。RTB与RTD建立了IBGP邻居关系,RTD通过IBGP学习到该BGP路由,并将该路由发布给EBGP邻居RTE。当RTE访问100.0.0.0/24的路由时,查找路由表,发现到达100.0.0.0/24路由的下一跳是RTD,RTE查找出接口后,将数据包发送给RTD;RTD进行查找路由表,发现到达100.0.0.0/24路由的下一跳是RTB,出接口是RTD上与RTC相连的接口,于是将数据包发给RTC,RTC查找路由表,发现路由表中没有到达100.0.0.0/24的路由,于是将数据丢弃,形成“路由黑洞”。
BGP的通告原则:一条从IBGP邻居学来的路由在发布给一个BGP邻居之前,通过IGP必须知道该路由,即BGP与IGP同步。
RTD在收到RTB发来的IBGP路由之后,如果要发布给BGP邻居RTE,则在发布之前先检查IGP协议(即OSPF协议)能否学到该条路由。如果能,则将IBGP路由发布给RTE。
在华为路由器上,默认是将BGP与IGP的同步检查关闭的,原因是为了实现IBGP路由的正常通告。但关闭了BGP与IGP的同步检查后会出现“路由黑洞”的问题。因此,有两种解决方案解决上述问题:
i:将BGP路由引入到GP,从而保证IGP与BGP的同步。但是,因为internet上的BGP路由数量十分庞大,一旦引入到GP,会给(GP路由器带来巨大的处理和存储负担,如果路由器负担过重,则可能瘫痪。
ii:IBGP路由器必须是全互联,确保所有的路由器都能学习到通告的路由。这样可以解决关闭同步后导致的“路由黑洞”问题。
BGP路由信息处理
①当从BGP邻居接收到Update报文时,路由器会进行执行路径选择算法,来为每一条前缀确定最佳路径。
②得出的最佳路径会被存储到本地的BGP路由表(Local_RIB)中,然后提交给本地的IP路由表(IP_RIB),以用作安装考虑。
并不是一定会加入到IP路由表中,因为还会通过别的方式进行学习到路由信息,EBGP跟IBGP优先级都是255,最靠后的。
③被选出的有效的最佳路由将被封装在Update报文之中,发送给对端的BGP邻居。
BGP 路由选路原则13条:
1 丢弃下一跳不可达的路由
2 优选Preference_Value值(首选值)最高的路由(私有,本地有效)
Preference_Value值(首选值):本地有效(不传给邻居),默认值0,越大越优先
3 优选本地优先级(Local_Pre)最高的路由
Local_preference 本地优先级:默认值 100 ,越大越优先,IBGP邻居之间有效,只能在本AS内传播
local_pre为空原因:(公认任意属性),由于Local_Pre属性仅在IBGP邻居之间有效,
因此从EBGP邻居收到的update报文不携带local_pre 值。因此从ebgp邻居收到的路由的local_pre 值是空。
4 优选手动聚合>自动聚合>network>import>从对等体学到
5 优选AS_Path短的路由
AS_Path :经过的AS越少越优先,可以用于IBGP和EBGP邻居
6 起源类型Original : I>E>?
起源类型Original : I>E>? ,公认必遵属性,该属性可以跨AS传递
7 对于来自同一AS的路由,优选MED值小的。**
MED:Multi-Exit-Discriminator 默认值是0 越小越优先 类似IGP度量值
该属性仅在相邻两个AS直间传递 用于判断流量进入AS时的最佳路由
注意:将igp引入bgp时 igp路由的开销会自动移植到MED。
MED值为空原因:(可选 非过渡属性),在向EBGP邻居发送update更新时默认不携带MED属性,
除非手动配置路由策略(route-policy)才会携带
8 优选从EBGP学来的路由(EBGP>IBGP)
9 优选AS内部IGP的Metric最小的路由(到达下一跳的IGP 开销)
----可以开启负载分担----(bgp路由表不体现 路由会显示)
10 优选Cluster_List (RR反射器:RR的router id)最短的路由(经过RR的数量少)
11 优选Orginator_ID (RR反射器:路由起源router id )最小的路由(路由进入某AS时,起始路由器router id)
12 优选Router_ID最小的路由器发布的路由
13 优选具有较小IP地址的邻居学来的路由
注意:当属性为空时可以看成该属性所对应的默认值。