BGP反射器
IBGP全互联的问题
为了实现路由信息的交互,BGP要求一个AS内的所有BGP Speaker相互形成IBGP全互连,导致IBGP的会话数是n(n-1)/2,而这一要求使得IBGP的扩展成为了一个很大的问题
IBGP全互联问题解决方案
路由反射 (RFC 2796)
降低对指定路由器IBGP路由通告机制的限制,允许将从IBGP对等体接收到的更新信息传给某些IBGP对等体 打破传统IBGP水平分割的限制
联盟 (RFC3065)
将大的AS分成若干小的AS,而小AS之间建立EBGP对等体关系
BGP路由反射器(Route Reflector)
在AS200里,有三台路由器分别为RTA,RTB和RTC。在默认的情况下,如果RTA收到一条外部的路由更新,并且该路由被RTA选举为最佳路由,则RTA肯定会把该路由通告给RTB以及RTC。由于RTB和RTC互为IBGP对等体,所以不会把从IBGP学习到的路由通告给其它IBGP对等体。
如果该通告原则可以被放松,允许RTC可以把从RTA学习到的IBGP路由通告给其它IBGP对等体的话,这样将可以取消RTA与RTB之间的IBGP会话,RTC就是BGP路由反射器。
不同角色的对等体
一个BGP Speaker通告一条IBGP路由到另外一个IBGP对等体的操作。而这样的一个BGP Speaker通常被称为路由反射器(Route Reflector, RR),这样的一条IBGP路由被称为反射路由。IBGP对等体可以有三种角色:
• 路由反射器 (Route Reflector)
• 客户机 (Client)
• 非客户机 (Non-Client)
路由反射器和它的客户机组成一个集群(Cluster)。路由反射器在客户机之间传递(反射)路由信息,所以客户机之间不需要建立BGP连接。
既不是反射器也不是客户机的BGP路由器被称为非客户机(Non-Client)。非客户机与路由反射器之间,以及所有的非客户机之间仍然必须建立全连接关系。
总结对等体之间的关系
• Client只需维护与RR之间的IBGP会话。
• Non-Client与Non-Client之间需要建立IBGP全互连。
• RR与Non-Client之间需要建立IBGP全互连。
• RR与RR之间需要建立IBGP的全互连。
路由反射宣告原则 (1)
从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机
从EBGP对等体学到的路由,发布给所有的非客户机和客户机
路由反射宣告原则 (2)
从客户机学到的路由,发布给此RR的所有非客户机和客户机(发起此路由的客户机除外)
从EBGP对等体学到的路由,发布给所有的非客户机和客户机
路由反射簇 (Cluster)
• 当一个AS内存在多台RR为Client提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念
什么是簇?
通过4字节的Cluster_ID来标识Cluster,通常会使用Loopback地址作为Cluster_ID。
一个Cluster里可以包括一个或多个RR;一个Client可以同时属于多个Cluster。
通常,一个客户的簇只拥有一个RR,并由RR的BGP Router-id去标识该簇。有时,为了防止单点失效,在单一簇里引入多个RR,如图中的备份RR组网。
路由反射环路防止机制 - Originator_ID
• Originator_ID属性用于防止在反射器和客户机/非客户机之间产生环路。
• Originator_ID属性长4字节,可选非过渡属性,属性类型为9 ,是由路由反射器(RR)产生的,携带了本地AS内部路由发起者的Router ID。
• 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入到这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID。
• 当其它BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地的Router ID,如果两个ID相同,BGP Speaker会忽略掉这条路由,不做处理。
路由反射环路防止机制 - Cluster_List
Cluster_List是可选非过渡属性,属性类型编码为10
Cluster_List由一系列的Cluster_ID组成,描述了一条路由所经过的反射器路径,这和描述路由经过的As路径的AS_Path属性有相似之处。Cluster_List由路由反射器产生
Cluster_List只在AS内部传播,从EBGP对等体收到的含有Cluster_List的路由将被丢弃。
当RR在它的客户机之间或客户机与非客户机之间反射路由时,RR会把本地Cluster_ID添加到Cluster_List的前面。如果Cluster_List为空,RR就创建一个
当RR接收到一条更新路由时,RR会检查Cluster_List。如果Cluster_List中已经有本地Cluster_ID,丢弃该路由;如果没有本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由
Cluster_List只被RR用来检测路由环路,不是RR的客户机和非客户机不会检测该属性。
Cluster list与Originator ID的相同与不同
相同:它们都是防止AS内部的环路
不同:Originator ID就是在发起该路由的路由器发现收到了一条路由信息(该路由信息里面的originator ID就是这台路由器),此时路由器便会忽略该路由这样达到防环作用
CLUSTER list是RR产生的,是通过RR来防止路由环路的。当RR发现收到的路由更新里面的cluster ID和RR自己一样,此时便忽略该路由更新
AS内多个簇
一个AS中可能存在多个簇(Cluster)。各个RR之间是IBGP对等体的关系,一个RR可以把另一个RR配置成自己的客户机或非客户机。因此可以灵活的配置AS内部簇与簇之间的关系。
层次化路由反射
BGP联盟
联盟通过把大的AS分成多个更小的自治系统来解决IBGP全互连的问题,这些自治系统叫做成员自治系统或子自治系统。成员自治系统之间使用EBGP会话,因此它们不需要全互连。然而,在每一个成员AS中,仍然要求IBGP全互连。
联盟术语
联盟通过把大的AS分成多个更小的AS来解决IBGP全互连的问题,这些自治系统叫做成员AS。因为成员AS之间使用EBGP会话,它们之间不需要全互连。然而在每一个成员AS中,IBGP全互连的要求仍然适用。
联盟中的EBGP会话和常规的EBGP会话有所不同。为了区分它们,这种类型的EBGP会话叫做联盟内的EBGP会话。与普通EBGP会话区别就发生在当通过会话传播路由的时候,联盟内的EBGP会话在一方面遵循路由通告的部分IBGP规则,在另一方面又遵循路由通告的部分EBGP规则。如:在发送更新的时候,NEXP_HOP、MED和LOCAL_PREF被保留,而AS-PATH被修改。
对于外部邻居来说(联盟外的的对等体),成员AS拓扑是不可见的。也就是说,在发向EBGP邻居的更新消息中,已经剥去了联盟内被修改的AS_PATH。从其他的自治系统来看,联盟就像单个AS一样。
每个成员AS中,IBGP全连接是需要的。路由反射也可以被部署。部署联盟的一个明显优势就是其成员AS不需要使用相同的IGP。每个成员AS不需要向其他成员AS通告自己的内部拓扑。不过,当使用不同的IGP时,每一个成员AS内必须保证BGP下一跳的可达性。
AS-Path回顾
当前,AS_PATH属性被定义为公认必遵属性,该属性由AS号所组成。AS_PATH属性字段由三元组所组成:
Path Segment Type, Path Segment Length, Path Segment Value
在BGPv4里,path segment type字段是由1字节长的数值所组成,主要是标识AS_PATH的不同类型:
Value Segment Type 1 AS_SET: 由一系列AS号无序地组成,包含在UPDATE消息里。 2 AS_SEQUENCE: 由一系列AS号顺序地组成,包含在UPDATE消息里。 3 AS_CONFED_SEQUENCE: 在本地联盟内由一系列成员AS号按顺序地组成,包含在UPDATE消息中,只能在本地联盟内传递。 4 AS_CONFED_SET: 在本地联盟内由一系列成员AS无序地组成,包含在UPDATE消息中,同样只能在本地联盟内传递。
AS_Path变化过程
联盟内采用AS-CONFED来防止子AS间的路由环路。
联盟内的AS-PATH属性变化:
联盟内的EBGP会话
子AS号被添加到AS-PATH中的AS-CONFED-SEQUENCE前面
联盟内的IBGP会话
不修改AS-PATH
外部BGP会话
子AS号从AS-PATH中清除,而大AS号被添加到AS-PATH前面