BGPv4特性探究-2@ORF-RFC5291/RFC5292
个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。
- 关于BGP version4相关内容,可参考2006年发布的RFC4271-A Border Gateway Protocol 4;
- 关于BGP Route-Reflect相关内容,可参考2006年发布的RFC4456-BGP Route Reflection:An Alternative to Full Mesh Internal BGP;
- 关于BGP Confederations相关内容,可参考2007年发布的RFC5065-Autonomous System Confederations for BGP;
- 关于BGP可通告Capability相关内容,可参考2009年发布的RFC5492-Capabilities Advertisement with BGP-4;
- 关于4字节AS Number相关内容,可参考2012年发布的RFC6793-BGP Support for Four-Octet Autonomous System Number Space;
自动换行
其他相关资料:
- 关于BGP的Capability Codes详细参数,可参考IANA发布的Capability Codes;
- 关于BGP的其他参数字段的详细内容,可参考IANA发布的Border Gateway Protocol (BGP) Parameters;
- 关于BGP的AFI相关参数,可参考IANA发布的Address Family Numbers;
- 关于BGP的SAFI相关参数,可参考IANA发布的Subsequent Address Family Identifiers (SAFI) Parameters;
- 关于BGP Extended Community Sub-Types,可参考IANA发布的Border Gateway Protocol Extended Communities;
- 关于常用TCP/UDP知名端口的定义,可参考IANA发布的Service Name and Transport Protocol Port Number Registry。
......
Border Gateway Protocol自1989年定义以来已经历过4个版本:1989年RFC1105的Version1,1990年RFC1163的Version2,1991年RFC1267的Version3,1994年RFC1654的Version4。而V4又历经了几次迭代,到目前比较全面完整的是2006年发布的RFC4271。
本文档旨在介绍相关原理,对于不同设备及厂家的实现上不做深究。有意者建议阅读相关资料。个人能力有限,如有疑问欢迎留言指导~
目录
1.相关术语和概念
BGP(Border Gateway Protocol,边界网关协议) 是一个 AS(Autonomous System,自治系统) 间的路由协议。BGP 的主要功能是与其他 BGP 系统交换网络可达性信息。
为便于介绍,在此先介绍一些关于BGP的相关术语:
Autonomous System自治系统
单个路由协议管理下的一组路由器,使用内部网关协议(IGP)和通用度量来确定如何在AS内路由数据包。如果一个AS内运行了多个IGP协议,对于其他AS来说也认为其执行了内部一致的路由规则。
三张处理表/库
1@--Adj-RIB-In:邻居入方向的路由信息表/库。用于描述对等体向自己传输的完整路由信息。该路由表未进行入方向的路由策略。
2@--Adj-RIB-Out:邻居出方向的路由信息表/库。用于描述自己向对等体描述的路由信息,或者放置于Update消息报文中的路由信息。该路由表已进行出方向的路由策略。
3@--Loc-RIB:放置已被本地BGP以便进行选择的路由。该路由表已进行入方向的路由策略。
因此有如下的路由处理过程:
简单来说Adj-RIB-In和Adj-RIB-Out是放置于Update报文中的路由信息。
NLRI
Network Layer Reachability Information,网络层可达信息。放置于Update报文中,主要描述了路由信息或路由的相关属性。
IBGP/EBGP
Internal和External BGP,简单来说为相同AS的对等体关系为IBGP邻居,相反为EBGP。
相关概念:
1@:BGP 使用 TCP 的 179 端口进行相关协议报文的发送和监听。
2@:在建立了完整的 BGP 对等体关系后,BGP 只发送增量更新。而非周期性泛洪或刷新路由表。
因此 BGP 为了使路由有正确的结果需要 TCP 周期保活或使用Route-Refrsh路由刷新。
BGP 提供了如下三种机制进行路由更改:
1@:发送withdraw类型的Update报文,将该路由进行撤销
2@:发送具有相同NLRI的Update报文,进行更新。通过此种方式可以更改路由的属性。
3@:中断BGP连接。
关于 BGP 基本原理的相关内容,可参考博客-BGPv4-原理介绍+报文分析+配置示例。
2.Outbound Route Filtering
2.1.基本原理
在《RFC5291-Outbound Route Filtering Capability for BGP-4》中新定义了一种 Capability Codes 3 = Outbound Route Filtering Capability。同时,在《RFC5292-Address-Prefix-Based Outbound Route Filter for BGP-4》中定义与之对应的 BGP 编码规则。这种方式允许 BGP 可以将自己要求的路由前缀发送给 BGP Peer 提前进行过滤而防止 BGP peer 将路由发送给自己。
通常一个 Outbound Route Filter 条目由 AFI/SAFI、ORF-Type、Action、Match 和 ORF-value 五部分组成,并由 AFI/SAFI 和 ORF-Type 唯一标识在 BGP ROUTE-REFRESH 消息中传递:
1@ -- AFI/SAFI:地址族用于将路由前缀限制为特定的 NLRI。
2@ -- ORF-Type:用于确定 ORF-value 字段的内容类型。
3@ -- Action:用于确定对路由前缀所执行的动作。主要行为有 ADD,REMOVE,REMOVE-ALL。
ADD 用于将新的 ORF 条目添加给 BGP peer;REMOVE 用于通知 BGP peer 将先前安装的 ORF 条目;REMOVE-ALL用于通知 BGP peer 将先前自己要求安装的 ORF 条目删除。
4@ -- Match:用于定义 ORF 条目的颗粒度为 PERMIT 或 DENY。
PERMIT 要求 BGP peer 可以传递与 ORF 条目匹配的路由集的 BGP Update 更新。DENY 要求 BGP peer 不得传递与 ORF 条目匹配的路由集的 BGP Update 更新。
5@ -- ORF-value:用于携带 ORF 条目信息。定义 ORF 时,必须指定其匹配规则以避免歧义。
当 BGP ROUTE-REFRESH 消息中不包含 ORF 条目时,BGP Speaker 向其 peer 发送与 Adj-RIB-Out 关联的所有路由。
2.2.编码格式
Capability Codes 3 = Outbound Route Filtering Capability:
Number of ORFs:1 字节,设备所能支持的 ORF Type 类型数量,并随后携带具体的 ORF Type 类型及其处理能力。
ORF Type:1 字节,包含具体的 ORF 类型。
目前 IANA 标准化了如下几种类型 ORF Type:
此处重点介绍 ORF Type 64。
Send/Receive:1 字节,用于指示发送者的 ORF 需求。
值 1 表示发送者愿意从 BGP peer 接收 ORF 条目,值 2 表示发送者愿意向 BGP peer 发送 ORF 条目,值 2 表示两者都有。只有当 BGP 邻居之间具有相匹配的 ORF 需求是,BGP Speaker 才能向其 BGP peer 发送包含一个或多个 ORF 条目的 BGP ROUTE-REFRESH 消息。
BGP Open 消息携带 Outbound Route Filtering Capability 示例。
自动换行
Capability Codes 3 = Outbound Route Filtering Capability:
When-to-refresh:1 字节,置 1 时表示 IMMEDIATE,置 2 时表示 DEFER。
IMMEDIATE 时,BGP Speaker 必须重新通告与 AFI/SAFI 对应的路由。
DEFER 时,BGP Speaker 可以延迟通告与 AFI/SAFI 对应的路由,直到 BGP Speaker 收到同一 AFI/SAFI 的但不包含 ORF 条目的 ROUTE-REFRESH 消息或者包含 ORF 条目但 When-to-refresh 设置为 IMMEDIATE 的 ROUTE-REFRESH 消息。
当存在除 ORF 以外的策略需要更新路由时,必须使用 DEFER 方式的 ORF 条目。
ORF Type:1 字节,,包含具体的 ORF 类型。
目前 IANA 标准化了如下几种类型:
此处重点介绍 ORF Type 64。
Length of ORF entries:1 字节,除 ORF Type 和 Length 以外的 ORF 条目的长度。
N * ORF entries:不定长,携带具体的 ORF 条目信息。
在《RFC5291-Outbound Route Filtering Capability for BGP-4》中定义
Action = 0 表示前文定义的 ADD;Action = 1 表示前文定义的 REMOVE;Action = 2 表示前文定义的 REMOVE-ALL。
Match = 0 表示前文定义的 PERMIT;Match = 1 表示前文定义的 DENY。
在《RFC5292-Address-Prefix-Based Outbound Route Filter for BGP-4》中定义了如上所示的 ORF Type 64 = Address-Prefix-Based ORF 编码格式。
2.3.配置示例
Address-Prefix-Based ORF 配置示例:
#
ip ip-prefix test index 10 permit 111.0.0.0 24
ip ip-prefix test index 20 deny 222.0.0.0 24 greater-equal 28 less-equal 32
#
bgp 100
router-id 2.2.2.2
peer 10.1.2.1 as-number 100
#
ipv4-family unicast
undo synchronization
peer 10.1.2.1 enable
peer 10.1.2.1 ip-prefix test import
peer 10.1.2.1 capability-advertise orf ip-prefix both
#
需要注意的是
1@:ORF 作为一种新的 BGP capability 需要在 Open 阶段进行协商,因此需要 BGP 之间都支持针对 AFI/SAFI 的能力。如果会话已经建立,将重新触发 BGP 建链。
2@:ORF capability 通常需要在 BGP peer 侧控制发送给 BGP Speaker 自己的路由,因此应在 import 出向进行。
发送 Route-Refresh 报文携带 ORF 信息示例。ORF Type 128 为厂商私有封装格式,此处与 ORF Type 64 = Address-Prefix-Based ORF 相同而作为示例展示。
更新
本文来自博客园,作者:m风行者,转载请注明原文链接:https://www.cnblogs.com/FengXingZhe008/p/18859975