在涉及到网络协议时,环路一直是需解决的问题,一旦发生环路,将影响甚大,前辈们也为BGP设定了较为完善的防环机制。BGP的防环机制主要分为两种情况,AS间与AS内。
AS间防环
AS间防环的主要措施是记录经过的路径,也就是AS_PATH属性,一旦经过的router在AS_PATH则说明存在环路。
AS内防环
AS防环主要是通过一种称之为水平分割的方式,这种方式在那篇RIP防环机制的文章里已详述,这里简述方式,即IBGP peer不向IGBP peer发布从EBGP peer那里学来的路由,这样可以避免内部的环路产生,但也产生了问题,遵循这样的原则,内部的routers必须全互联,即要建立n(n-1)/2的连接,规模较小尚可接受,一旦数量上去,开销大,扩展性低,所以前辈们提出了两种方案,一种是化零为整,中央集权形成集群的路由反射器方式,另一种是化整为零,相互合作形成集群的BGP联邦。
路由反射器防环
主要是两个属性:
Originator_id:记录起始路由器id,以防集群内部环路。
Cluster_list:记录RR(路由反射器)的id,以防集群间的环路。
BGP联邦
这时又轮到AS_PATH出场了,上文中讲到AS_PATH主要负责集群间的防环,但其实AS_PATH分为四种类型:
- AS_SET: 经过路径上的无序AS号列表;
- AS_SEQENCE: 经过路径上的有序AS号列表;
- AS_CONFED_SET:经过路径上的无序AS号列表,其用方法与AS_SET完全一样,区别在于列表中的AS号属于本地联邦中的AS。
- AS_CONFED_SEQUENCE:经过路径上的有序AS 号列表,其用法与AS_SEQUENCE完全一样,区别在于该列表中的AS号属于本地联邦中的AS;
拓展
除了上述的方式属性外,Next_Hop(下一跳)属性亦是防环措施中的一环。