为了在AS内部防止环路,"IBGP对等体不允许对外宣告学习自其它IBGP对等体的路由",所以要求IBGP邻居全互联。这就意味着在AS内需要建立n(n-1)条IBGP连接。路由反射器为全互联通过了一种可选的替代方案。

反射规则:

BGP 路由反射器_第1张图片

为了防止可能出现的路由环路和路由差错,要求路由反射器不得更改其从客户接收到的路由的属性,并且使用ORIGINATOR_ID和CLUSTER_LIST属性防止环路的出现。(RFC2796定义了Originator_ID属性和Cluster_List属性)

Originator_ID属性长4字节是一种路由反射器创建的可选非传递属性,是由路由反射器(RR)产生的,携带了本地AS内部路由发起者的Router ID.

(1)当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这

       条路由的发起路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会

       创建新的Originator_ID.

  (2)当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的

               Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理。

Originator_ID属性保证路由在反射器和客户机/非客户机之间的不出现循环。

CLUSTER_LIST是一个4个8位的可选非传递簇ID,Cluster_List由一系列的Cluster_ID组成,描述了一条路由所经过的反射器路径,这和描述路由经过的As路径的AS_Path属性有相似之处。Cluster_List由路由反射器产生。

1)当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个。

  2)当RR接收到一条更新路由时,RR会检查Cluster_List.如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由。

  为了保证客户机可以学习到反射器发来的路由,Cluster_ID不能和客户机的Router ID相同。如果相同,客户机会将收到的路由丢弃。Cluster_List只在AS内部传播,从EBGP对等体收到的含有Cluster_List的路由将被丢弃。
BGP 路由反射器_第2张图片

路由反射簇中的客户端可和外部邻居建立对等关系,但是在路由反射器簇里只能与内部邻居或簇里的其他客户建立对等关系。RR可与簇外的内部邻居和外部邻居建立对等关系。