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

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的设计和配置问题。

时间: 2024-11-27 13:14:07

《OSPF和IS-IS详解》一2.3 BGP路径属性的相关文章

详解JavaScript正则表达式中的global属性的使用_基础知识

 global是正则表达式对象的只读布尔属性.它指定是否一个特定的正则表达式进行全局匹配.否则它使用"g"属性创建.语法 RegExpObject.global 下面是参数的详细信息:     NA 返回值: 如果"g"修改被设置返回"TRUE",否则返回"FALSE". 例子: <html> <head> <title>JavaScript RegExp global Property&l

详解jQuery中的元素的属性和相关操作_jquery

元素属性 元素的属性中可以包含很多有用的信息,所以如何设置或得到属性中的值,就显得非常重要. jQuery 的 $.fn.attr 方法可以作为 setter 和 getter 使用,用来设置或获取属性的值.和 $.fn.css 用法类似,$.fn.attr 既可一次性接受单个属性,也可以接受多个属性(对象) : $('a').attr('href', 'allMyHrefsAreTheSameNow.html'); $('a').attr({ 'title' : 'all titles are

CSS样式----图文详解(二):css属性

主要内容 CSS的单位 字体属性 文本属性 背景属性 列表属性 盒子模型 定位属性:position.float.overflow.z-index等 导航栏的制作 鼠标的属性cursor 滤镜的介绍 CSS的单位: html中的单位只有一种,那就是像素px,所以单位是可以省略的,但是在CSS中不一样.CSS中的单位是必须要写的,因为它没有默认单位. 绝对单位:1 in=2.54cm=25.4mm=72pt=6pc. 各种单位的含义:in:英寸Inches (1 英寸 = 2.54 厘米)cm:厘

详解Windows 8.1的桌面属性

根据之前多则报道,Windows 8.1 将支持用户开机时直接启动到传统桌面,从而完全跳过暂时很陌生的"开始屏幕",现在又有一张新的截图表明,微软该新系统中不仅把该传统功能当做了系统选项,而且还提供了更丰富的自定义设置. 正如图上所示,"任务栏属性(Taskbar and Navigation properties)"其中的一个选项卡"导航(Navigation)"里,我们可以看到这个位置好汉了很多 Windows 8 新的自定义功能选项. 我们

详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度_javascript技巧

分析并操作 responseXML属性  如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析而来的 DOM 对象,这很难被操作和分析.这里有五种主要的分析 XML 文档的方式:  1.使用 XPath 定位到文档的制定部分.  2.使用 JXON 将其转换成 JavaScript 对象树.  3.手工的 解析和序列化 XML 为字符串或对象.  4.使用 XMLSerializer 把 DOM 树序列化成字符

实例详解CSS滤镜(1)概述

css|滤镜|详解 CSS的滤镜属性的标识符是filter.为了使您对它有个整体的印象,我们先来看一下它的书写格式: filter:filtername(parameters) 怎么样?是不是很简单,看上去与前面讲的属性定义没什么太大的差别.Filter是滤镜属性选择符. 也就是说,只要您进行滤镜操作,就必须先定义filter:filtername是滤镜属性名,这里包括alpha.blur.chroma等等多种属性,详细内容请看下表:   上面filter表达式中括号内的parameters是表

JavaScript脚本语言描述:document 文挡对象详解

javascript|对象|脚本|详解 ---------------------------------------------------------------------注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写   否则会提示你一个错误信息 "引用的元素为空或者不是对象"--------------------------------------------------------------------- 对象属性document.titl

c#重点知识详解(三)(转)

详解 第三章: 类属性 使用过RAD开发工具的一定inspector很熟悉,程序员通过它可以操作对象的属性,DELPHI中引入了PUBLISH关键字来公布对象属性受到程序员的普遍欢迎.通过存取标志来访问private成员,在c#中有两种途径揭示类的命名属性--通过域成员或者通过属性.前者是作为具有公共访问性的成员变量而被实现的:后者并不直接回应存储位置,只是通过存取标志(accessors)被访问.当你想读出或写入属性的值时,存取标志限定了被实现的语句.用于读出属性的值的存取标志记为关键字get

c#重点知识详解(三)

详解 第三章: 类属性使用过RAD开发工具的一定inspector很熟悉,程序员通过它可以操作对象的属性,DELPHI中引入了PUBLISH关键字来公布对象属性受到程序员的普遍欢迎.通过存取标志来访问private成员,在c#中有两种途径揭示类的命名属性--通过域成员或者通过属性.前者是作为具有公共访问性的成员变量而被实现的:后者并不直接回应存储位置,只是通过存取标志(accessors)被访问.当你想读出或写入属性的值时,存取标志限定了被实现的语句.用于读出属性的值的存取标志记为关键字get,