且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《OSPF和IS-IS详解》一2.3 BGP路径属性

更新时间:2022-09-20 15:41:12

本节书摘来异步社区《OSPF和IS-IS详解》一书中的第2章,第2.3节,作者: 【美】Jeff Doyle 译者: 孙余强 责编: 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 BGP路径属性

BGP设计与实现
BGP路径属性是一组描述BGP前缀特性的参数。由于BGP首先是一个路由选择策略工具,因此BGP在影响路径选择的时候,广泛地使用了这些属性。在设计一个有效率的BGP路由选择体系结构中,有效地利用这些属性是十分关键的。这一节将着重讲述一些通用的BGP属性,而在后面的章节中会作更为深入的讨论。

Cisco IOS软件目前支持以下这些属性:

  • ORIGIN(起源);
  • AS_PATH(AS路径);
  • NEXT_HOP(下一跳);
  • MULTI_EXIT_DISC(多出口鉴别);
  • LOCAL_PREF(本地优先);
  • ATOMIC_AGGREGATE(原子聚合);
  • AGGREGATOR(聚合者);
  • COMMUNITY(团体);
  • ORIGINATOR_ID(起源者标识);
  • CLUSTER_LIST(簇列表);
  • Multiprotocol Reachable NLRI(多协议网络层可达性信息,MP_REACH_NLRI);
  • Multiprotocol Unreachable NLRI(多协议网络层不可达性信息,MP_UNREACH_NLRI)。
    以下是对一些更常用的BGP属性的简要概述。后面的章节将讨论其他的属性。

2.3.1 ORIGIN

这个属性指出了前缀的起源。有3种可能的起源:

  • IGP——ORIGIN为0;
  • EGP——ORIGIN为1;
  • INCOMPLETE——ORIGIN为3。

在路径选择过程中,具有较低的ORIGIN值的前缀被优先选择。在前缀被注入进BGP时,它的ORIGIN属性是自动被定义的,但是可以使用路由映射来更改。例如,如果前缀通过redistribute命令被重分布到BGP中,那么它的ORIGIN属性就会被设置为3;如果前缀通过network命令被注入到BGP中,那么它的ORIGIN属性就会被设置为0。事实上,由network命令发起的路由优于那些被重分布的路由。

2.3.2 AS_PATH

AS_PATH列表以相反的顺序列出了一条前缀先后所经过的自治系统,最后一个AS放置在该列表的开始处。AS_PATH的主要目的是为AS域间路由选择提供环路防止机制。列表中可接受的自治系统的数目在1~255之间。因为AS_PATH列表最短的路径优先,因此在列表中前置(prepending)相同的AS号是影响入站路径选择的常用方法。Cisco IOS软件在AS_PATH中支持4种类型的AS段:

  • AS_SET;
  • AS_SEQUENCE;
  • AS_CONFED_SET;
  • AS_CONFED_SEQUENCE。

SET和SEQUENCE的不同之处在于,SET选项下的自治系统的列表是无序的(关于该路径所经过的自治系统),而SEQUENCE选项下的自治系统的列表是有序的。后两者仅仅应用于本地联盟内部发起的路径。另外,在路径选择中,它们的计数方法是不同的,这将在“路径决策过程”一节中讨论。

2.3.3 NEXT_HOP

从BGP的角度来看,这个属性定义了到达某条前缀的下一跳IP地址。这并不意味着下一跳地址必须是直连的。如果BGP下一跳并不是直连的下一跳,那么就需要在IP RIB中执行递归路由查找。前缀必须要先有可达的下一跳,然后BGP在***路径选择过程中才会考虑这条前缀。换句话说,下一跳必须要在路由选择表中某条前缀的下面,包括默认路由0.0.0.0/0。BGP路径的下一跳属性通常在3个地方被设置:

  • 当前缀一开始被注入到BGP时,它的下一跳地址由注入该前缀的BGP宣告者(speaker)来设置。下一跳的值依赖于前缀被注入进BGP的方式。如果前缀是通过aggregate- address命令被注入的,那么前缀的BGP下一跳就是进行路由聚合的那个BGP宣告者。如果前缀是通过network命令或者重分布被注入到BGP中的,那么注入前的IGP下一跳现在就成为BGP下一跳。例如,假设一条OSPF前缀被重分布到BGP中,那么BGP下一跳就不一定是进行重分布的BGP宣告者,而是OSPF前缀原来的下一跳。因此,在这样的情况下,我们建议在重分布点将BGP下一跳重置为BGP宣告者自身。如果IGP下一跳不存在(例如在路由指向Null0接口的情况下),那么下一跳就是BGP宣告者自身。如果本地的BGP宣告者成了下一跳地址,那么BGP RIB中的下一跳字段就是0.0.0.0。出站更新数据包中的下一跳被设置为本地的BGP对等会话地址。
  • 当前缀通过eBGP被通告出去时,下一跳会自动地被设置为那个正在发送该前缀的eBGP对等体的IP地址。如果3个或更多的对等体正在共享一个相同的多路访问(multiaccess)网络,那么正在作通告的宣告者会把同一个网段上原来的宣告者设置为下一跳,而不是它自身。这叫“第三方下一跳”(third-party next hop)。
  • 通过使用路由映射或者next-hop-self命令可以手工地更改下一跳。注意对于同一个AS中的BGP会话来说,默认条件下,下一跳不会被改变。

2.3.4 MULTI_EXIT_DISC

MULTI_EXIT_DISC(MED)属性典型地被用在AS间的链路上,以区分到达相同的邻居自治系统的多个出口/入口点。Cisco IOS软件也允许你使用命令- bgp always-compare-med
,在不同的自治系统之间比较MED。MED值由度量值来表示。它的用法与度量的用法是一致的,具有较低MED值的路径被优先选择。

在Cisco IOS软件中,下面是一些MED设置和通告的规则:

  • 如果路由从iBGP对等体学到,那么边界路由器在把这条路由通告给eBGP对等体之前,会清除它的MED。在这种情况下,如果要强制边界路由器通告MED,可以为那个eBGP对等体配置路由映射命令set metric-type internal。
  • 在边界路由器本地被注入到BGP中的路由在被通告给eBGP对等体时携带MED值。度量值由下列规则来确定:
      — 如果通过networkredistribute命令注入到BGP中的路由是来自于IGP的,那么BGP MED从IGP度量中导出;

  — 如果通过networkredistribute命令注入到BGP中的路由是来自于直连路由的,那么BGP MED被设为0;

  — 如果通过aggregate-address命令注入路由,那么BGP MED不被设置。

2.3.5 LOCAL_PREF

LOCAL_PREF是iBGP宣告者用来计算每一条外部路由的优先程度的属性。本地优先属性在iBGP对等体之间被交换,以设置离开AS的优先出口点。具有较高的LOCAL_PREF值的路径被优先选择。这个属性不包含在eBGP前缀通告中(典型地,在入境eBGP更新中被手工设置),并且仅仅被同一个AS内的路径选择处理所使用。作为比较,在eBGP链路上,MED从一个AS被发送到另外一个邻居AS,以影响接收AS的出境策略。

注意:

Cisco IOS软件中另外一个参数——WEIGHT(权重)可以影响路径选择。这个参数是Cisco专有的,而且对配置这个参数的路由器来说是本地有效的。也就是说,WEIGHT设置不在路由器之间交换。

2.3.6 COMMUNITY

COMMUNITY被一组共享相同的特性的前缀所定义。多个团体可以应用到一条前缀上,每个团体有4字节长。团体属性有以下两种类型:

Well-known communities(熟知团体)——当接收到这些带有团体属性的前缀时,对等体会自动地根据预先定义的团体属性的意义来采取操作。不需要额外的配置。在RFC 1997中,熟知团体属性落在保留值的范围内,即0xFFFF0000~0xFFFFFFFF。
Private communities(私有团体)——由网络管理员定义的团体,并且在不同自治系统的对等体之间,这些团体必须相互协调。必须明确地配置所采取的行为。私有团体的值在保留范围以外。
当前,Cisco IOS软件支持4种熟知团体属性:

  • NO_EXPORT——带有这个属性的前缀不应该被通告给eBGP对等体,但可以被发送给同一个联盟内的子自治系统(subautonomous system)。这个团体的值为0xFFFFFF01。
  • LOCAL_AS——带有这个属性的前缀不会被通告到本地AS之外。在联盟的情况下,只有同一个子自治系统中的对等体才被允许接收这些前缀。如果不在联盟的情况下,LOCAL_AS和NO_EXPORT被一样对待。在RFC 1997中,NO_EXPORT_SUBCONFED (0xFFFFFF03)就是为这种情况定义的。
  • NO_ADVERTISE——带有这个属性的前缀不会被通告给任何对等体,包括内部的或外部的对等体。该属性的值为0xFFFFFF02。
  • INTERNET——带有这个属性的前缀被通告到Internet。换句话说,这些前缀的通告是没有限制的。这个熟知团体属性在RFC 1997中没有被明确地定义。在Cisco IOS软件中,每一条前缀都属于这个INTERNET团体(值为0)。

更常用的团体是私有团体。使用它们的主要目的是为前缀附加管理标记,以便制定合适的策略。私有团体使用AS:number的格式,其中AS是指本地AS号或对等体AS号,而number是指本地分配的,或与对等体AS协商分配的任意数值,用来表示可以应用策略的一组团体。这种用户友好的(user-friendly)格式可以在全局配置模式下由ip bgp-community new-format命令来启用。

2.3.7 ORIGINATOR_ID

当路由反射器(route reflector,RR)被部署时,ORIGINATOR_ID在AS内被用作环路防止机制。它由第一个RR创建,并且不被后续的RR所更改。ORIGINATOR_ID是以下这些路由器的路由器标识(router ID):

  • 在本地AS始发路由的BGP宣告者,例如使用network命令注入的路由就是这种路由;
  • 如果路由是通过eBGP学到的,那么就是同一个AS的边界路由器。

ORIGINATOR_ID是一个32bit长的数值,并且只应该从iBGP对等体那里接收到。在RR上,ORIGINATOR_ID用来替代路径选择过程中的router ID。当iBGP宣告者接收到的更新包含了它自己的ORIGINATOR_ID时,它就会丢弃路由,这样就打破了路由选择信息环路。如果ORIGINATOR_ID已经存在的话,BGP宣告者就不应该再创建一个。

2.3.8 CLUSTER_LIST

当路由反射器被部署时,CLUSTER_LIST在AS内被用作另一个环路防止机制。这个属性记录了在RR的环境中,前缀所经过的CLUSTER_ID的列表。当RR从它的客户那里反射路由到簇(cluster)外的非客户时,或从非客户反射路由到客户时,或从一个客户反射路由到另一个客户时,它会把本地CLUSTER_ID添加到CLUSTER_LIST的前面。如果路由更新的CLUSTER_LIST为空,那么RR就会创建一个。使用这个属性,RR能够识别出路由选择信息是否又环回到了同一个簇。如果在CLUSTER_LIST中发现了本地CLUSTER_ID,那么这个更新就会被丢弃,这样就打破了路由选择信息环路。第7章将详细地讨论CLUSTER_LIST和CLUSTER_ID的设计和配置问题。