Title

BGPv4特性探究-6@Well-known Communities、Extended Communities和Large Communities-RFC1997/RFC4360/RFC8092

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

自动换行

其他相关资料

......

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.配置示例

2.1.基本原理

2.1.1.普通Communities-RFC1997/RFC8642

《RFC1997-BGP Communities Attribute》中定义了一种 BGP Path Attributes Code 8 = COMMUNITIES。这是一种 optional transitive 可选过渡的 Attributes。

1@:该 Attributes 由一系列 4 字节值组成,每一个值都是一个 community。所有的路由都具有默认的 Internet community。
2@:Attributes 的每一个 community 取值为 0x0000000 - 0xFFFFFFFF。其中 0x00000000 - 0x0000FFFF,以及 0x00010000 - 0xFFFEFFFF 作为 Reserved 使用。
3@:常用的 BGP Path Attributes Code 8 = COMMUNITIES 可以由 2 字节的 AS Number + 2 字节的人为定义组成。
4@:此外,协议还定义了 Well-known Communities。这是具有全局意义并且应被所有可以识别 community-attribute-aware BGP Speaker 执行的特殊 community。
如下介绍 4 种常见的 Well-known Communities,其他 BGP Well-known Communities 可参考 IANA 发布的《BGP Well-known Communities》

  1. NO_EXPORT (Value = 0xFFFFFF01,RFC1997)。
    所有带有包含此值的 BGP Path Attributes Code 8 = COMMUNITIES Attributes 的路由不得在 BGP confederation 边界之外公布。实际上也包含普通的 eBGP peer。
  2. NO_ADVERTISE (Value = 0xFFFFFF02,RFC1997)。
    所有带有包含此值的 BGP Path Attributes Code 8 = COMMUNITIES Attributes 的路由不得通告给其他 BGP peer
  3. NO_EXPORT_SUBCONFED (Value = 0xFFFFFF03,RFC1997)。
    所有带有包含此值的 BGP Path Attributes Code 8 = COMMUNITIES Attributes 的路由不得通告给其他 eBGP peer 且不得通告给 BGP confederation 内的 eBGP peer
  4. NOPEER (Value = 0xFFFFFF04,RFC3765)。
    在 origin AS 中用于指定所有带有包含此值的 BGP Path Attributes Code 8 = COMMUNITIES Attributes 的路由应在外部传播的程度

5@:如果路由被聚合但聚合的路由不包含 BGP Path Attributes Code 6 = ATOMIC_AGGREGATE Attributes,则路由应产生一个包含了所有被聚合路由 communities 的 BGP Path Attributes Code 8 = COMMUNITIES。

《RFC8642-Policy Behavior for Well-Known BGP Communities》中又进行了详细定义,以避免不同运营商对 BGP Path Attributes Code 8 = COMMUNITIES 有不同的处理行为。

比如,关于《RFC1997-BGP Communities Attribute》中原文修改路由的 COMMUNITIES 时,有些运营商使用 set 语法进行修改会用新的集合替换了所有 COMMUNITIES,同时包括 Well-known COMMUNITIES。而运营商会替换所有非 Well-known COMMUNITIES,但不会修改任何存在的 Well-known COMMUNITIES。

《RFC8642-Policy Behavior for Well-Known BGP Communities》中给出了如下例子:
1@Juniper Networks' Junos OS:community set 将移除所有 BGP Communities。
2@Cisco IOS XR:set community 将移除所有 BGP Communities,但 0:0(internet)65535:0(graceful-shutdown)65535:1(accept-own)65535:65281(NO_EXPORT)65535:65282(NO_ADVERTISE)65535:65283(NO_EXPORT_SUBCONFED/local-AS) 等除外。要移除此内容,需显式指定。
3@Extreme networks' Brocade NetIron:set community X 将移除所有 BGP Communities 并设置为 X。
4@Huawei's VRP product:community set 将移除所有 BGP Communities。
5@OpenBGPD:set community 将移除所有 BGP Communities。
6@Nokia's SR OS:replace 将所有 community 替换为指定的 community。

鉴于上述行为等原因,《RFC8642-Policy Behavior for Well-Known BGP Communities》建议在后续包括 BGP Path Attributes Code 32 = LARGE_COMMUNITY,BGP Path Attributes Code 34 = wide communities 等属性中应严格声明其处理原则。

《Internet-Draft-BGP Community Container Attribute》中定义了 BGP Path Attributes Code 34 = wide communities/BGP Community Container Attribute。这一 Attribute 能够包含本地定义的参数,以增强了当前网络策略级别简化了 BGP 策略管理。

2.1.2.Extended Communities-RFC4360

《RFC4360-BGP Extended Communities Attribute》中提供了一种新的 BGP Path Attributes Code 16 = EXTENDED COMMUNITIES。这是一种 optional transitive 可选过渡的 Attributes。该属性主要提供了两个重要的增强。

1.经扩展的范围。可以确保 community 被分配用于多种用途,而不必担心重叠。
2.添加 Type 字段为 community 空间提供了结构。结构的改变允许根据将使用 community 值的应用程序使用策略。例如,可以过滤掉特定类型的所有社区,或者只允许特定类型的社区使用某些值。如果没有结构,则只能通过显式枚举所有 community 值来实现。

1@:Extended Communities 可以用于控制接收来自邻居和向邻居通告特定路由。一种典型的用法是在 MPLS/LDP BGP 网络中使用 Route Target 进行特定路由的通告和接收。
2@:Extended Communities 必须不参与路由竞选。这有可能导致路由环路。
3@:BGP speaker 可以接收不携带 Extended Communities 的路由并在通告时添加该 attribute。或者接收携带 Extended Communities 的路由并在通告时修改该 attribute。

4@:默认情况下,如果要聚合路由不带有 BGP Path Attributes Code 6 = ATOMIC_AGGREGATE Attributes,则生成的聚合路由应具有一个 BGP Path Attributes Code 16 = EXTENDED COMMUNITIES Attributes。该属性包含来自所有被聚合路由的所有BGP Path Attributes Code 16 = EXTENDED COMMUNITIES Attributes 的并集。并允许默认行为可以通过本地配置覆盖。

5@:如果路由具有 non-transitivity Extended Communities 非过渡性扩展社区,则在跨 Autonomous System 边界通告路由之前,应从路由中删除该 Extended Communities。

2.1.3.Large Communities-RFC8092/RFC8195

《RFC8092-BGP Large Communities Attribute》中定义了一种新的 BGP Path Attributes Code 32 = LARGE_COMMUNITY。这是一种 optional transitive 可选过渡的 Attributes。这种属性用于扩展原有 BGP Path Attributes Code 8 = COMMUNITIES 和 BGP Path Attributes Code 16 = EXTENDED COMMUNITIES 的使用。

对于 BGP Path Attributes Code 8 = COMMUNITIES 而言,高位 2 字节被解释为 AS Number,低位 2 字节是本地人为定义值。由于采用了 4 字节的 AS Number,则该属性无法再容纳上述编码。而 BGP Path Attributes Code 16 = EXTENDED COMMUNITIES 也不合适在 Global Administrator 和 Local Administrator 中封装 4 字节的 AS Number。

为了解决上述问题,BGP Path Attributes Code 32 = LARGE_COMMUNITY 编码为一组或多组 12 个八位字节的值。

1@:多个 12 字节 Large Community Attribute 值的顺序没有意义。
2@:不得传输重复的 Large Community 值。BGP Speaker 接收者必须以静默方式从 BGP Large Community Attribute 中删除冗余的 BGP Large Community 值。

3@:如果聚合了一系列路由,则生成的聚合路由应具有 BGP Large Community Attribute。该属性包含来自所有聚合路由的所有 BGP Large Community Attribute 值。

4@:BGP Large Community 的规范表示形式是三个单独的十进制无符号整数,且沿着 Global Administrator、Local Data Part1、Local Data Part2 的顺序排列。数字不得包含前导零;零值必须用单个零表示。每个数字与下一个数字之间用一个冒号分隔。
例如:64496:4294967295:2,64496:0:0。

《RFC8195-Use of BGP Large Communities》中又进一步定义了 BGP Large Community 的使用。

其中 community 可以分为 Informational CommunitiesAction Communities

5@:Informational Communities 可以作为 Attribute labels 用于标识路由通告的来源,与外部 EBGP 邻居的关系性质,或预期传播受众。此外还可以帮助为日常网络运维提供有价值的信息,例如如调试或容量规划。通常,Informational Communities 的目标受众是下游网络和 Global Administrator 本身,但任何 AS 都可以从接收这些 communities 中受益。

6@:Action Communities 可以作为 labels 用于请求在 AS 中以特定方式处理路由。一种常用方式是通过路由策略更改路由的 BGP Attribute。
同时一个 Action Community 也可以是 Informational。

2.2.编码格式

1@普通Communities
图片
BGP Path Attributes Code 8 = COMMUNITIES 由一系列 4 字节值组成。
每一个 4 字节 Community 的前 2 个字节中通常使用 AS Number 进行编码,最后 2 个字节的可以由自治系统定义。
此外,IANA 还定义了部分 Well-known Communities 的值,该内容可参考《Border Gateway Protocol (BGP) Well-known Communities》

自动换行
2@Extended Communities
图片
《RFC4360-BGP Extended Communities Attribute》中定义每一种 Extended Community 有 8 字节。其中 Type 字段分为 Type high 和 Type low:
Type high:1字节,主要用于描述 Extended Community 是 Regular 类型还是 Extended 类型。

图片
这一字节的高位 bit 进行了定义又可分为 I-bit (IANA-bit 用于描述是否支持 First Come First Serve) 和 T-bit (Transitive-bit 用于描述是否支持在AS内传递。)。
自动换行
例如在《RFC7153-IANA Registries for BGP Extended Communities》中有区分:

  • 0x00 为 Transitive Two-Octet AS-Specific Extended Community;
  • 0x01 为 Transitive IPv4-Address-Specific Extended Community;
  • 0x02 为 Transitive Four-Octet AS-Specific Extended Community;
  • 0x03 为 Transitive Opaque Extended Community;
  • 0x06 为 EVPN Extended Community;

等等 Type high 不在进行介绍,感兴趣者可自行查阅资料。

Type low:1字节,主要用于描述每种 Extended Community 的具体类型。

例如有

  • 0x0002(RFC4360) 表示 Transitive Two-Octet AS-Specific 的 Route-Target。
  • 0x0102(RFC4360) 表示 Transitive IPv4-Address-Specific 的 Route-Target。
  • 0x0202(RFC5668) 表示 Transitive Four-octet AS 的 Route-Target。
  • 0x0002(RFC5701/RFC7153) 表示 IPv6-Address-Specific Extended Community 下的 Route-Target。其与上述所描述的 Extended Community 最大区别在于IPv6 Address Specific extended community 长度为 20 字节而 IPv4 为 8 字节。该扩展团体属性由新定义的 BGP Path Attribute Type 26 = IPv6 Address Specific Extended Community 携带,用于纯 IPv6 环境。详情可查看《RFC5701-IPv6 Address Specific BGP Extended Community Attribute》

图片
这里几种 Route-Target 属性的区别是 Value 字段的组成格式不同,通常采用 0x0002 格式下的 Route-Target。这里不在进行进一步介绍,感兴趣者可查阅相关资料。

关于BGP Extended Community 的详细分类,可参考 IANA 发布的《Border Gateway Protocol Extended Communities》

自动换行
3@Large Communities
图片
1@Global Administrator:4 字节长。该字段应填充为 AS Number 并通常被解释为 AS Number 所有者。此外,不建议使用预留 AS Number(0 [RFC7607]、65535 和 4294967295 [RFC7300])。
2@Local Data Part1:4 字节长。在《RFC8195-Use of BGP Large Communities》中被解释为 function ID。
3@Local Data Part2:4 字节长。在《RFC8195-Use of BGP Large Communities》中被解释为参数值。

《RFC8195-Use of BGP Large Communities》中给出了如下例子说明了 Large Communities 的用法。例如,可以
1@可以指定 function = 1 表明学习来源:当 Local Data Part2 遵循 ISO 3166-1 numeric country identifier 时,64497:1:840 可以表示路由从美国学习而来,64497:1:392 可以表示路由从日本学习而来。
2@可以指定 function = 2 表明学习来源:当 Local Data Part2 遵循 United Nations Statistics Division 发布的 M.49 numeric code 时,64497:2:2 可以表示路由从非洲学习而来,64497:2:150 可以表示路由从欧洲学习而来。
3@可以指定 function = 3 表明路由关系:此时,64497:3:1 可以表示路由从内部学习而来,64497:3:2 可以表示路由从客户网络学习而来,64497:3:3 可以表示路由从邻居网络学习而来。
4@可以指定 function = 4 表明具有基于 AS Number 的 NO_EXPORT 行为:此时,64497:4:64498 可以表示路由不得向 AS = 64498 发布,64497:4:65551 可以表示路由不得向 AS = 65551 发布。
5@可以指定 function = 5 表明具有基于 Location 的 NO_EXPORT 行为:此时,64497:5:840 可以表示路由不得向美国发布,64497:5:392 可以表示路由不得向日本发布。
6@可以指定 function = 6 表明具有基于 AS Number 的 AS_PATH Prepending 行为:此时,64497:6:64498 可以表示路由向 AS = 644981 发布时将 AS_PATH 追加 64497,64497:6:65551 可以表示路由向 AS = 65551 发布时将 AS_PATH 追加 64497。
7@可以指定 function = 7 表明具有基于 Location 的 AS_PATH Prepending 行为:此时,64497:7:840 可以表示路由向840发布时将 AS_PATH 追加 64497,64497:7:392 可以表示路由向日本发布时将 AS_PATH 追加 64497。
自动换行
此处仅做部分示例,感兴趣者可查看相关资料。

2.3.配置示例

1@普通Communities
图片
peer advertise-community 用来配置将 BGP Path Attributes Code 8 = COMMUNITIES 发布给 peer。默认不发布,并且仅能通过路由策略的方式向 peer 发布。

自动换行
自动换行
图片
ip community-filter basic 用来配置一个基于具体 Communities 值的过滤器。

图片
ip community-filter advanced 用来配置一个基于正则表达式的 Communities 过滤器。

1@:同一个过滤器的同一个 Sequence 的过滤器中的 Communities 值之间是“与”的关系。
2@:同一个过滤器的不同个 Sequence 的过滤器中的 Communities 值之间是“或”的关系。
3@:过滤器的默认行为是 deny,即路由如果没有在某一次过滤中被 permit 则最终不能通过该过滤器的过滤。

自动换行
自动换行
图片
if-match community-filter 用于在路由策略中匹配对应的 Communities 过滤器。
图片
apply comm-filter delete 用于在路由策略中如果可匹配 Communities 过滤器,删除对应的 Communities。但此时调用的 Communities 过滤器中的每条 Sequence 必须仅包含一个 Community 值,否则不生效。
图片
apply community 用于在路由策略中为路由应用特定的 Community 值。

自动换行
自动换行
图片
ip community-list 用于指定一系列 Community 值的集合。
图片
apply community community-list 用于在路由策略中为路由应用特定的 Community 值。

自动换行
2@Extended Communities
图片
peer advertise-ext-community 用来配置将 BGP Path Attributes Code 16 = EXTENDED COMMUNITIES 发布给 peer。vpnv4 邻居默认发布,其他邻居默认不发布。

图片
ip extcommunity-filter basic 用来配置一个基于具体 Extended Communities 值的过滤器。

图片
ip extcommunity-filter advanced 用来配置一个基于正则表达式的 Extended Communities 过滤器。
图片
ip extcommunity-list 用来配置一系列 Extended Communities 值的集合。仅支持路由策略匹配。

自动换行
自动换行
图片
if-match extcommunity-filter 用于在路由策略中匹配对应的 Extended Communities 过滤器。
图片
if-match extcommunity-list 用于在路由策略中匹配对应的 Extended Communities 集合。
图片
apply extcommunity 用于在路由策略中为路由设置具体的 Extended Communities 值。

自动换行
3@Large Communities
图片
peer advertise-large-community 用来配置将 BGP Path Attributes Code 32 = LARGE_COMMUNITY 属性发布给 peer。

自动换行
自动换行

图片
ip large-community-filter basic 用来配置一个基于具体 Large-Communities 值的过滤器。
图片
ip large-community-filter advanced 用来配置一个基于正则表达式的 Large-community 属性过滤器。
图片
large-community 用来为配置具体 Large-community 值。

自动换行
自动换行

图片if-match large-community-filter 用来在路由策略中匹配 Large-community 过滤器。
图片apply large-community 用来针对路由设置具体的 Large-community 值。
图片
apply large-community-list 用来针对路由依照 BGP Large-community 属性列表设置具体的 Large-community 值。

点击此处回到目录

更新

posted @ 2025-07-16 21:18  m风行者  阅读(50)  评论(0)    收藏  举报