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邻居。