BGP路径属性

简介: 文章目录系列文章路径属性

路径属性

在默认情况下,到达同一目的地,BGP只走单条路径,并不会在多条路径之间执行负载均衡。对于IGP路由协议,当有多条路径可以到达同一目的地时,则根据最小metric值来选择最优路径,而BGP存在多条路径到达同一目的地时,对于最优路径的选择,BGP并不会以metric值大小为依据,BGP对于最优路径的选择,需要靠比较路由条目中的Path Attributes,即路径属性,只有在比较多条路由的属性之后,才能决定选择哪条为最优路径。BGP的每条路由都带有路径属性,BGP的路径属性可以划分为以下四类:

公认强制 (well-Known Mandatory)

公认自选(Well-Known Discretionary)

可选可传递(Optional Transitive)

可选不可传递(Optional Nontreansitive)

对于个属性的各特点如下:

公认强制(Well-Known Mandatory)

对于任何一台运行BGP的路由器,都必须支持公认强制属性,并且在将路由信息发给其它BGP邻接时,必须在路由器中写入公认强制属性,这些属性是被强制写入路由中的,一条不带公认强制属性的路由被BGP路由器被视为无效而被丢弃,一个不支持公认强制属性的BGP,是不正常的,不和法的BGP。

BGP路由必须携带的公认强制属性有三个:Origin,Next_Hop,AS-path.

公认自选(Well-Knwn Discretionary)

公认自选属性并不像公认强制属性那么严格,任何一台运行BGP的路由器必须支持公认属性,必须理解和认识公认自选属性,但是为路由写入公认自选属性并不是必须的,是否要为路由写入公认自选属性可以自由决定,为路由写入上公认自选属性之后,所有BGP路由器都能认识和理解,并且都会自动保留和传递该属性。

可选可传递(Optional Nontransitive)

并不是所有运行BGP的路由器都能理解和支持可选可传递属性,路由的可选可传递属性是任意写入的,其它BGP路由器并不一定能理解,也并不一定保留和传递该属性,但是当为路由器设置了可选可传递属性后,可以明确要求BGP路由器保留和传递该属性。

可选可不选(Optional Nontransitive)

只有特定的BGP路由器才理解和支持可选不可传递属性,并且可选不可传递属性理论上是不能手工设置的,即使手工设置了可选不可传递属性,这些属性也不能任意传递,只可以传递到特定的BGP路由器。

以上是一些常用BGP属性的介绍:

Origin(公认强制属性)

在路由器之间建立BGP邻居之后,邻居之间只能相互传递BGP路由表中的路由,在初始状态下,BGP的路由表为空,没有任何路由,要让BGP传递相应的路由,只能先将该路由导入BGP路由表,之后才能在BGP邻居之间传递。默认情况下,任何路由都不会自动进入BGP路由表,只能手工导入,对于路由是怎么进入BGP路由表的,这种方式会被记录在路由条目中,称为Origin属性,Origin属性就反映出了路由是如何进入BGP路由表的。要将路由导入BGP路由表,有三种方式,

第一:因为路由器上默认会有IGP路由表,通过命令show ip route 可以查看到,这些IGP表中的路由可以被手工导入BGP,通过在BGP进程模式下使用命令network,即可将IGP表中的相应路由导入BGP路由表,并且需要指定掩码,只有network后面的网段和掩码在IGP路由表中能找到时,才会进入BGP路由表,并不能通过这种方式将一条不存在的路由凭空导入BGP,通过命令network被导入BGP的路由的Origin属性为IGP属性。

第二:BGP可以从BGP路由协议中获得路由信息,而BGP已经淘汰,被BGP所取代,所以我们很难遇见EGP路由协议,从EGP路由协议获得的路由的Origin属性为EGP。

第三:BGP路由表除了IGP和EGP获取路由外,还可以将路由重分布进BGP路由表,而重发布的路由的Origin属性为Incomplete。

当BGP路由表中到达同一目的地存在多条路径时,会通过比较路由的Origin属性来选择最优路径,它们的优先级为IGP优于EBP,EGP优于Incomplete,即IGP>EGP>Incompete。

AS_path(公认强制属性)

AS_path中包含了BGP路由器到达目的地所经过的所有AS的集合,AS_Path中会包含了多个AS号码,号码的多少,逻辑上反映了到达目的地的远近。

AS_Path 还能细分为:

AS_SEQUENCE(有序AS号码,即AS号码在AS_Path中是按照一定顺序排列的)

AS_SET(无序AS号码,即AS号码在AS_Path中排列是没有顺序的,通常是将多条将拥有不同AS_Path的路由汇总后产生的)

当BGP路由表中到达同一目的地存在多条路径时,会优选AS-Path最短路径。

Next_Hop(公认强制属性)

也就是BGP将数据包发往目的地的下一跳,BGP路由的下一跳,就是BGP建立邻,居时的地址,也是BGP之间建立TCP连接所使用的地址。因为这个地址可以是路由器上任意接口的地址,是要能通信即可(其连通性由IGP提供保证),所以BGP在将数据包发往下一跳时,通常需要采用递归查询在IGP路由表中查询该下一跳地址。默认情况下,一台BGP 路由器将路由传递给eBGP邻居时,会将Next-hop属性改为自己的地址,也就是和对方建立邻居所使用的地址,而在将路由传递给iBGP邻居时,不会改变Next-hop属性。

对于将路由传递给BGP 邻居时,是否改变Next-hop属性的功能,可以自由关闭或启用。

BGP路由表中由本地产生的路由而不是从BGP邻居学习来的,即本地发起路由的Next- -hop属性都为0. 0.0. 0。

Local_Pref(公认自选属性)

Local_ Pref 称为本地优先级,其中的(Local) 本地就是指本AS,或AS内的意思,所以可以想象得出,Local_ Pref 属性的传递范围,只在同一个AS内有效,一条路由的Local_ Pref 属性只能在同一AS内部传递,出了AS后就会被还原成默认值。

Local_ Pref属性在BGP邻居之间是自动传递的,只有在将路由发给iBGP 时才会传递,而在发给eBGP时,是没有Local_ Pref值的,一条路由的Local_ Pref属性

在一个AS内的所有BGP路由器_上是完全相同的。Local_ Pref的默认值为100,由此可以看出,一条路由在AS内的所有路由器上默认值为100。

本地优先级属性是用于区分到同一目的地的各个路由优先程度的。本地优先级越高,路由优先级越高。默认值为100。 .

当BGP路由表中到达同一目的地存在多条路径时,会比较Local_ Pref 值的大小,Local_Pref值大的会被选为最优路径,如110与100,那么110会被选为最优路径。

Local_ Pref 值可以被随意修改,修改后将在整个AS内传递,所以推荐使用Local_ Pref 属性来控制一个AS的路由器去往目的地在其它AS的路径。如下图:


在上图中,AS10中的BGP路由器R3可以同时通过R1与R2去往目的地在AS20中的R4_上时,可以通过在AS 10内部修改路由的Local_ Pref 值来影响选路,比如在R1.上将路由的Local_ Pref 值改为110,而路由器R2_上不作任何改动,最终R3将选择从R1去往AS 20,因为R1的Local_ Pref 值为110,而R2的Local_ Pref 值为100(默认),所以R3选择R1为最优路径。

因为R1和R2在将路由发给iBGP邻居R3时会携带Local_ Pref属性,所以R3同时比较iBGP邻居R1与iBGP邻居R2时,才合适使用Local_Pref属性,因为下一跳都是iBGP邻居,如果下一跳不都是iBGP 邻居,并不建议修改Local_ Pref 属性来影响选路。

MULTI_EXIT_DISC(MED,可选不可选属性)

MED就是BGP路由中的metric,是被设计用来影响在多个下一跳都为eBGP邻居时,如何选择最优路径,因为在多个下一跳都为i1BGP 时,是建议使用修改Local_ Pref属性来影响选路的,而多个下一-跳都为eBGP时,则使用MED。MED是BGP路由的metric,所以多条路径中拥有最小MED值的路径会被优先使用。MED默认值为0。

Local_ Pref属性只在同一个AS内部传递,而MED.只能在AS之间传递,只有在将路由发给eBGP邻居时,才会传递MED,"在发给iBGP时,是不会传递MED的。当一条路由被设置MED值后传递给eBGP 邻居,在eBGP邻居收到后,如果将该路由继续传递给iBGP 邻居,那么这个值会被还原为默认值0,也就是说同一个AS内,所有发给iBGP邻居的路由的MED值都为0,这是为了让所有AS内部路由器都能够拥有相同的选路结果。

MED值也是可以随意修改的。


在上图中,当AS 20中的路由器R4要去往目的地为AS 10的网段时,由于下一跳R1与R2都为eBGP邻居,所以可以通过修改MED值来影响R4对于下一跳的选择。比如将R2的MED改为10,而R1的MED保持默认不变,那么最终R4将选择R1去往AS10中的目的地,因为R1的MED值0小于R2的MED值10,所以被优先使用。

默认情况下,只有当去往目的地的多个下一-跳eBGP邻居都为相同AS时,才会比较MED值,如果多个eBGP邻居为不同AS时,是不会比较MED的,若是要强制在多个不同的eBGP邻居之间比较MED值,需要在BGP进程下输入命令: bgp always- compare -med。

Weight

Weight属性为Cisco私有属性,只有Cisco的路由器才能认识和理解Weight。路由的Weight属性只在路由器本地起作用,BGP 将路由传递给邻居时,并不会保留Weight。Weight 值的范围为0^ 65535,默认为0,如果是BGP本地路由,则Wei ght值为32768。可以手工任意修改路由的Weight值,可以对路由进行修改,也可以对整个邻居进行修改,但也只能对本地起作用,路由的Weight值并不会传递给邻居。

当BGP路由表中到达同一目的地存在多条路径时,会优选Weight值最大的路径。在Cisco路由器中,比较最优路径的第一条规则就是比较Weight值,所以只要改动Weight值,就绝能够控制Cisco路由器的BGP选路。

其它属性,在应用中继续介绍。

目录
相关文章
|
域名解析 网络协议 安全
什么是DNS劫持攻击以及如何避免此类攻击
【10月更文挑战第28天】DNS劫持攻击是一种网络攻击方式,攻击者通过篡改用户的DNS设置,将合法网站的域名解析为恶意网站的IP地址,使用户在不知情的情况下访问钓鱼网站。攻击手段包括在用户系统植入恶意软件、利用路由器漏洞或破解DNS通信等。为防止此类攻击,应使用安全软件、定期检查DNS设置、重置路由器密码及避免访问不安全的网站。
2599 2
|
人工智能 算法 决策智能
OR-tools求解器使用介绍(一)
OR-tools求解器使用介绍(一)
1936 0
|
关系型数据库 MySQL Linux
Centos7 环境使用 Docker 安装 Mysql 服务详解
Centos7 环境使用 Docker 安装 Mysql 服务详解
2350 0
Centos7 环境使用 Docker 安装 Mysql 服务详解
|
18天前
|
算法 Linux iOS开发
SecureCRT & SecureFX 9.7.2 发布 - 跨平台的多协议终端仿真和文件传输
SecureCRT & SecureFX 9.7.2 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
390 2
SecureCRT & SecureFX 9.7.2 发布 - 跨平台的多协议终端仿真和文件传输
|
机器学习/深度学习 人工智能 算法
快瞳犬种识别效果图示,120种狗品种精准覆盖
犬种识别技术已从实验室走向大众,基于深度学习的卷积神经网络(CNN)和YOLO系列算法,可高效实现犬种分类与目标检测。本文介绍了快瞳犬种识别的技术原理、训练代码及应用场景,包括宠物管理、遗传疾病研究、公共安全、城市管理及遗失宠物寻找等。通过Python代码加载YOLOv8模型并进行训练,模型能在图像中标注犬种及其边界框,为智慧生活提供技术支持。
961 33
|
7月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
前端开发 JavaScript Java
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
439 3
|
传感器 人工智能 自动驾驶
九牧的“AI梦想曲”:卫浴场景进入到机器人时代
十年后的卫浴空间将不再仅仅是功能性场所,而是进化为个性化健康管理中枢。据DeepSeek预测,未来卫浴将引入全自动清洁与管理机器人、个性化健康管家等智能设备,成为家庭中的“第四生活伙伴”。九牧集团等企业已开始布局这一领域,启动AI马桶与家用机器人产业园建设,致力于打造智能卫浴产品,如机器人洗澡机、健康马桶等。这些创新不仅提升了用户体验,还标志着卫浴行业正迈向AI与机器人新时代,引领全球制造业变革。
434 1
|
存储 开发框架 Ubuntu
dpdk课程学习之公开课基础知识整理(uio,dma,vfio,大内存页理解)
dpdk课程学习之公开课基础知识整理(uio,dma,vfio,大内存页理解)
673 0
|
应用服务中间件 Linux nginx
Docker Compose 安装与使用(常用指令)
Docker Compose 安装与使用(常用指令)
1320 0