「BGP」- 路径属性:AS-Path

  CREATED BY JENKINSBOT

属性概述

类型:该属性为公认必遵属性;
作用:包含前往目标网络的路由经过的 AS Number 列表,以用于 BGP 域间防环检测;

Border Gateway Protocol - UPDATE Message
	Marker: ffffffffffffffffffffffffffffffff
	Length: 52
	Type: UPDATE Message (2)
	Withdrawn Routes Length: 0
	Total Path Attribute Length: 24
	Path attributes
		Path Attribute - ORIGIN: IGP
		Path Attribute - AS_PATH: 100 200                                       # 该路由经过 2 个 AS 区域;
		Path Attribute - NEXT_HOP: 10.1.45.4 
	Network Layer Reachability Information (NLRI)

变更规则

路由在被通告给 EBGP Peer 时(路由**离开**当前 AS 区域),路由器会在该路由的 AS-Path 中追加上本地的 AS Number(域间防环);
路由在被通告给 IBGP Peer 时,AS-Path 不会发生改变,并且不会检查 IBGP Peer 发来的 AS-Path 属性;

属性作用

1)防环:确保路由在 EBGP Peer 间传递无环 ⇒ 如果 AS-Path 存在自身 AS Number,则不拒收该路由,以防止 Inter-AS 环路(补充:Intra-AS 通过 BGP 水平分割进行防环);
2)选路:另外,也作为路由优选的衡量标准之一 ⇒ 如果 AS-Path 越短(个数少),则路由越优先;

Types of AS-Path

AS-SEQENCE

通常出现在串行的链路中,表示 AS-Path 内的 AS Number 是个有序的列表;默认情况 AS-Path 为该类型;

AS-SET

表示该 AS-PATH 包含无序集合;

通常出现在存在并行的链路中:
路由聚合解决两类问题:(1)减轻设备的负担;(2)隐藏明细的路由信息,以减少路由震荡的影响。
但是,当路由聚合后,AS-Path 属性丢失,存在产生环路的风险,为此通过 AS-SET 类型的 AS-Path 属性携带聚合前的 AS-Path 信息。

当发生路由聚合后,为了防环,需要聚合路由携带所有明细路由中 AS_Path 携带的 AS Number,则在配置聚合命令中增加 as-set 参数。
在 R3 上,对 10.0.0.0/16 执行聚合,若添加 AS-SET 关键字,则 AS-PATH 值为 AS-PATH = 300 {100, 200} ,包含 AS-SEQENCE 及 AS-SET 两种类型

在 AS_SET 的示例中,AS 300 内发生路由聚合并配置 as-set 参数,则聚合路由会将明细路由的 AS_Path 信息用一个 AS-Set 集表示(放在中括号{}里的AS号信息,该集合内的AS号没有先后顺序),在聚合路由中携带用以防止环路。

AS-Confed_Sequence, AS-Confed_Set

除了AS-SET、AS-AS-SEQENCE之外,AS-Path 还存在另外两种类型:AS-Confed_Sequence、AS-Confed_Set,这两种类型应用于BGP联邦中;

AS-Path Modification

为了控制选路,我们需要修改 AS-Path 的值。

以华为设备为例,通过 Route-Policy 修改 BGP-Route.AS_Path 属性时,使用以下三种方式:

additive

原有 AS_Path 上追加(体现为在左侧追加内容):

AS_Path: 100
    ||
    vv
apply as-path 300 additive 
    ||
    vv
AS_Path: 300 100

1)为了控制选路,该方法较多使用。
2)注意事项:追加新的 AS-Number 可能会与已有 AS-Number 冲突而触发 Intra-AS 防环机制(比如与下个被通告路由器的 AS Number 冲突,则下个路由器由于防环将拒收)
3)在实践中,我们通常使用 当前设备的 AS Number已存在于 AS-Path 的 AS Number

overwrite

将已有 AS_Path 值替换成新的值:

AS_Path:100 200 300
    ||
    vv
apply as-path 400 overwrite
    ||
    vv
AS_Path: 400

这种减少 AS 的方式,使用较少,如果不小心,很可能导致环路。

none overwrite

将已有 AS_Path 的值清空:

AS_Path:100 200 300
    ||
    vv
apply as-path none overwrite
    ||
    vv
AS_Path: 

运营商和客户对接时,通常会置空内部的 AS Number,仅暴露共有,以防止过渡暴露;前提需要保证没有物理环路;

补充说明

如果在 AS 出接口中使用策略添加 AS Number,要注意 策略修改 AS Number本 AS 追加 AS Number 的执行顺序:
1)在华为设备中,如果是在出接口,将先执行路由策略,再追加本 AS 的 AS Number;