BGP入门

一、BGP的基本概念

BGP(边界网关协议)几乎是当前唯一被用在不同AS之间实现路由交互的EGP协议(外部网关协议),BGP适用于大型的网络环境,例如运营商网络,大型企业网等。BGP支持VLSM、CIDR。BGP使用TCP作为传输层协议目的TCP端口179,两台互为对等体的BGP路由器首先会建立TCP连接,随后协商各项参数并建立对等体关系,初始情况下,两者会同步双方的BGP路由表,同步完成后,路由器不会周期性发送BGP路由更新,而只发送增量更新及触发更新,毕竟BGP用于承载大量的路由信息,如果依然像IGP那样周期性交互路由信息,显然是不切实际的。目前有四个版本V1,V2,V4,V4+(MPBGP)
BGP定义了多种路径属性用于描述路由,就像一个人拥有身高,体重,学历,特长等,一条BGP路由通样携带着多种属性,路径属性将影响BGP路由的优选。BGP还定义了丰富的路由策略工具,这些工具使得BGP具有强大的路由操控能力,例如应用ACL,ip前缀,community,as-path-filter

BGP对等体关系类型

IGP协议(内部网关协议)要求建立邻居关系的两台路由器必须是直连的,BGP则不一样。BGP的对等体关系并不要求设备必须直连,采用TCP作为传输层协议,两台路由器只要具备IP连通性,能够基于TCP179建立连接,就可以建立BGP对等体关系,可以跨设备建立的。
我们将建立BGP邻居关系的路由器称为BGP对等体,BGP有两种对等体关系,一种是EBGP,另一种是IBGP

  1. EBGP对等体关系
    建立对等体关系的两台BGP路由器处于不同的AS,它们之间的关系称为EBGP对等体关系,BGP路由在EBGP对等体之间传输时,AS_Path路径属性用于防止路由环路,EBGP对等体在收到的BGP路由中看到了自己本地的AS号码时,会忽略这条路由更新。通常EBGP对等体关系必须基于直连接口建立,默认情况下,EBGP对等体之间发送的BGP协议报文TTL值为1,使得协议报文只能够被传送1跳。
  2. IBGP对等体关系
    建立对等体关系的两台BGP路由器位于相同的AS,它们之间的关系被称为IBGP对等体关系。不同的BGP对等体关系,对路由的操作是有明显区别的,BGP路由在EBGP对等体之间传输时,AS_Path会发生改变,在原有基础上插入自己所处AS的号码,而BGP路由在IBGP对等体之间传递时,AS_Path不会发生改变。
    EBGP对等体之间AS_Path用于防环,不适用于IBGP对等体,IBGP水平分割用于解决IBGP对等体之间防环,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体。引入IBGP水平分割会解决IBGP对等体环路,但是还带来了一些IBGP路由传递问题,路由黑洞问题。
    为了避免路由黑洞,BGP引入了同步规则。当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用这条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议学习到这条路由,也就是要求IBGP路由与IGP路由同步。

同步规则主要是规避BGP路由黑洞问题,当然解决路由黑洞还有很多方法

  1. 在AS内使用物理链路,IBGP对等体邻接关系全互联,这样太消耗资源,路由反射器和联邦是两个很好的解决方案
  2. 将AS内部的边缘路由器之间建立TUNNEL
  3. 使用MPLS
  4. 在AS内部的边缘路由引入IGP

路由通告

BGP路由在对等体之间交互时,主要存在以下几个原则:

  • 当一台路由器发现了多条可到达同一个目的网段的BGP路由时,会通过路由选择进程选在最优的一条路由,并加载到路由表中使用,而且只会将最优的路由通告给BGP对等体
  • 当一台路由器从自己的EBGP对等体学习到BGP路由时,缺省会将路由通告给所有的IBGP/EBGP对等体
  • 当一台路由器从自己的IBGP对等体学习到BGP路由时,它会通告给EBGP对等体,不会将路由通告给其他IBGP对等体

Router-ID

BGP Router-ID是网络设备的BGP协议标识符,确保设备的Router-ID的唯一性可以通过两种方式获取,一种是BGP自动选择,另一种是手工配置的方式为设备指定

报文类型及格式

BGP主要使用4种协议报文,所有BGP报文都有一个相同的头部,这个头部一共19byte,标记16byte,长度2byte,类型1byte,其中类型指示了该BGP报文的类型,常见的BGP报文类型字段值的对应关系如下:1.Open报文,2.Update报文,3.Notification报文,4.Keepalive报文

  1. Open 报文:我们已经知道,两台BGP路由器想要交互BGP路由,就需要建立对等体关系,在此之前需首先建立TCP连接,一旦TCP连接被正确建立,双方便开始交互Open报文,如果路由器认可对方发送过来的Open报文,则立即会送一个Keepalive报文以作确认
  2. Update报文:BGP路由器使用Update报文向其他对等体通告路由信息
  3. Keepalive报文:BGP基于TCP工作的,但是它不依赖TCP的保活机制,而是周期性发送Keepalive报文来了解对等体的存活情况。BGP路由器会为对等体维护一个保活计时器,超时的话视为不可达,还用于确认对方发送过来的Open报文
  4. Notification报文:BGP检测到一个错误是,它可以使用Notification报文来告知对等体
    ####将路由发布到BGP
    可以使用3种方法将路由发布到BGP,使用network命令,使用import-route(路由重分布)命令或使用aggregate(路由汇总)命令。

二、路径属性

任何一条BGP路由都拥有多个路径属性,当路由器将BGP路由通告给他的对等体时,一并被通告的还有路由所携带的各个路径属性,例如买房子,房子的参数,面积,装修,周边等参考影响购房者的购买决策。对应BGP而言,BGP路径属性描述了路由的各项特征,会影响BGP路由优选的决策。BGP提供了丰富了路由策略工具,使得我们针对路由的路径属性的操控更加灵活便捷。
BGP路径属性分为两大类:公认及可选,公认属性是所有BGP路由器必须能够识别的路径属性,可选属性则不要求所有的BGP路由器都必须能够识别。公认属性分为强制(Update报文通告路由更新必须携带的路径属性)及自由决定(Update报文通告路由更新不要求必须携带的路径属性),可选分为传递(携带传递)及非可传递(忽略携带传递)

Preferred_Value

Preferred_Value 是一个华为私有的路径属性,可以理解为路由的“权重”,取值0-65535,缺省为0,越大越优先,只在本地有效,不能传递给别人

Local_Preference

Local_Preference(本地优先级)属性是一个公认自由决定属性,只在IBGP对等体之间传递,当路由被通告给EBGP对等体时,是禁止携带该属性的。只能在一个AS内部传递,这就是"本地"的含义了,默认100,越大越优

AS_Path

AS_Path是公认强制属性,它描述了一条BGP路由在传递过程中所经过的AS的号码。一台路由器将BGP路由通告给自己的EBGP对等体时,会将本地的AS号插入到该原有AS_Path之前。AS_Path有两个重要的作用,一个是EBGP路由防环,一个是路由优选的依据(AS_Path越短则越优)

Origin

Origin属性用来描述BGP路由的来源,有三种类型(优到次优到最次):IGP,EGP,Incomplete(路由通过其他方式学到的)

MED

MED属性是一个可选非传递属性,是一种度量值,默认为0,越小越优

Next_Hop

Next_Hop描述了到达目的网段的下一跳地址,当路由器将一条EBGP路由通告给自己的IBGP对等体时,缺省情况下,该路由器不会改变该路由原有的Next_Hop属性值;通告给EBGP对等体时,无论这条路由是否为该路由器始发,路由的Next_Hop属性值都被这台路由器的更新源IP

Community

Community类似于路由的“标记”,可以针对特定的路由设置特定的Community属性值,下游路由器在执行路由策略时,可以通过Community属性值来匹配目标路由。RFC定义了几个公认的Community属性值:No-Advertise,No-Export,No-Export-Subconfed,意思分别为如果路由器从BGP对等体学习到一条携带Community属性的BGP路由,并且包含上述属性值,No-Advertise代表只能供路由器自己使用,不能通告给其他BGP对等体,No-Export代表不能通告给EBGP对等体(可以通告给联邦EBGP对等体),No-Export-Subconfed该路由不允许被传递到该路由器所处的AS之外(不能通告给联邦EBGP对等体),不能通告给任何EBGP对等体

三、路由反射器

路由反射器的基本概念

路由反射器RR是一种用于解决AS内部BGP路由传递问题的技术,在一些大型的BGP组网中经常被应用。在AS 内部不部署全互联的IBGP对等体关系,又要求路由传递不能出现问题,可使用路由反射器这个解决方案,指定路由反射器及客户,非客户,遵循一定的规则的情况下进行“反射”。
我们将路由反射器以及它的客户所构成的系统成为路由反射簇(Cluster),路由反射器与所有的客户建立IBGP对等体关系,而客户之间无需建立IBGP对等体关系,优化了网络中的IBGP对等体关系数量。路由反射器的配置是在充当反射器的BGP路由器上完成的,而路由反射器的客户设备不需要做任何额外的配置,它甚至不知道自己成为了某个路由反射器的客户。
值得注意的是,路由反射器并不是在任何场景下都会将BGP路由进行反射的,RR从自己的非客户对等体学习到一条IBGP路由,它会将路由反射给所有客户,不会反射给非客户;RR从自己的客户学习到一条IBGP路由,它会将路由反射给所有非客户,以及除了该客户之外的其他所有客户;当路由反射器执行路由反射时,它只将自己使用的、最优的BGP路由进行反射

路由反射器环境下的路由防环

路由发射器对IBGP路由的操作突破了水平分割规则的,而IBGP路由又依赖水平分割规则来实现无环化,如何在部署了路由反射器的场景下杜绝IBGP路由环路?在反射器群组内将会启用Cluster-ID和Originator-ID,通过这两种属性可防止环路产生。

  1. Originator-ID属性
    Originator-ID是一个可选非传递属性,长度为32bit,与IPV4地址格式相同。当一条BGP路由被路由反射器反射给其他路由器时,如果路由已经携带了Originator-ID属性,则保留该属性,否则路由反射器为这条路由添加Originator-ID属性,并将属性设置为该路由在本地AS内始发的路由器的Router-ID。当路由器收到了一条携带Originator-ID属性的IBGP路由,如果与自己的BGP Router-ID相同时,它将忽略这条路由的更新
  2. Cluster_List属性
    Cluster_List是一个可选非传递属性,它可以包含一个或者多个Cluster_ID(路由反射器标识符),路由反射器以及它的客户所构成的系统成为路由反射簇,在一个AS内可以存在多个路由反射器簇,每个簇拥有自己的Cluster_ID。Cluster_ID是一个可配置的32bit的数值,缺省时为路由反射器的BGP Router-ID。当一条BGP路由被路由反射器执行反射时,如果路由存在Cluster_List属性,那么路由反射器会将本地的Cluster_ID附加到路由的Cluster_List属性值之前,如果不存在,路由反射器为它创建Cluster_List并将本地的Cluster_ID 插入到Cluster_List属性值中。当一台路由反射器收到一条BGP路由,如果路由携带的Cluster_List属性包含自己的Cluster_ID时,会忽略这条路由的更新

四、联邦

解决IBGP路由传递的问题除了路由反射器之外,另一个就是联邦,思想是在一个大的AS内创建若干个小的AS,使得AS内部出现一种特殊的EBGP对等体关系,从而解决IBGP路由在AS内的传递问题
####联邦的基本概念及防环
联盟内部的成员AS号对于其他非联盟AS是不可见的,所以路由在有联盟内部发送到其他非联盟AS时,联盟成员AS号被剥离。联邦的防环机制AS_CONFED_SET,AS_CONFED_SEQUENCE,AS_Path中的两种属性,只在联邦内使用

五、BGP路由优选规则

BGP是一个应用非常广泛的边界网关路由协议,它能够支持大规模的网络,能够在各种骨干数据网络中运载大批量的路由前缀。BGP定义了多种路径属性,并且拥有丰富的路由策略工具,使得BGP在路由操控和路径决策上变的非常机动和灵活。当一台路由器学习到多条到达相同目的网段的BGP路由时,它将进行一个关于路由优选的决策,在这些路由中选择一条最优的路由。BGP只将最优的路由加载到全局路由表作为数据转发的依据,也只将最优的路由通告给其他对等体。

任何一条BGP路由在参与优选之前都必须先经过检查。检查BGP路由的Next_Hop是否可达,如果不可达,则BGP路由视为不可用,不会被优选及通告。

这些规则依序排列,BGP进行路由优选是,从第一条规则开始执行,如果根据第一条规则无法作出判断,则继续执行下一条规则

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值