百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

BGP的路由属性

zhezhongyun 2025-08-05 22:20 19 浏览

任何一条BGP路由都拥有多个路由属性,当路由器将BGP路由通告给它的对等体时,一并被通告的还有路由所携带的各个路由属性。对于BGP而言,BGP路由属性描述了该条路由的各项特征,同时,路由所携带的路由属性也将在某些场景下影响BGP路由优选的决策。

BGP路由属性类型

RFC 4271将BGP路径属性分为两大类:公认(Well-known)及可选(Optional),其中公认属性是所有BGP路由器必须都能够识别的路径属性,而可选属性则不要求所有的BGP路由器都必须能够识别。

公认属性里分了两个子类:必遵(Mandatory)及任意(Discretionary),其中必遵属性指的是当BGP路由器使用Update报文通告路由更新时必须携带的路径属性,而任意属性则不要求Update报文中必须携带。

可选属性里也分了两个子类:过渡(Transitive)及非过渡(Non-transitive),其中对于过渡属性,如果BGP路由器不能够识别该路径属性,那么也应该接受携带该路径属性的BGP路由更新,并且当路由器将该路由通告给其他对等体时必须携带该路由属性,而对于非可过渡属性,如果BGP路由器不能够识别该属性,那么该路由器将会忽略携带该路径属性的BGP路由更新且不将该路由通告给其他BGP对等体。

常见的BGP属性类型如下表所示:

属性名

类型

Origin属性

公认必须遵循

AS_Path属性

公认必须遵循

Next_Hop属性

公认必须遵循

Local_Pref属性

公认任意

MED属性

可选非过渡

团体属性

可选过渡

Originator_ID属性

可选非过渡

Cluster_List属性

可选非过渡

Originator_ID属性和Cluster_List属性用于解决路由反射器场景中的环路问题,将在BGP路由反射器部分介绍,下面对其他几种常见的BGP属性进行介绍。

Origin属性

Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的,该属性为公认必遵属性。它有以下3种类型:

  • IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
  • EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。

说明:

此处EGP指的是一个具体的路由协议,其名称为EGP。这个路由协议现在已经不再被使用。

  • Incomplete:优先级最低。如果路由是通过其他方式学习到的,则Origin属性为Incomplete(不完整的)。例如通过import-route命令引入到BGP的路由。

AS_Path属性

AS_Path是公认必遵属性,它描述了一条BGP路由在传递过程中所经过的AS的号码。一台路由器在将BGP路由通告给自己的EBGP对等体时,会将本地的AS号插入到该路由原有AS_Path之前。AS_Path实际上是一个有长度的AS号码列表。从上面的描述也可以看出,BGP路由的AS_Path只在EBGP对等体之间发生改变,当BGP路由在一个AS内传递时(路由被通告给自己的IBGP对等体),该路由所携带的AS_Path是不会发生改变的。

AS_Path有两个非常重要的作用:

  • 避免EBGP路由的环路,如果路由器收到一条BGP路由并且发现该路由携带的AS_Path中出现了自己所在AS的AS号,它意识到从本地AS通告出去的BGP路由又被通告回了该AS,BGP将忽略关于该条路由的更新。
  • 用于BGP路由优选的决策。AS_PATH属性是记录达到目标网络的AS路径列表,类似距离矢量协议中的hop概念。AS_Path越短则该则该路由被视为越优,因为这条路径距离目的地所要经过的AS个数更少。

Next_Hop属性

Next_Hop属性是公认必遵属性,该属性描述了到达目的网段的下一跳地址。BGP路由所携带的Next_Hop属性值将在路由器计算路由时用于确认到达该路由的目的网段的实际下一跳IP地址和出接口。

通常情况下,Next_Hop属性遵循下面的规则:

  • 当路由器将本地路由表中的直连路由、静态路由或通过IGP协议学习到的动态路由使用network或import-route命令发布到BGP时,在该路由器的BGP路由表中,这些路由的Next_Hop属性显示0.0.0.0(该路由器是这些路由的始发者)。
  • 当BGP路由器使用aggregate命令通告一条BGP汇总路由时,在该路由器的BGP路由表中,该汇总路由的Next_Hop属性显示127.0.0.1。
  • 当路由器将本地始发的BGP路由通告给自己的IBGP对等体时,路由的Next_Hop属性值将被设置为本地与对端建立BGP邻居关系的接口地址。
  • 当路由器将非本地始发的IBGP路由通告给自己的IBGP对等体时(路由反射器的场景),缺省情况下,该路由不会改变该路由原有的Next_Hop属性值。
  • 当路由器将一条EBGP路由通告给自己的IBGP对等体时,缺省情况下,该路由器不会改变该路由原有的Next_Hop属性值。
  • 当路由器将一条BGP路由通告给自己的EBGP对等体时,无论这条路由是否为该路由器始发,路由的Next_Hop属性值都被设置为本地与对端建立BGP邻居关系的接口地址。

Local_Pref属性

Local_Pref属性是公认任意属性,该路径属性只能在IBGP对等体之间传递,当路由被通告给EBGP对等体时,是禁止携带该属性的。因此Local_Preference属性只能够在一个AS内部传递,这就是“本地”的含义。

如果一个AS拥有多个BGP出口,而且同一个AS内的BGP路由器通过这些出口均可到达同一个目的地,那么Local_Pref属性可被该AS用于告知本AS内的BGP路由器哪一个出口更优。Local_Pref属性的取值范围是0~4294967295(缺省值为100),值越大则路由越有可能被优选。

MED属性

MED(Multi-Exit Discriminator)属性是可选非过渡属性,用于判断流量进入AS时的最佳路由

当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。

MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

团体属性

Community属性是一个可选过渡属性,它类似于路由的“标记”,我们可以针对特定的路由设置特定的Community属性值,而下游路由器在执行路由策略时,可以通过Community属性值来匹配目标路由。

团体属性用一组以4字节为单位的列表来表示,设备中团体属性的格式是aa:nn或团体号。

  • aa:nn:aa和nn的取值范围都是0~65535,管理员可根据实际情况设置具体数值。通常aa表示自治系统AS编号,nn是管理员定义的团体属性标识。例如,来自AS100的一条路由,管理员定义的团体属性标识是1,则该路由的团体属性格式是100:1。
  • 团体号:团体号是0~4294967295的整数。RFC1997中定义,0(0x00000000)~65535(0x0000FFFF)和4294901760(0xFFFF0000)~4294967295(0xFFFFFFFF)是预留的。

团体属性分为自定义团体属性和公认团体属性。其中公认团体属性如下:

  • Internet:缺省情况下,所有的路由都属于Internet团体。具有此属性的路由可以被通告给所有的BGP对等体。
  • No_Advertise:具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体。
  • No_Export:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
  • No_Export_Subconfed:具有此属性的路由在收到后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。

相关推荐

Opinion丨Struggle Against U.S. Mind colonization in the Global South

Editor'snote:Thismonth,XinhuaNewsAgency'sThinkTankreleasedareporttitled"Colonizationof...

爱可可AI论文推介(2020.11.4)_爱可可女装旗舰店

LG-机器学习CV-计算机视觉CL-计算与语言AS-音频与语音RO-机器人(*表示值得重点关注)1、[LG]*CombiningLabelPropagationan...

何新:罗马伪史考英文版序言_罗马史学

2019-10-2514:48:27何新:罗马伪史考序言(英文译本)HeXin:PreambleofResearchonPseudo-historyofRome1Afewyear...

XPeng Stock Rises Over 4% after Q2 Revenue and EV Margin Set Records

TMTPOST--TheAmericandepositaryreceipts(ADRs)ofXPengInc.rosearound4.2%onTuesdayaftert...

英汉世界语部首(八)_英文部首字典

本节讲八个部首,分别是:弓gōng【ECWLrad】bow廾gǒng【ECWLrad】twen广guǎng【ECWLrad】vast己jǐ【ECWLrad】self已yǐ...

一课译词:划水_划水是什么地方的方言

[Photo/SIPA]懒惰是人类的天性,因此才总有人会在工作时“划水”。“划水【huáshuǐ】”,本意是指“用胳膊划的动作(makestrokeswithone’sarms)”,延伸为“...

首测!GPT-4o做Code Review可行吗?

编辑|言征出品|51CTO技术栈(微信号:blog51cto)近日,OpenAI一记重拳,推出了GPT-4o(“o”表示“omni”),将语音识别和对话方面的优势展示的淋漓尽致。几乎可以肯定,...

C++|漫谈STL细节及内部原理_c++ stl详解

1988年,AlexanderStepanov开始进入惠普的PaloAlto实验室工作,在随后的4年中,他从事的是有关磁盘驱动器方面的工作。直到1992年,由于参加并主持了实验室主任BillWo...

C++ inline关键字深度解析:不止于优化的头文件定义许可

在C++开发中,几乎每个程序员都用过inline关键字,但多数人只停留在“内联优化”的表层理解。事实上,inline的真正威力在于它打破了C++的单一定义规则(ODR)限制,成为头文件中安全定义函数的...

实用 | 10分钟教你搭建一个嵌入式web服务器

之前分享的文章中提到了几种可以在嵌入式中使用的web服务器。嵌入式web服务器就是把web服务器移植到嵌入式系统的服务器。它仍然是基于http文本协议进行通信的,具有标准的接口形式,对客户端...

中间语言格式_中间格式文本是什么

在通常情况下,编译器会将目标语言转换成某种中间语言格式,而不是直接将源代码转换成二进制机器指令,不少c语言编译器,都会将代码编译成汇编语言,然后再通过汇编语言编译器将汇编代码转换成目标机器可执行的二进...

一线开发大牛带你深度解析探讨模板解释器,解释器的生成

解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...

干货,Web开发和前端开发逆天工具大全

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(点击页底“阅读原文”前往下载)●●●逆天工具CDN资源库国内Bootstrap中文网开源项目免费CDN服务36...

移动端rem+vw适配_移动端web页面适配方案

rem:rem是相对单位,设置根元素html的font-size,比如给html设置字体大小为100px,1rem=100px;rem缺点:1.和根元素font-size值强耦合,系统字...

从零搭建 React 开发 H5 模板_react html5

项目创建创建项目文件夹mkdir react-democd react-demonpm init -y依赖安装yarn add rea...