BGP路由通告原则、防环机制、路由反射器

1,683 阅读5分钟

通告原则

  • BGP通过network、import-route等方式生成BGP路由后,通过Update报文将BGP路由传递给对等体
  • BGP通告遵循以下原则
    • 只发布最优且有效路由
    • 从EBGP对等体获取的路由,会发布给所有对等体
    • IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体
    • BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBPG路由),它将不能使用该路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF,静态路由等)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题
原则一 只发布最优且有效路由

image.png 通过display bgp routing-table命令查看BGP路由表,同时存在以下两个标志的路由为最优、有效:

  • “*”:代表有效
  • “>”:代表最优
原则二 从EBGP对等体获取的路由,会发布给所有对等体

image.png R2从EBGP对等体获取的BGP路由,会发布给所有EBGP、IBGP对等体

原则三 IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体

image.png

如图,如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体——R2将路由传递给R3,R3传递给R1,R1又传递给R2,会形成环路

原则四

image.png 如图:

  1. BGP路由器R4上存在一条路由BGP10.0.4.0/24,R4将其传递给R2
  2. R2将路由传递给非直连IBGP对等体R3
  3. R3将路由传递给R5
  4. 之后R5向10.0.4.4发起访问
  • R5查找路由表,将报文发送给R3
  • R3收到报文后查找路由表,匹配到一条BGP路由,下一跳为R2,但是R2为非直连下一跳,需要进行迭代查询,通过IGP学习到的R2的路由下一跳为R1,R3将此报文发送给R1
  • R1收到报文后查找路由表,因为R1并非BGP路由器,未与R2建立IBGP对等体关系,因此R1上并无BGP路由10.0.4.0/24,路由查找失败,R1将报文丢弃
解决水平分割的问题,可以用IBGP全互联和反射器

IBGP全互联缺点是:

  • 路由器需维护大量的TCP及BGP连接,尤其在路由器数量较多时
  • AS内BGP网络的可扩展性较差

image.png

反射器

image.png

  • 引入路由反射器之后存在两种角色:
    • RR(Route Reflector):路由反射器
    • Client:RR客户端
  • RR会将学习的路由反射出去,从而使得IBGP路由在AS内部传递无需建立IBGP全互联
  • 将一台BGP路由器指定为RR的同时,还需要指定其Client。至于Client本身,无需做任何配置,它并不知晓网络中存在RR
路由反射规则
如果路由反射器从自己的非客户对等体学习到一条IBGP路由,则它会将该路由反射给所有客户

image.png

如果路由反射器从自己的客户学习到一条IBGP路由,则它会将该路由反射给所有非客户,以及除了该客户之外的其他所有客户

image.png

如果路由学习自EBGP对等体,则发送给所有客户、非客户IBGP对等体

image.png

发送和反射的区别:发送指传统情况下(相当于RR不存在的场景下)的BGP路由传递行为,而反射指遵循路由反射规则的情况下,RR执行的路由传递动作,被反射出去的路由会被RR插入特殊的路径属性;路由器收到反射的路由的下一跳还是指向始发路由的路由器

RR场景下的路由防环

image.png

  • RR的设定使得IBGP水平分割原则失效,就可能导致环路产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路:
    • Originator_ID
    • Cluster_List
  • 这两个属性都属于可选过渡类型
Originator_ID属性
  • RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID属性,其值为本地AS中通告该路由的BGP路由器Router ID
  • 若AS内存在多个RR,则Originator_ID属性由第一个RR创建,并且不被后续的RR所更改
  • 当BGP路由器收到一条携带Originator_ID属性的IBGP路由,并且Originator_ID属性值与自身的Router ID相同,则它会忽略关于该条路由的更新

image.png R3收到来自R2的BGP路由10.0.2.0/24,在反射给R1时会添加上Originator_ID:10.0.2.2,R1收到之后再次反射给其客户端R2时携带Originator_ID,R2收到之后查看Originator_ID属性值存在自身的Router ID,则忽略该路由更新

Cluster_List属性

image.png

  • 路由反射族包括反射器RR及其Client。一个AS内允许存在多个路由反射族
  • 每一个族都有唯一的族ID(Cluster_ID,缺省时为RR的BGP Router ID)
  • 当一条路由被反射器反射后,该RR(该族)的Cluster_ID就会被添加至路由的Cluster_list属性中
  • 当RR收到一条携带Cluster_list属性的BGP路由,且该属性值中包含该族的Cluster_ID时,RR认为该条路由存在环路,因此将忽略广宇该条路由的更新

image.png

  • R2发送给R1的路由,经过R1反射给R3时除了添加Originator_ID之外还会添加Cluster_List属性:10.0.1.1,R3再次反射给R4时,Cluster_List为:10.0.3.3 10.0.1.1,R4反射给R1时Cluster_List为:10.0.4.4 10.0.3.3 10.0.1.1
  • 当R4将路由反射给R1时,R1发现Cluster_List包含了自身Cluster_ID,判断存在环路,从而忽略该路由更新