【路由交换方向IE认证】BGP选路原则之AS-Path属性
文章目录
- 一、路由器BGP路由的处理过程
- 控制平面和转发平面
- 选路工具
- 二、BGP的选路顺序
- 选路的前提
- 选路顺序
- 三、AS-Path属性选路原则
- AS-Path属性特性
- AS-Path管进还是管出呢?
- 使用AS-Path对进本AS的路由进行选路
- 验证AS-Path不接收带本AS号的路由
- 四、BGP邻居建立配置
一、路由器BGP路由的处理过程
路由器对BGP路由的处理过程,简单来说就是BGP中的选路过程
控制平面和转发平面
一、控制平面 :是从起点到目的地所使用的IGP,BGP等路由协议从而控制产生路由表,VPNV4路由表,标签转发表等,由这些表去控制我们的FIB表,也就是数据转发表
二、转发平面 :也叫做数据平面,根据刚刚产生的路由表,VPNV4路由表,标签转发表从而产生一个数据转发表(FIB表)去进行数据的从起点到目的地的转发,
如图1-1,

选路工具
在 BGP 选路中有两个重要的概念:
一、策略机 : 相当于route-map,能够对属性值进行修改,影响路由表的生成(在控制平面上:是一个过程),从而影响用户的数据转发
①输入策略机:路由进入本地时的route-map,我们可以理解为 in 方向,会影响自身和下游的路由器
②输出策略机:路由离开本地时的route-map,我们可以理解为 out 方向,只会影响下游的路由器,不会影响自身
二、路由决策 : 根据刚刚的策略机(route-map)选择出最佳的路径,并且将最佳的路径添加到路由表中,简单来说就是去哪里,哪条路比较方便或近
如图1-2,就是BGP路由的处理过程

二、BGP的选路顺序
选路的场景主要面对同一个目的网络存在多种去的方式
如图2-1,对于R3来说,去往192.168.10.0/24有去往R1或R2两条路可以选

选路的前提
我们选路的前提是路由的下一跳可达,如果说路由的下一跳不可达的话,那么选路将不具有任何意义
选路顺序
-
我们之前学过的那么多个BGP属性都是能够应用到BGP路由的选路当中的,但是也是存在依照属性进行选路的顺序的,并且如果较为前的属性已经选出最佳路径,那么后面的属性将不会影响到属性
-
例如:路由器已经依照Local Preference选出了最佳的路径,而MED值无论在怎么进行修改都是无济于事的
选路顺序如下
- 优选Weight值较高的;
- 优选Local Preference值较高的;
- 优选AS-Path长度较短的;
- 按照Origin属性为IGP、EGP、Incomplete类型的路由进行选路;(IGP > EGP > Incomplete)
- 优选MED值较小的路由
- 按照EBGP路由,接着是联盟EBGP路由,最后是IBGP路由的顺序
- 优越最近的IGP邻居通告的路由
- 执行等价负载均衡(默认是没有开启等价负载均衡的)
- 优选BGP Router-ID 小的 Peer 通告的路由
- 优选Cluster-list长度较短的路由
- 优选较小的 Peer 地址路由器通告的路由
这么多一串顺序我们将会逐一进行讲解,本文章所分享的是排位第三个的属性,AS-Path属性,该属性即可进行选路们还具有防环的作用
讲解Weight属性的文章:【路由交换方向IE认证】BGP选路原则之Weight属性-CSDN博客
讲解Local Preference属性的文章:【路由交换方向IE认证】BGP选路原则之Local Preference属性-CSDN博客
三、AS-Path属性选路原则
AS-Path属性特性
AS-Path优选原则,AS-Path长度越短越优先,在AS-Path选路当中,我们的策略机依然是使用route-map
如图3-1,由于AS-Path属性的不只含有选路这一个属性,还可以进行路由的防环

所以我们在调整AS-Path属性长度进行选路的时候,尽量地不要去减少AS-Path的长度,这样就产生了AS-Path的第一个调整原则,①:只增不减
除此之外,AS-Path的route-map在使用时,in方向或是out方向,都会对结果造成不同
如图3-2,当route-map使用在in方向的时候,则 AS 号添加到原始AS号的左侧;当route-map使用在out方向的时候,则 AS 号添加到原始AS号的右侧

由于AS-Path的来源是经过的各个AS-Path,所以对于IBGP Peer和EBGP Peer之间传递的AS-Path是否发生改变是不一样的
结论是:IBGP Peer 之间传递路由的时候,由于AS-Path没有发生了变化,AS-Path值并不会发生改变;EBGP Peer 之间传递路由的时候,由于AS-Path发生了变化,所以相对应的AS-Path也会发生变化
如图3-3,当R1传递给R2路由时,由于是EBGP Peer 关系,所以路由中的AS-Path属性会发生变化;当R2传递路由给R4时,由于是IBGP Peer关系,所以传递的路由中AS-Path属性不会发生变化

在特殊的情况下,我们不想让AS-Path属性进行选路,而是只让其发挥防环的作用,可以通过下述命令来使AS-Path属性不参加选路
R1>en
R1#conf
R1(config)#router bgp 100
R1(config-router)#bgp bestpath as-path ignore //使得AS-Path不参与选路
R1(config-router)#ex
AS-Path管进还是管出呢?
我们所说的管进还是管出,是相对于本AS来说的,仔细回想起来,我们的AS-Path属性是公认必遵属性,可以传播到BGP网络中的任意一个角落,相比于Local Preference,不需要考虑跨AS能否传递的问题,所以我们AS-Path属性是能够管进也能管出的
如图3-4与图3-5,分别是AS-Path进入本公司和AS-Path出本公司的选路示意图


使用AS-Path对进本AS的路由进行选路
在实际的生产环境中,由于我们能进行配置的只有本公司的设备,所以无法在R1上进行配置,我们的AS-Path选路需要在R2或者R3上进行
使用AS-Path进行选路需求:① 控制R1进本公司的选路;② 控制R1访问4.4.3.4走R3,控制R1访问4.4.4.4走R2(奇数走奇数,偶数走偶数);
思路:根据AS-Path长度越小越优先的原则,我们要让R3发出4.4.4.4路由中的AS-Path属性更长,让R2发出4.4.3.4路由中的AS-Path属性更长,如图3-7,调整AS-Path值如图所示

但我们回过头来一想,4.4.4.4是默认走的就是R2这条路径,所以,我们并不是非常低有必要去更改R2对于4.4.4.4向R1发出的AS-Path值,如图3-8

这就极大的减少了我们配置的工作量,现在只需要在R2上对于4.4.3.4向R1发出的 AS-Path值进行修改
如图3-9,prepend表示对整个路由的AS-Path值的增加,replace表示对整个路由的AS-Path值的替换

在R2上进行配置操作
R2(config)#access-li 10 per 4.4.4.4 0.0.0.0
R2(config)#route-map AS-P per 10
R2(config-route-map)#mat ip add 10
R2(config-route-map)#set as-path prepend 200
R2(config-route-map)#ex
R2(config)#route-map AS-P per 20
R2(config-route-map)#ex
R2(config)#router bgp 200
R2(config-router)#nei 12.1.1.1 route-map AS-P out
R2(config-router)#ex
如图3-10,在R1上执行show ip bgp的命令,可以发现选路情况已经发生了变化,并且已经达到了预期;在标注处也显示AS-Path的长度修改成功

验证AS-Path不接收带本AS号的路由
如图3-11,我们可以在route-map中设置发出路由的AS 号中增加 AS 100,在R1上观察BGP路由表会发生什么变化

在R2上的配置如下
R2>en
R2#conf
R2(config)#route-map AS-P per 10
R2(config-route-map)#set as-path prepend 100
R2(config-route-map)#ex
在R1上执行show ip bgp的命令,观察BGP路由表,如图3-12,发现对于4.4.4.4这条路由来说,已经中断了与R2的邻居关系

四、BGP邻居建立配置
附上配置过程
R1
Router(config)#hos R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#ip add 12.1.1.1 24
R1(config-if-GigabitEthernet 0/0)#ex
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip add 12.1.2.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R1(config)#int lo0
R1(config-if-Loopback 0)#ip add 1.1.1.1 32
R1(config-if-Loopback 0)#ex
R1(config)#int lo1
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ex
R1(config)#router bgp 100
R1(config-router)#bgp router-id 1.1.1.1
R1(config-router)#nei 12.1.1.2 remote-as 200
R1(config-router)#nei 12.1.2.3 remote-as 200
R1(config-router)#netw 1.1.1.1 mask 255.255.255.255
R1(config-router)#netw 1.1.2.1 mask 255.255.255.255
R1(config-router)#ex
R2
R2>en
R2#conf
R2(config)#hos R2
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24
R2(config-if-GigabitEthernet 0/0)#ex
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#ip add 12.1.3.2 24
R2(config-if-GigabitEthernet 0/1)#ex
R2(config)#int lo0
R2(config-if-Loopback 0)#ip add 2.2.2.2 32
R2(config-if-Loopback 0)#ex
R2(config)#router ospf 10
R2(config-router)#rou 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0
R2(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R2(config-router)#ex
R2(config)#router bgp 200
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#nei 12.1.1.1 remote-as 100
R2(config-router)#nei 4.4.4.4 remote-as 200
R2(config-router)#nei 4.4.4.4 update-sou lo0
R2(config-router)#nei 4.4.4.4 next-hop-self
R2(config-router)#ex
R3
Router>en
Router#conf
Router(config)#hos R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#ip add 12.1.2.3 24
R3(config-if-GigabitEthernet 0/0)#ex
R3(config)#int g0/1
R3(config-if-GigabitEthernet 0/1)#ip add 12.1.4.3 24
R3(config-if-GigabitEthernet 0/1)#ex
R3(config)#int lo0
R3(config-if-Loopback 0)#ip add 3.3.3.3 32
R3(config-if-Loopback 0)#ex
R3(config)#router ospf 10
R3(config-router)#rou 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0
R3(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R3(config-router)#ex
R3(config)#router bgp 200
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#nei 12.1.2.1 remote-as 100
R3(config-router)#nei 4.4.4.4 remote-as 200
R3(config-router)#nei 4.4.4.4 update-sou lo0
R3(config-router)#nei 4.4.4.4 next-hop-self
R3(config-router)#ex
R4
R4>en
R4#conf
R4(config)#hos R4
R4(config)#int g0/0
R4(config-if-GigabitEthernet 0/0)#ip add 12.1.3.4 24
R4(config-if-GigabitEthernet 0/0)#ex
R4(config)#int g0/1
R4(config-if-GigabitEthernet 0/1)#ip add 12.1.4.4 24
R4(config-if-GigabitEthernet 0/1)#ex
R4(config)#int lo0
R4(config-if-Loopback 0)#ip add 4.4.4.4 32
R4(config-if-Loopback 0)#ex
R4(config)#int lo1
R4(config-if-Loopback 1)#ip add 4.4.3.4 32
R4(config-if-Loopback 1)#ex
R4(config)#router ospf 10
R4(config-router)#rou 4.4.4.4
Change router-id and update OSPF process! [yes/no]:yes
R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0
R4(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R4(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R4(config-router)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 remote-as 200
R4(config-router)#nei 2.2.2.2 update-sou lo0
R4(config-router)#nei 3.3.3.3 remote-as 200
R4(config-router)#nei 3.3.3.3 update-sou lo0
R4(config-router)#netw 4.4.4.4 mask 255.255.255.255
R4(config-router)#net 4.4.3.4 mask 255.255.255.255
R4(config-router)#ex
相关文章:
【路由交换方向IE认证】BGP选路原则之AS-Path属性
文章目录 一、路由器BGP路由的处理过程控制平面和转发平面选路工具 二、BGP的选路顺序选路的前提选路顺序 三、AS-Path属性选路原则AS-Path属性特性AS-Path管进还是管出呢?使用AS-Path对进本AS的路由进行选路验证AS-Path不接收带本AS号的路由 四、BGP邻居建立配置 一…...
Spark-SQL与Hive
Spark-SQL与Hive的那些事儿:从连接到数据处理 在大数据处理领域,Spark-SQL和Hive都是非常重要的工具。今天咱们就来聊聊它们之间的关系,以及怎么用Spark-SQL去连接Hive进行数据处理。先说说Hive,它是Hadoop上的SQL引擎࿰…...
Linux系统下docker 安装 redis
docker安装最新版的redis 一、docker拉取最新版redis镜像 拉取镜像若没有指定版本,代表拉取最新版本 二、查询redis镜像 三、挂载配置文件 在docker容器内修改redis配置文件不方便,所以挂载配置文件,这样可以在外边修改redis配置 3.1 创建…...
【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人
练习题 【单选题】1. 在调用通义千问大模型时,将API Key存储在环境变量中的主要目的是? A. 方便在代码中引用 B. 提高API调用的速度 C. 增强API Key的安全性 D. 符合阿里云的规定 【多选题】2. 以下哪些属于大模型在问答场景中的工作阶段?( ) A. 输入文本分词化 B. Toke…...
深度学习框架PyTorch——从入门到精通(3.3)YouTube系列——自动求导基础
这部分是 PyTorch介绍——YouTube系列的内容,每一节都对应一个youtube视频。(可能跟之前的有一定的重复) 我们需要Autograd做什么?一个简单示例训练中的自动求导开启和关闭自动求导自动求导与原地操作 自动求导分析器高级主题&…...
【基础算法】二分算法详解
🎯 前言:二分不是找某个数,而是找一个满足条件的位置/值 所以最关键的是:找到单调性,写好 check() 函数,剩下交给模板! 什么是二分算法 二分算法是一种在有序区间中查找答案的方法,时间复杂度:O(log n)。核心思想是: 每次把搜索区间分成两半,只保留可能存在答案的…...
mysql——基础知识
关键字大小写不敏感 查看表结构中的 desc describe 描述 降序中的 desc descend 1. 数据库的操作 1. 创建数据库 create database 数据库名;为防止创建的数据库重复 CREATE DATABASE IF NOT EXISTS 数据库名;手动设置数据库采用的字符集 character set 字符集名;chars…...
html+js+clickhouse环境搭建
实验背景: 我目前有一台服务器A,和一台主机B,两台设备属于同一局域网,相互之间可以通讯。服务器A中部署着clickhouse,我在主机B中想直接通过javascript代码访问服务器中的clickhouse数据库并获取数据。 ClickHouse 服务…...
JWT算法详解
JWT(JSON Web Token)的整个算法流程主要基于其签名算法。以最常见的签名算法HS256(HMAC SHA256)为例,以下是详细的算法流程,涵盖编码、签名和验证过程: 编码 构造头部(Header&#x…...
OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比
OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于OOA-CN…...
Python Cookbook-6.6 在代理中托管特殊方法
任务 在新风格对象模型中,Python 操作其实是在类中查找特殊方法的(而不是在实例中那是经典对象模型的处理方式)。现在,需要将一些新风格的实例包装到代理类中,此代理可以选择将一些特殊方法委托给内部的被包装对象。 解决方案 你需要即时地…...
PCIE Spec ---Base Address Registers
7.5.1.2.1 Base Address Registers (Offset 10h - 24h) 在 boot 到操作系统之前,系统软件需要生产一个内存映射的 address map ,用于告诉系统有多少内存资源,以及相应功能需要的内存空间,所以在设备的 PCI 内存空间中就有了这个 …...
Spring如何通过XML注册Bean
在上一篇当中我们完成了对三种资源文件的读写 上篇内容:Spring是如何实现资源文件的加载 Test public void testClassPathResource() throws IOException { DefaultResourceLoader defaultResourceLoader new DefaultResourceLoader(); Resource resource …...
理解 `#pragma pack`:C/C++内存对齐的钥匙
引言:为什么我的网络程序收发的数据总是错位? 在网络编程中,你是否遇到过这样的困惑:明明发送方和接收方的结构体定义完全一样,但解析出来的数据却乱七八糟?这很可能是因为内存对齐在作祟。今天我们就来深…...
开源键鼠共享软件的“爱恨情仇“:Deskflow、InputLeap与Barrier的演化史
开源键鼠共享软件的"爱恨情仇":Deskflow、InputLeap与Barrier的演化史 一、血脉渊源:从Synergy到三足鼎立 这三款软件的起源都与 Synergy 这款商业软件密切相关: 2001年:Synergy开创软件化KVM先河2017年&…...
【Python核心库实战指南】从数据处理到Web开发
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块对比 二、实战演示环境配置要求核心代码实现(5个案例)案例1:NumPy数组运算案例2:Pandas数据分析…...
运维:概念、模式与硬件基础
一、运维概述:从网管到智能运维的进化之路 1. 运维岗位的定义 IT运维管理是保障企业IT系统及网络可用性、安全性、稳定性,确保业务连续性的核心工作。通过专业技术手段,对计算机网络、应用系统、电信网络、软硬件环境及运维服务流程等进行综…...
基于Java的不固定长度字符集在指定宽度和自适应模型下图片绘制生成实战
目录 前言 一、需求介绍 1、指定宽度生成 2、指定列自适应生成 二、Java生成实现 1、公共方法 2、指定宽度生成 3、指定列自适应生成 三、总结 前言 在当今数字化与信息化飞速发展的时代,图像的生成与处理技术正日益成为众多领域关注的焦点。从创意设计到数…...
【版本控制】idea中使用git
大家好,我是jstart千语。接下来继续对git的内容进行讲解。也是在开发中最常使用,最重要的部分,在idea中操作git。目录在右侧哦。 如果需要git命令的详解: 【版本控制】git命令使用大全-CSDN博客 一、配置git 要先关闭项目…...
QT:Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用
以下是使用 Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用的完整示例代码: #include <QSerialPort> #include <QDebug>// 创建全局或类成员变量(推荐使用智能指针) QSerialPort *serialPort nullptr; // 打开…...
Linux——入门常用基础指令
文章目录 Linux入门常用基础指令使用工具介绍基础指令clear指令pwd指令ls指令cd指令Linux系统下的文件路径及文件存储结构文件结构家目录绝对路径和相对路径tree工具 stat指令which指令alias指令touch指令mkdir指令cat指令rm指令man指令cp指令通配符 * Linux入门常用基础指令 …...
【技术追踪】Differential Transformer(ICLR-2025)
Differential Transformer:大语言模型新架构, 提出了 differential attention mechanism,Transformer 又多了一个小 trick~ 论文:Differential Transformer 代码:https://github.com/microsoft/unilm/tree/master/Diff…...
overlay 模块加载失败问题分析
问题背景 CentOS 7系统上,内核版本是3.10.0-693.21.1.el7.x86_64,加载overlay模块的时候失败了。错误提示说找不到支持的overlay文件系统,让我确认内核足够新并且已经加载了overlay支持。但是检查发现/lib/modules/3.10.0-693.el7.x86_64/ke…...
【Linux网络】应用层自定义协议与序列化
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 应用层 再谈 "协议" 网络版计算器 序列化 和 反序列化 重新理解…...
Vue接口平台学习十——接口用例页面2
效果图及简单说明 左边选择用例,右侧就显示该用例的详细信息。 使用el-collapse折叠组件,将请求到的用例详情数据展示到页面中。 所有数据内容,绑定到caseData中 // 页面绑定的用例编辑数据 const caseData reactive({title: "",…...
目标检测中的损失函数(二) | BIoU RIoU α-IoU
BIoU来自发表在2018年CVPR上的文章:《Improving Object Localization With Fitness NMS and Bounded IoU Loss》 论文针对现有目标检测方法只关注“足够好”的定位,而非“最优”的框,提出了一种考虑定位质量的NMS策略和BIoU loss。 这里不赘…...
SpringAI系列 - MCP篇(一) - 什么是MCP
目录 一、引言二、MCP核心架构三、MCP传输层(stdio / sse)四、MCP能力协商机制(Capability Negotiation)五、MCP Client相关能力(Roots / Sampling)六、MCP Server相关能力(Prompts / Resources / Tools)一、引言 之前我们在接入大模型时,不同的大模型通常都有自己的…...
Linux 入门十一:Linux 网络编程
一、概述 1. 网络编程基础 网络编程是通过网络应用编程接口(API)编写程序,实现不同主机上进程间的信息交互。它解决的核心问题是:如何让不同主机上的程序进行通信。 2. 网络模型:从 OSI 到 TCP/IP OSI 七层模型&…...
沐渥氮气柜控制板温湿度氧含量氮气流量四显智控系统
氮气柜控制板通常用于实时监控和调节柜内环境参数,确保存储物品如电子元件、精密仪器、化学品等,处于低氧、干燥的稳定状态。以下是沐渥氮气柜控制板核心参数的详细介绍及控制逻辑: 一、控制板核心参数显示模块 1)温度显示&am…...
vue3 主题模式 结合 element-plus的主题
vue3 主题模式 结合 element-plus的主题 npm i element-plus --save-dev在 Vue 3 中,实现主题模式主要有以下几种方式 1.使用 CSS 变量(自定义属性) CSS 变量是一种在 CSS 中定义可重用值的方式。在主题模式中,可以将颜色、字体…...
