BGP
- 一、BGP基础
- 二、BGP的发展历史
- 三、BGP在企业中的应用
- 四、距离矢量型协议和路径矢量型协议
- 五、BGP的特征
- 六、BGP的对等关系
- 七、BGP的数据包
- 八、BGP的状态机
- 九、BGP的工作过程
- 十、BGP的路由黑洞
- 十一、BGP的环路问题
- EBGP水平分割
- IBGP水平分割
- 十二、BGP的基本配置
- 1、BGP的对等体建立
- 2、BGP的路由发布
- 3、BGP的路由聚合
- 自动聚合
- 手工聚合
一、BGP基础
我们之前所学的RIP也好,OSPF也好,都属于IGP协议- 内部网关协议(Interior Gateway Protocol),而我们本章要学习的BGP协议,则属于EGP协议— 外部网关协议(Exterior Gateway Protocol)。虽然都属于动态路由协议的范畴,但二者其实是存在本质的差别的,这个我们需要通过后续的课程,慢慢的研究清楚。
当然,我们首先需要搞清楚的,就是这个IGP协议和EGP协议是如何划分的。
这个划分依据其实我们在IA阶段去了解动态路由协议的时候,就已经提及到了,那就是依据工作范围来进行划分:
- 内部网关协议IGP(Interior Gateway Protocol) :在一个自治系统内部运行。RIP、OSPF、ISIS为常见的IGP协议。
- 外部网关协议EGP (ExteriorGateway Protocol): 运行于不同自治系统之间。BGP 是目前最常用的EGP协议。
而这里提到的自治系统,就是我们范围的划分依据,我们英文称为AS (Autonomous system)
- OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长GP已无法管理大规模网络,AS的概念由此诞生。
-
- AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。— 自治
整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。— 范围太大,协议跑不过来
(以上两点是需要进行AS划分的主要原因。)
- AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。— 自治
- AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
- 不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。
-
- 我们通常使用的16位的AS号,其取值范围为1-65534(0和65535保留),而其中64512-65534为私有0的AS号,即可以自行使用,所以,真正公有可用的AS号取值为1-64511。其数量相对较少,故有了32位拓展版的AS号。
- 为此在AS之间专门使用BGP(Border Gateway Protocol,边界网关协议)协议进行路由传递,相较于传统的IGP协议:
-
- BGP基于TCP,只要能够建立TCP连接即可建立BGP0
-
- 只传递路由信息,不会暴露AS内的拓扑信息。
-
- 触发式更新,而不是进行周期性更新。
二、BGP的发展历史
这里我们只需要知道,我们目前在IPV4环境下,主要使用的是BGPV4版本,而目前,市场上也存在BGPV4+版本,即MP-BGP(Muti-protocol-BGP),可以支持多种地址族,能应用在IPV6环境下。之后,我们在MPLS VPN中,也需要用到。
三、BGP在企业中的应用
这里可以思考一个问题,那就是我们BGP在完成AS之间路由共享的时候,需要采用哪种形式来进行共享?
- 共享路由
- 共享拓扑
BGP共享AS之间的路由信息的方式应该是直接传递路由信息而不是共享拓扑信息,因为拓扑信息一方面更新量—更大,其次将暴露本AS的拓扑情况,所以,传递路由信息更加合理
这种做法显然有点类似我们之前接触的距离矢量型协议,但是,BGP并不属于距离矢量型协议,而我们通常称他为—“路径失灵型协议”
四、距离矢量型协议和路径矢量型协议
路径矢量 | 距离矢量 |
---|---|
一个AS为一跳 | 一个路由器为一跳 |
不是算法概念仅将IGP协议算好的路由信息传递出去,仅完成搬运工 | 是一个算法的概念,用来计算到达未知网段作的路由信息 |
所以,我们发现,BGP和我们之前学习的IGP是存在本质的区别的,IGP协议的主要任务是将AS内部的未知网信息计算获取到,而BGP则主要是将IGP协议计算出来的路由信息进行搬运和传递,并不去计算路由。
五、BGP的特征
这里列举些BGP相比于IGP而言,不一样的关注点及其特征
可控性
- 因为BGP需要传递大量的路由信息,所以,需要强大的可控性,更方便对路由信息进行管理和配置策略。
- 为此,BGP舍弃了开销值,取而代之的是设计了很多路径属性。
- 每条BGP路由都携带多种路径属性 (Path attribute),BGP可以通过这些路径属性控制路径选择,而不像lS-S、OSPF只能通过Cost控制路径选择,因此在路径选择上,BGP具有丰富的可操作性,可以在不同场景下选择最合适的路径控制方式。
可靠性
- BGP因为只有触发更新,而不存再周期更新(因为更新路由数量过大)。所以,需要确保可靠性。
- BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
- 两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。
AS-BY-AS
- BGP是将一个AS看作是一个整体
六、BGP的对等关系
- 与OSPF、IS-IS等协议不同,BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连。
- 缺省情况下,BGP使用报文出接口作为TCP连接的本地接口
- BGP存在两种对等体关系类型:EBGP及IBGP:
- EBGP(ExternalBGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建0立EBGP对等体关系,必须满足两个条件:
- 两个路由器所属AS不同(即AS号不同)。
- 在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立
- 在部署EBGP对等体关系时,通常使用直连接口的IP地址作为源地址,如若使用Lopback接口建立EBGP对等体关系,则应注意EBGP多跳问题。 — 发送的数据包中的TTL值将被设置为1。
IBGP (Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
- 在部署IBGP对等体关系时,建议使用Loopback地址作为更新源地址。Loopback接口非常稳定,而且可以借助AS内的IGP和冗余拓扑来保证可靠性。
- 一般而言在AS内部,网络具备一定的冗余性。在R1与R3之间,如果采用直连接口建IBGP邻居关系那么一旦接口或者直连链路发生故障,BGP会话也就断了,但是事实上,由于余链路的存在,R1与R3之间的IP连通性其实并没有DOWN(仍然可以通过R4到达彼此)
七、BGP的数据包
BGP存在5种数据包类型。(常用的是前四种)
报文名称 | 作用 | 发送时刻 |
---|---|---|
Open | 协商BGP对等体参数,建立对等体关系 | BGPTCP连接建立成功之后 |
Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
- open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系
需要比对协商的参数如下: -
- AS号—BGP的open报文会携带本地的AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS。**另外,如果对方的AS号和本地建邻时写的AS号不同,则将导致邻居关系无法建立。
-
- RID—在这里可以被称为BGP Identifier (BGP标识符),和OSPF中的RID相同,也是由32位二进制构成,按照IP地址的格式来写。这个值在数据包中也会携带,将对比两边该值是否相同,相同则表示存在冲突,将导致建邻失败。
-
- BGP也可以进行认证,认证口令不同,则也将导致建邻失败
-
- open报文中还会携带Hold Time — 保活时间。p在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文,则认为BGP连接中断。–.该时间默认是180S。双方保活时间不一致,则将按照小的执行。
- Keepalive报文主要用来周期保活
-
- 周期保活时间默认是保活时间的1/3,默认60S。
-
- 该报文还将在open报文协商参数时,临时充当确认报文— 确认open报文中的参数是否认可。
- Update报文用于在对等体之间传递路由信息,可以用于发布、撤销路由。
-
- 一个Update报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRL(Network LayerReachablelnformation,网络层可达信息)中。同时Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
- Notification 报文是当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发生),就会向对等体发送Notification,告知对端错误原因。之后BGP连接将会立即中断。
- Route-refresh报文用来要求对等体重新发送指定地址族的路由信息一般为本端修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。
八、BGP的状态机
BGP的状态机和OSPF的状态机不同之处在于 — BGP的状态机仅描述的是对等体关系建立过程的状态变化。主要是因为BGP可以将邻居建立过程和BGP路由收发过程分开
BGP一共存在六种状态机。
Peer状态名称 | 用途 |
---|---|
dle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
Connect | 正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接 |
Active | TCP连接没建立成功,反复尝试TCP连接 |
OpenSent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立 |
OpenConfirm | 参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包 |
Established | 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
IDLE — 空闲状态— 所有设备启动BGP进城后将首先进入空闲状态
当手工指定邻居关系后,将会进入到一个检查环节,需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP的会话,如果不可达,则邻居关系建立失败,停留在IDLE状态。
如里检查成功,则将进入到Connect状态 — 连接状态。----建立TCP会话连接的状态
(注意,对等体关系指定是双向的,双方都将发起TCP会话连接请求,最终将会建立两个双向的TCP会话通道,只需要保留一个即可。所以,在之后发送的open报文中,将比较其中的RID参数,RID大的设备发起的TCP会话连接将被保留,RID小的发起的连接将被关闭。)
如果TCP会话连接失败,则将进入到Active状态 --. 尝试重新建立TCP会连接(多次失败后,将超时,回退到空闲状态,如果成功,则进入到opensent状态。)
如果TCP会话连接成功,则将直接进入到opensent状态— 发送open报文来协商参数,建立对等体关系。同时,也将收到对方发来的open报文,则将查看其中的参数,如果参数没问题,则将发送keeplive报文进行确认则将进入到openconfirm状态。— 等待对方发送keeplive报文,确认本地参数。
如果,收到对方发送的keeplive报文,则代表双方open报文中的参数协商完成,则邻居关系建立成功,将进入到最终状态— Established状态。
以下是BGP状态机变化的过程图:
九、BGP的工作过程
根据我们之前对BGP基础的了解,我们下面总结以下BGP的工作过程。
- 1,基于IGP实现IP可达
- 2,指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。BGP之后所有的通信都将基于TCP会话通道来传输。包括提供传输的可靠性
- 3,使用OPEN报文和Keeplive报文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
- 4,使用update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性,之后,将发送以及收集到的路由信息记录在一张表中-- BGP表
- 5,之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
- 6,收敛完成后,将使用keeplive报文进行周期保活,默认的保活时间为180S,发送周期为60S.
- 7,如果出现错误,将使用notification报文进行告警。
- 8,若出现结构突变,则将使用update报进行触发更新。
十、BGP的路由黑洞
由于BGP协议可以非直连建邻,所以导致BGP协议可能出现跨越未运行BGP协议的设备,导致BGP路由传递后,控制层面显示可达,但是,数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。
解决方案
- 1,让未运行BGP协议的设备运行BGP协议— 问题,所有设备都需要运行BGP则都将承载大量的路由信息,造成设备成本增加。
- 2,在IGP协议中,重发布BGP协议的路由信息2 .
- 3,MPLS
十一、BGP的环路问题
BGP在解决路由环路问题是采取的方法我们也称为— 水平分割
BGP的水平分割又分为两种,一种是专门针对EBGP对等体的EBGP水平分割,以及一个专门针对IBGP对等体的IBGP水平分割
EBGP水平分割
EBGP的水平分割—针对EBGP对等体之间可能出现的环路问题所提供的解决方案
所谓EBGP的水平分割,主要用于防止EBGP环境路由回传而形成环路—BGP协议在路由条目中将经过的AS号进行记录,生成一个属性— AS_PATH(记载所有经过的AS的AS号),之后,在接收到的路由条目中的AS_PATH属性中,如果存在本地的AS号,则将拒绝学习该路由信息,防止路由回传,形成环路。 — AS PATH属性也可以用于选路,其可以反应经过AS的数量。
路由在EBGP对等体之间传递时,AS_Path还用于防止出现路由环路。R4从R3收到10.1.1.024路由后,如果它与R2之间存在EBGP对等体关系,那么它会将该路由通告给R2,此时路由的AS_Path为 300 100 200,如上图所示,R2从R4收到该路由后,会忽略这条路由更新,因为它在收到的路由中看到了自己本地的AS号码便意识到网络中出现了环路。
IBGP水平分割
IBGP的水平分割— 针对IBGP对等体之间可能出现的环路问题所提供的解决方案
注意:因为BGP的AS-BY-AS的特性,要求其将一个AS看作是一个整体,所以,在默认情况下,AS内部传递的路由信息的路径属性是不会发生变化的。也就是说当BGP路由在一个AS内传递时,是无法依赖AS Path 提供的防环能力的,那么此时路由环路就有可能发生,IBGP水平分割规则就是用于解决这个问题的。
上图所示的网络中,R1与R2和R3分别建立EBGP对等体关系,而AS 64513内的三台路由器则两两建立IBGP对等体关系。现在R1将AS 64512内的10.1.1.0/24路由发布到BGP。R1将这条路由通过BGP通告给自己的EBGP对等体R2,当然,我们并不担心这条路由在AS 64512及AS 64513之间传递时会发生环路,因为ASPath能够起到防环的作用。但是在AS内部的路由防环呢?当R2收到R1通告的10.1.1.0/24路由后,它将这条路由通告给自己的IBGP对等体R3及R4,R4会将该路由通告给IBGP对等体R3,而R3又会将该路由通告给R2,这就极有可能引发路由环路。
所以,BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体,这就是IBGP水平分割规则。在本例中,R4从IBGP对等体R2学习到的路由将不能再通告给R3,因为R3也是它的IBGP对等体。同理,R3从R2学习到的BGP路由也不能通告给R4。
IBGP水平分割规则是一个非常重要的设计,它可以在极大程度上规避AS内 BGP路由传递时可能引发的路由环路问题。然而在某些场景中,它也会带来一些新的问题。
上图展示了一个示例,在这个网络中,R4增加了一个IBGP对等体R5。由于IBGP水平分割规则的限制,R4是无法将学习自IBGP对等体R2的10.1.1.0/24路由再通告给另一个BGP对等体R5的,因此这将造成R5无法学习到去往AS64512的路由。实际上我们不可能放弃1BGP水平分割规则,因为它确实非常重要,但是在许多场景下又必须解决IBGP路由传递的问题。
解决方案:
这个问题有多种解决办法,例如可以在AS内部建立IBGP对等体关系的全互联模型。以AS 64513为例,需在该AS中所有的BGP路由器两两之间建立IBGP对等体关系。— 当然,这样做会造成资源消耗增加,网络的可扩展性降低。
所以,我们后面还会专门学习BGP里面的两个技术— 路由反射器和联邦。都是为了解决IBGP水平分割所造成的通讯障碍的。
十二、BGP的基本配置
BGP的基本配置可以分为对等体关系建立和发布路由两个部分来看。BGP可以实现邻居关系建立和发布路由分开实现)
1、BGP的对等体建立
1、启动BGP进程
[Huawei] bgp {as-number-plain / as-numberdot}
[Huawei-bgp] routerid ipv4-address
启动BGP,指定本地AS编号,并进入BGP视图。使用router-id命令配置BGP的Router D,建议将BGP Router D配置为设备Loopback接口的地址。
2、配置BGP对等体
[Huawei-bgp] peer (ipv4-address / ipv6-address ) as-number {as-number-plain / as-number-dot }
创建BGP对等体,指定对等体地址以及AS号。
3、配置建立对等体使用的源地址、EBGP对等体最大跳数
[Huawei-bgp] peer ipv4-address connect-interface interface-type interface-number [ ipv4-source-address]
[Huawei-bgp] peer ipv4-address eb-max-hop [hop-count ]
指定发送BGP报文的源接口,并可指定发起连接时使用的源地址。指定建立EBGP连接允许的最大跳数。缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。
配置实例
R1的配置如下
[R1] bgp 100
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer10.0.3.3as-number 100
[R1-bgp]peer10.0.3.3connect-interface LoopBack1
R3的配置如下:
[R3] bgp 100
[R3-bgp]router-id 10.0.3.3
(R3-bgp]peer 10.0.1.1as-number 100
[R3-bgp]peer 10.0.1.1 connect-interface LoopBack1
[R3-bgp]peer10.0.34.4as-number 200
- BGP对等体关系、AS号、设备互联地址如图所示
- 所有设备的Loopback1接口地址为10.0.xx/32,其中x为设备编号所有设备都使用Loopback1地址作为RouterID。
- R1、R3之间使用Loopback1地址作为更新源地址建立IBGP对等体关系,R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系。
R4的配置如下:
[R4] bgp 200
[R4-bgp]router-id 10.0.4.4
[R4-bgp] peer 10.0.34.3 as-number 100
- BGP对等体关系、AS号、设备互联地址如图所示
- 所有设备的Loopback1接口地址为10.0.x.x/32,其中x为设备编号所有设备都使用Loopback1地址作为RouterID。
- R1、R3之间使用Loopbaq1地址作为更新源地址建立IBGP对等体关系,R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系。
在R3上查看BGP对等体状态:
2、BGP的路由发布
这里我们搭建如下拓扑来完成之前邻居建立和路由发布的演示。
路由发布 — 对于BGP而言,只要是路由表中存在的路由信息,都可以发布
通过network命令发布路由
[R1-bgp]network 1.1.1024
— 后面跟目标网络号及掩码信息
发布路由后,我们就会使用update包将路由信息传递出去,当然,也会将发布的路由信息记录在BGP路由表中。我们前面说了,BGP路由表是将所有BGP发布及收集到的路由信息记录的表。
那下来我们可以先看下R1的BGP表。 — 我们可以通过命令:[r1]display bgp routing-table
来查看
目前表中只存在一条路信息,因为我们R1本身就只发布了一条1.0网段的路由,其他路由器也并没有发布路由信息。
- network — 目标网段及掩码信息
- NextHop — 谁发送的路由信息,则下一跳就写谁,如果是自己始发的,则下一跳写0.0.0.0 — 包括下一跳及后面的都是BGP设计的路径属性
状态码 — 路由条目最前面的符号,不同的状态码表示了该路由信息的不同状态
- *-- 代表可用。— 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用,如果不可达,则该路由信息将不可用。 — 如果该路由条目不可用,则将不会参与路由信息的优选。
>--
代表优选。 — 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行加表及传递。- i — 状态码为1,代表该路由信息是通过IBGP对等体学到的。
我们这条因为是自己发布出去的,证明这条路由本身就在我们的路由表中,所以,可用性自然是得到保证的。而且,目前我们只有这一条1.0网段的路由信息,所以,我们肯定会让他优选的。那么这条路由就可以进行传递和加表了。
之后,我们可以看下R2的路由表,查到加表信息的路由信息如下。
1.1.1.0/24 EBGP 255 0D 12.0.0.1GigabitEthernet0/0/0址,我们将直接使用下一跳属性中的地址,我们将BGP的路由信息的优先级设置为255。
当然,该路由信息在R2上也是可用且优的,则可以传递给R2的邻居— R3。(则查看R3的BGP表)
我们发现,该路由信息不可用且不优。为啥不可,我们知道,BGP接收到路由信息之后,将尽心可用检查,这条路由的下一跳是12.0.0.1,所以,R3会基于自己的路由表去递归查找12.0.0.1。但是,因为这个网段,我们并没有宣告到OSPF中,所以,R3将检查失败,认定该路由不可用。所以没有。既然不可用,那自然也没有优选符号了。
这里主要是因为AS-BY-AS的规则,导致R2在给R3传递时并没有修改下一跳,所以,R3检查失败
解决方案:
我们需要到R2上做如下配置。
[r2-bgp]peer3.3.3.3 next-hop-local
(这个命令只是把外面传进来的路由的下一跳改成自己)之后我们的路由信息将可以正常传递了。
注意:这里如果R2和R4之间没有建立IBGP对等体关系的话,则R4将无法收到路由信息,主要原因是因为IBGP的水平分割导致。所以,需要保证整个AS 2内部,建立全联接的IBGP对等体关系
通过重发布发布路由
Network宣告的方式,是BGP协议最基本的通告路由的方法。当然,这样做也存在一定的缺点,就是当需要通告的路由量比较大的时候,使用这种方法就会十分的低效。
所以,我们还有另一种通告路由的方式,也就是批量通告的方式。那就是重发布。我们可以直接在BGP中将其他协议生成的路由重发布进来,以达到批量通告的目的。
[r2-bgp]import-route ospf 1
这里执行完成后,可以观察一下路由信息中最后一列的属性 — Ogn — 起源码
起源码一共存在三种
- I—代表这条路由信息起源于AS内部使用network通告出来的
- e—代表来自于EGP协议
- ?—除了以上两种方式,其他方式获取的路由信息都是?
3、BGP的路由聚合
BGP的聚合分为自动聚合和手工聚合,我们分别来进行讲解。
自动聚合
- 自动聚合的缺点:
-
- 自动聚合功能只能针对重发布的路由条目生效o
-
- 自动聚合只能将明细路由直接汇总到主类。-.- 样将会产生巨大的路由黑洞。所以,华为设备默认是关闭o自动汇总功能的。
- 配置命令
-
[r1-bgp]summaryautomatic
— 自动聚合的开启命令
Info: Automatic summarization is valid only for the routes imported through theimport-route command
— 命令执行后会出现信息提示,说明只能针对重发布的路由条目生效。
-
- 汇总完之后,我们在BGP表中发现会多一条汇总网段的路由信息,下一跳是127.0.0.1。
汇总之后,也会在BGP中发布路由信息,下一跳指向本地环回地址,最终也会加表,出接口将递归到空接口。效果就是将在黑洞路由器上自动生成一条到达汇总的空接口路由用来防环。
- 汇总完之后,我们在BGP表中发现会多一条汇总网段的路由信息,下一跳是127.0.0.1。
- 面两个明细路由不再可用,状态码多了一个S。这个S代表的是suppressed— 抑制 — 被抑制的路由信息将不再加表和传递
手工聚合
因为自动聚合存在上述的两个缺点,所以,想要对路由信息进行精准的汇总,则需要使用到手工聚合
手工聚合所使用的命令为— Aggregate
在上图中,路由器按图示的要求建立EBGP对等体关系。R3向BGP发布了172.16.1.0/24及172.16.2.0/24路由(当然,在实际的情况中R3发布的子网路由可能更多,简单起见此处只取了两个子网做代表)。R1及R2能够通过BGP学习到这两条路由。我们便可以在次场景下进行手工聚合。
1.使用aggregate命令配置路由汇总
首先在R1为172.16.1.0/24及172.16.2.0/24这两条子网路由生成汇总路由。R1的关键配置如下:
[R1jbgp 100
[R1-bgplaggregate 172.16.0.016
使用aggregate命令,用户可以灵活地指定汇总路由的目的网络掩码长度,而且不受网络地址类别的限制。
此处为了简单起见,我们直接将汇总路由配置为172.16.0.0/16。
完成上述配置后,如果R1的BGP路由表中存在172.16.0.0/16这个网络下的子网路由,它便会产生BGP汇总路由172.16.0.0/16,并目将这条汇总路由通告给所有的BGP对等体,包括R3及R2,如图7-34所示。这里实际上存在两个问题第一个问题是配置aggregate 17216.0.016命令后,虽然R1的确产生了汇总路由,但是该汇总路由下的明细路由依然会被通告,也就是说R2将会学习172.16.1.0/24、172.16.2.0/24路由以及汇总路由172.16.0.0/16,因此实际上在R1上所做的路由汇总配置意义并不大,R1所通告的路由前缀数量并未减少,R2的路由表规模也并未减小。另一个问题是,R1所产生的这条汇总路由,由于丢失了明细路由的路径信息(尤其是 ASPath属性),因此它们会被通告给R3并被它接收,而且加载到路由表,这样就产生了路由环路的隐患。
2.使用aggregate detail-suppressed命令配置路由汇总
现在我们修改R1上的配置将aggregate命令修改为
[R1]bgp 100
[R1-bgplaggregate 172.16.0.0 16 detail-suppressed
使用aggregate 172.16.0.0 16命令,R1将产生汇总路由172.16.0.0/16并且将汇总及明细路由都通告给R2,如果在这条命令中增加detail-suppressed关键字,R1将只通告汇总路由,而抑制明细路由,如上图所示。完成上述配置后,R1的BGP路由表如下:
在R1的BGP路由表中,明细路由172.16.1.0/24及172.16.2.0/24在行首都有“s”标记,这意味着这些明细路由已经被抑制,不再被通告给其他 BGP对等体。
3.使用aggregate detail-suppressed as-set命令配置路由汇总
当使用aggregate命令配置BGP路由汇总时,如果增加 as-set 关键字,则产生的汇总路由将会继承明细路由的路径属性,其中ASPath属性的继承最为关键。现在将R1的配置修改为如下:
[R1]bgp 100
[R1-bgp]aggrogate 172.16.0.0 16 deuail-suppressed as-set
完成上述配置后,R1将抑制明细路由172.16.1.0/24及172.16.2.0/24,只通告汇总路由172.16.0.0/16(这得益于detail-suppresse关键字),而且由于命令中使用了as-set关键字,因此该条汇总路由将继承172.16.1.0/24及172.16.10.0/24这两条明细路由的路径属性。我们重点关注AS Path属性的继承。首先查看一下R2的 BGP路由表:
从R2的BGP路由表可以看出,它从R1收到的这条汇总路由的AS_Path 属性有了明显的变化,在使用as-set关键字之后,R1产生的汇总路由将会继承明细路由172.16.1.0/24及172.16.2.0/24的 AS_Path属性值,因此300这个AS号被写入汇总路由的AS Path,然后R1将汇总路由通告给EBGP对等体R2时,在该AS Path之前插入本地AS号100,这条汇总路由最终被加载到R2的BGP表中时,ASPath为100 300,如下图所示。另一方面,由于R1所产生的这条汇总路由继承了明细路由的 AS Path 属性,因此R3从R1收到关于该路由的更新后在路由的AS Path中将看到自己本地的AS号,于是它将忽略这个更新。如此一来,路由环路的隐患也就可以得到规避。
4、在aggregate命令中使用suppress-policy关键字
在使用aggregate命令配置路由汇总时,还可以搭配suppress-policy关键字,这个关键字用于通告汇总路由以及被选定的明细路由(换句话说,就是有选择性地抑制明细路由)。以上图为例,如果要求R1将汇总路由172.16.0.0/16以及除了172.16.1.0/24之外的其他明细路由都通告给R2,使用suppress-policy便可以轻松实现这个需求,R1的配置如下:
在上述配置中,我们首先定义了一个名称为no-subnet-1的IP前缀列表,并使用这个IP前缀列表允许了路由172.16.1.0/24。接着创建了一个名称为hcnp1的 Route-Policy,并在这个Route-Policy 的节点10中调用已经定义好的IP前缀列表no-subnet-1。最后,在BGP的配置视图下,使用aggregate 172.16.0.0 16 suppress-policy hcnp1命令通告汇总路由172.16.0.0/16 以及被选定的明细路由(抑制172.16.1.0/24路由,放行其他明细路由)。
suppress-policy关键字意为”抑制策略”因此该关键字所指定的Route-Policy 中,被允许(Permit)的路由将会被抑制。留意到IP前缀列表no-subnet-1的这条语句的匹配模式为Permit,而且 Route-Policy hcnp1的节点10的匹配模式也为Permit,所以只172.16.1.0/24路由被“允许”。
因此最终R2将学习到汇总路由172.16.0.0/16 以及除了172.16.1.0/24之外的其他明细路由。值得注意的是suppress-policy虽然调用了 Route-Policy,但是被调用的Route-Policy 只能用于路由匹配(只能使用if-match命令),不能用于设置路由属性 (不能配置apply命令)。此时,R1的BGP表如下:
172.16.1.0/24路由有“s”标记表明该条路由被抑制。R2的BGP表如下:
Atomic_Aggregate及Aggregator
这是和链路聚合相关的两个路径属性。
在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID,同时通过Atomic-Aggregate属性标明该路由为聚合路由。