骨干网与WLAN

BGP通告原则

BGP通告原则

BGP传递给路由时需要遵循以下原则

  • 第一条原则:只发布最优且有效(即下一跳地址可达)的路由
  • 第二条原则:从EBGP邻居获取的路由,会发布给所有邻居
  • 第三条原则:从IBGP邻居获取的路由,不会再发送给其他IBGP邻居(IBGP水平分割)

IBGP水平分割

IBGP水平分割

BGP通告原则三

  • 从IBGP邻居学习到的BGP路由,不会再发送给其他IBGP邻居
  • 该条原则也被称为”IBGP水平分割”
  • IBGP水平分割的作用:防止AS内部路由环路

IBGP水平分割的不足

  • 导致域间路由无法传递

如何突破IBGP水平分割的限制

  • 静态路由
  • 在OSPF中引入BGP
  • IBGP全互联
  • 路由反射器

路由反射器

IBGP水平分割

IBGP水平分割

  • 作用:用于防止AS内部出现环路
  • 存在问题:BGP路由在AS内部无法传递
  • 解决方案:IBGP邻居全互联,路由反射器

IBGP全互联的不足

  • 邻居数量多:一个AS内有n台设备,需建立的邻居数为n(n-1)/2

  • 当设备数目很多时,设备配置十分复杂、路由维护十分复杂

  • 当设备数目很多时,网络资源和设备资源的消耗都非常大

路由反射器

反射器角色

  • 路由反射器:RR(Route Reflector)
  • 客户机
  • 非客户机

反射器原理

  • 客户机只需与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少了IBGP连接数量
  • RR会将学习的路由反射出去,从而使得IBGP路由在AS内传播无需建立IBGP全互联,路由器反射器突破了IBGP水平分割限制
  • 反射器通过命令指定自己的客户机,客户机不知道谁是反射器,只有反射器知道谁是客户机,没有指定为客户机的路由器,就是非客户机

7.2.1

反射规则

反射规则

  • RR从非客户机收到的路由会反射给客户机,会发布给EBGP邻居
  • RR从非客户机收到的路由不会反射给非客户机
  • RR从客户机收到的路由会反射给客户机和非客户机,会发布给EBGP邻居
  • RR从EBGP邻居收到的路由,会反射给所有的客户机、非客户机

注意此处反射发送的区别。发送指的是传统情况下(相当于RR不存在的场景下)的BGP路由传递行为,而反射指的是遵循路由反射规则的情况下,RR执行的路由传递动作,被反射出去的路由会被RR插入特殊的路径属性

配置命令

1
2
3
4
[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 192.168.12.1 as-number 200
[R2-bgp]peer 192.168.12.1 reflect-client //指定192.168.12.1为客户机

路由反射器防止环路

路由反射器突破水平分割限制可能导致环路发生

  • RR的设定使得IBGP水平分割原则失效,这就可能导致环路的产生,为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路
  • Originator_ID:始发者ID属性,属性用于防止集群内产生路由环路
  • Cluster_List:簇列表属性,属性用于防止集群间产生路由环路
  • 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相同,则它不会学习该路由

路由反射簇(Cluster)

  • 路由反射簇包括反射器RR及其Client。一个AS内允许存在多个路由反射簇(如下图)。

  • 每一个簇都有唯一的簇ID(Cluster_ID,默认为RR的BGP Router ID )。

  • 当一条路由被反射器反射后,该RR(该簇)的Cluster_ID就会被添加至路由的Cluster_list属性中。

  • 当RR收到一条携带Cluster_list属性的BGP路由,且该属性值中包含该簇的Cluster_ID时,RR认为该条路由存在环路,因此将忽略关于该条路由的更新

环回口建立IBGP邻居

BGP的稳定性

IBGP:

  • 一般使用环回口建立IBGP邻居,从而提高稳定性
  • 指定建立IBGP邻居的源地址为loopback地址

Loopback接口:

  • 用loopback接口建立邻居更加稳定和可靠
  • 使用物理接口的IP地址建立邻居,当物理接口和物理链路发送故障,BGP邻居就会down掉
  • 而使用loopback接口IP地址建立邻居,假设两台设备之间有3条物理链路,即便坏掉其中2条物理链路,即便只有1条物理链路互通,就可以保证BGP邻居的正常

配置命令

1
2
3
4
[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 10.10.1.1 as-number 200
[R2-bgp]peer 10.10.1.1 connect-interface LoopBack()

更新源检测机制

更新源检测机制

TCP连接源地址

  • 缺省情况下,BGP使用报文出接口作为TCP连接的本地接口
  • 在部署IBGP对等体关系时,建议使用LoopBack地址作为更新源地址
  • Loopback接口非常稳定,可以借助AS内的冗余链路来保证可靠性
  • 在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等体关系,则应注意EBGP多跳问题

7.2.2

EBGP之间为何不能使用Loopback接口建立对等体

  • BGP有直连检测机制
  • BGP要求,凡是建立EBGP邻居的路由器,必须使用直连网段,使用物理接口的IP地址,建立邻居
  • 原因:因为EBGP要求稳定性和可靠性, 使用直连网段,使用物理接口建立邻居,BGP路由器能够感知到链路故障, 能够及时作出调整,如果用非直连网段建立EBGP邻居,路由器无法实时且有效的感知到网络故障
  • 原理:EBGP报文中TTL值为1,
  • 当经过一台路由器转发的时候,TTL值减去1,当TTL值为0的时候,报文被丢弃,所以无法建立BGP邻居关系
  • 解决方法:突破直连检测机制

配置命令

1
peer 10.10.1.1 ebgp-max-hop  100   //修改bgp报文最大TTL为100