为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。


【数通面试私房菜之BGP专题】第四期:BGP反射器_第1张图片


路由反射器概念


• 路由反射器RR(Route Reflector):允许把从IBGP 对等体学到的路由反射到其他IBGP对等体的BGP设备。


• 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。


• 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。


• 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。


• 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。


反射器反射规则


• 从EBGP对等体学到的路由,发布给所有的非客户机和客户机。


• 从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机。


• 从客户机学到的路由,发布给此RR的所有非客户机和客户机(发起此路由的客户机除外)。


路由反射器的防环机制


Cluster_List属性


路由反射器和它的客户机组成一个集群(Cluster),使用AS内唯一的Cluster ID作为标识。为了防止集群间产生路由环路,路由反射器使用Cluster_List属性,记录路由经过的所有集群的Cluster ID。


• 当一条路由第一次被RR反射的时候,RR会把本地Cluster ID添加到Cluster List的前面。如果没有Cluster_List属性,RR就创建一个。


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


Originator_ID属性


Originator ID由RR产生,使用的Router ID的值标识路由的始发者,用于防止集群内产生路由环路。


• 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID属性。


• 当设备接收到这条路由的时候,将比较收到的Originator ID和本地的Router ID,如果两个ID相同,则不接收此路由。