今生所愿,则是看一场姹紫嫣红的春光,读一卷赏心悦目的诗词,做一个洗尽铅华的女子。愿所有世人,放下执念,清白一世。愿与草木,随遇而安。

一、BGP路由表的形成

  1、通过network命令

在BGP的address-family下使用network命令发布本设备上IGP路由表中的路由,network发布路由不一定是直连路由,只要本地路由表中有此路由非(BGP路由)即可发布。

发布命令:network x.x.x.x mask x.x.x.x

2、通过重分发IGP路由

在BGP的BGP视图或者BGP-VPN实例视图import-route protocol [ { process-id | all-processes} [ allow-direct | med med-value| route-policy route-policy-name ] * ]

将IGP路由协议的路由信息引入到BGP路由表中。此方式可以根据IGP路由表的变化而发布不同路由条目,可以理解为是一种“动态BGP路由“方式。

注意事项:使用network发布路由,要首先查看路由表。network发布的路由要求前缀和掩码--对应才会被发布。不建议直接重分发直连路由。

二、BGP路由表的查看和路由有效标记

总结:

1、BGP只负责路由传递,不负责全网收敛。

2、BGP路由表中只显示传递和接受的路由,并不一定是有效路由。

3、只有有效路由才会加载到IGP路由表中,路由器最终的通信与否只与IGP路由表有关。

三、BGP路由的三个公认强制属性

BGP传递的路由都存在三个公认强制属性

Original(起源者)

Next-hop(下一跳地址)

As-Path(AS路径)

Original ·标记一条路由是如何成为BGP路由的(即network发布或者Redistribue重分发)

Next-hop ·到达目标网络的下一跳地址,不一定是直连邻居地址,只要在IGP路由中下一跳可达也可以

As-path ·BGP路由到达目的地所经过的所有AS号码的集合(在EBGP之间用于防环功能,ibgp路由不携带)

下一跳属性(Next-Hop)

  ·到达目标网络的下一跳地址,不一定是直连邻居地址,只要在IGP路由中下一跳可达也可以

  ·如果下一跳地址不与当前路由器直连,则BGP在将数据包发往下一跳时,通常需要采用递归查询在IGP路由表中查询该下一跳地址

  ·一台BGP路由器将路由传递给EBGP邻居时,会将Next-hop属性改为自己的地址,也就是和对方建立邻居所使用的地址,而在将路由传递给IBGP邻居时,不会改变Next-hop属性

通常会针对iBGP邻居都会使用next-hop-self修改下一跳地址

Original(起源属性)

 · 使用network发布的路由,起源属性为:i

 · 重分发到BGP中的路由,起源属性为:?

AS_PATH属性

 · AS_Path中包含了BGP路由器到达目的地所经过的所有AS号码的集合

 · AS_Path中会包含了多个AS号码,号码的多少,逻辑上反映了到达目的地的远近。

四、路由黑洞与BGP同步

a、EBGP邻居传来的路由可以通过AS_PATH防环,所以收到的不会有问题,因此直接是>,直接装表、再传给EBGP邻居或IBGP邻居。

b、IBGP邻居传来的路由由于是在同一个AS,所以没法通过AS_PATH防环,于是BGP规定IBGP只能传一跳。

c、BGP还有两个问题。问题一:BGP规定从EBGP学到的路由,传给IBGP邻居,不改变下一跳。这样通常对AS内部路由器来说,这个下一跳不可达。问题二:由于水平分割,IBGP邻居只能传一跳,所以设想把两个IBGP建立在网络边缘,中间的路由器就成了黑洞。(所以只有解决这二个问题后IBGP传来的路由才是优化的)

  假设图中A宣告一条路由dest,传给B,B直接是优化的,正常装表并传给E。问题一就是E收到这条dest路由时,下一跳是A的地址,这地址是AS外的地址通常是不可达的。问题二就是中间的C和D并不知道这条dest路由。(再强调下,EBGP传来的直接就是优化的,能够直接装表并往下传)

 

 

bgp路由表 Originator_bgp路由表 Originator

 

 

问题一的解决办法:把下一跳改成自己;或者写一跳关于下一跳的静态路由,使得下一跳可达。

问题二的解决办法:将BGP路由重发布到IGP中,使得该AS都知道A路由器的路由。这个重分发只能在B上做,因为B关于A的路由是优化的,E路由器是非优化的。另为,针对问题二,BGP还制定了一个同步规则,即打开了同步,则当BGP路由器从IBGP邻居收到的路由时,必须同时从IGP路由表也能学习到,才能最优路由,才来继续传给EBGP邻居,其实就是防止路由黑洞。注意BGP同步仅针对从IBGP邻居收到的路由,从而EBGP邻居收到的路由可以直接最优装表。  启用同步机制,执行重分发后可能会造成IGP内部的路由器不堪重负,因为C和D可能后面还接了很多路由器。

d、总结IBGP路由层面打通方法:下一跳可达+开同步+BGP重分发进IGP;下一跳可达+关同步。(即IBGP邻居传来的路由优化条件)

e、总结IBGP数据层面打通方法:下一跳可达+开同步+BGP重分发进IGP;下一跳可达+关同步+ALL RUN and Fullmesh/MPLS。

1、防环

 EBGP的水平分割:AS之间的防环,路由器不收带有自己AS号的路由更新。(控制层面)

 IBGP的水平分割:从IBGP收到的路由不会通过给另一个IBGP(控制层面)

 RR的防环:RR打破了IBGP只传一跳的规则,所以需要通过cluster-id防环

2、黑洞

 由于防环机制的存在,BGP中间途径的路由器不会获知外部的路由。

黑洞举例:假设(A)-EBGP-(B-C-E)-EBGP-(F),B和E建立IBGP,此时A ping F不会通,因为A查去往F得仍给B,B查去往F需要扔给E(假设E开了nexthopself),递归查找经过C/D去E,但包到了C/D后就丢弃了,因为C/D没有路由去往F。

bgp路由表 Originator_递归_02

1)AS65101中的路由条目传到AS65103              
     EBGP:AB,EF。  IBGP:BE         
     控制层面:ABEF         
     数据层面:FE,到D和C会被丢弃      

2)解决方法              

     物理线路full mesh(关同步):不会用,代价贵,都直连了有路由         

     逻辑线路full mesh(关同步):全连接,所有路由器运行BGP并运行BGP,即BCDE全部建立BGP邻居关系(无需直连),可以用RR,联盟         

     重发布(开同步):将BGP重发布到IGP,只能实验环境做,实际中要想这么做只能通过ACL导一部分         

     MPLS(关同步):BGP内部通过标签走,不通过路由走,实际上就是利用了CEF解决递归查找的功能         

3)BGP路由黑洞,C和D能传BE之间的路由,但是不能传数据,这是因为:              

     控制层面源目的在变,分为三段(源A到目的B,源B到目的E,源E到目的F,每一段都有路由),通过TCP传路由。         

     数据层面源目的不变,源F目的A,中间C和D没有路由    

 

3、同步

     BGP的同步:为了确保宣告出去的路由都不会有黑洞问题,开启同步后,BGP只会将IGP和BGP同步后(通过重发布)的路由宣告出去,即宣告的路由不可能有黑洞。

 

4、全互联

要所有路由器都能更新路由,所有经过路由器运行BGP并且full mesh,full mesh只需路由可达,无需直连。不是全互联,可能导致两个问题:1,更新发不过去,例如防环中的那个例子。2,更新发过去了,但数据包过不去,例如黑洞例子。