技术产生背景:
为了保证IGBP对等体(peers)的连通性,需要每个IBGP对等体之间建立全连接,假设IGBP内部网络有n台设备,那么建立的IBGP连接数为N*(N-1)/2。
当设备数目很多时,这会带来资源CPU的消耗过大,为解决这个问题RR(路由反射器)和BGP confederations(BGP 联盟)就被设计出来了。
假设我们在IBGP网络里有六台路由器,则建立全连接的对等体peerings是15。
当我们使用RR技术在网络中 则会变成这样
路由器数量不变,但每一台路由器维护的peerings只有一台RR。当一台路由发布路由条目到RR时,RR会将该路由条目信息反射给所有连接的其他Router。
RR有三种连接关系
EBGP邻居
Client
Non clinent
反射规则:
rule1:从Non-client学习到的路由将会反射给所有Client,但不会发布给Non-client
rule2:从Client学习到的路由将会映射给所有的Client and Non-client.(除了自己本身)
rule3:从Ebgp peers学习到的路由将会发送给所有Client and Non-client
RR属性
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
对于AS之间,BGP用于防止环路的主要措施是通过AS_Path属性记录途经的AS路径,带有本地AS号的路由将被路由器丢弃;对于AS之内,BGP防止路由环路的方法是禁止IBGP对等体发布从AS内部学来的路由。
路由反射器的实现是基于放宽对"BGP在AS内学到的路由不会在AS中转发"的要求,即允许IBGP对等体之间发布从AS内部学来的路由。在这种情况下,Cluster_List属性被引入,用于防止AS内部的环路。
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的路由将被丢弃。