BGP选路之AS-PATH

news2024/9/23 13:20:05

原理概述
当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value,然后是Local Preference,再次是路由生成方式,如果在比较了这几个属性之后还是无法确定出最优路由,则将进行AS_Path属性的比较。
AS_Path属性顺序地记录了某条BGP路由所经过的AS信息.BGP路由器在向EBGP对等体通告路由时,会在该路由的AS_Path属性的最左端添加本地自治系统的AS编号。BGP在比较了AS_Path属性后,会优选AS_Path长度最短的那条路由。如果 AS_Path的长度相等,则 BGP会对下一个属性 Origin进行比较。另外,AS_Path还可以用来防止AS之间的路由环路。当路由器从EBGP邻居收到BGP路由时,如果该路由的AS_Path中包含了自己的AS编号,则该路由将会被直接丢弃。
类似于其他BGP路由属性,AS_Path属性也是可以被手动修改的。

实验目的
理解AS_Path属性的概念
理解通过AS_Path属性进行选路的机制掌握修改AS_Path属性的方法


实验内容
本实验模拟了一个运营商网络场景,所有路由器都运行 BGP协议,R1 的 Loopback 0 接口用来模拟某一个用户网络10.0.1.1/32,R2的Loopback 0接口用来模拟另一个用户网络10.0.2.2/32。两个用户网络需要进行互相通信,但由于AS 500 转发的流量太多,所以运营商要求10.0.1.1/32与10.0.2.2/32之间的通信只能使用经由 R3、R4 的路径;如果这条路径发生了故障,才能使用经由AS 500的路径。

 

 

 

1、基本配置
R1:
sys
sysname R1
int loop 0 
ip add 10.0.1.1 32
int g0/0/1
ip add 10.0.15.1 24
int g0/0/0
ip add 10.0.13.1 24
q
bgp 100
 peer 10.0.13.3 as-number 300
 peer 10.0.15.5 as-number 500
 #
 ipv4-family unicast
  undo synchronization
  network 10.0.1.1 255.255.255.255
  peer 10.0.13.3 enable
  peer 10.0.15.5 enable


R2:
sys
sysname R2
int loop 0
ip add 10.0.2.2 32
int g0/0/1
ip add 10.0.26.2 24
int g0/0/0
ip add 10.0.24.2 24
q
bgp 200
 peer 10.0.24.4 as-number 400
 peer 10.0.26.6 as-number 500
 #
 ipv4-family unicast
  undo synchronization
  network 10.0.2.2 255.255.255.255
  peer 10.0.24.4 enable
  peer 10.0.26.6 enable


R3:
sys
sysname R3
int g0/0/0
ip add 10.0.13.3 24
int g0/0/1
ip add 10.0.34.3 24
q
bgp 300
 peer 10.0.13.1 as-number 100
 peer 10.0.34.4 as-number 400
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.13.1 enable
  peer 10.0.34.4 enable


R4:
sys
sysname R4
int g0/0/0
ip add 10.0.24.4 24
int g0/0/1
ip add 10.0.34.4 24
q
bgp 400
 peer 10.0.24.2 as-number 200
 peer 10.0.34.3 as-number 300
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.24.2 enable
  peer 10.0.34.3 enable


R5:
sys
sysname R5
int g0/0/1
ip add 10.0.15.5 24
int g0/0/0
ip add 10.0.56.5 24
q
bgp 500
 peer 10.0.15.1 as-number 100
 peer 10.0.56.6 as-number 500
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.15.1 enable
  peer 10.0.56.6 enable
  peer 10.0.56.6 next-hop-local


R6:
sys
sysname R6
int g0/0/0
ip add 10.0.56.6 24
int g0/0/1
ip add 10.0.26.6 24
q
bgp 500
 peer 10.0.26.2 as-number 200
 peer 10.0.56.5 as-number 500
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.26.2 enable
  peer 10.0.56.5 enable
  peer 10.0.56.5 next-hop-local

可以看到,R1的 BGP路由表中存在两条去往10.0.2.2/32的路由,下一跳分别为R5(10.0.15.5)和R3(10.0.13.3),但是优选的是下一跳为R5的路由。这两条路由的 PrefVal值均为0,LocPrf属性均为空,均不是本地生成的路由,但它们的 AS_Path属性不同。观察发现,下一跳为R5的路由的AS_Path属性为500 200,所以长度为2,而下一跳为R3的路由的AS_Path属性为300 400 200,所以长度为3,于是,R1最终选择了下一跳为R5的路由,因为它的AS_Path长度较小。

现在,假定R5和R6的流量负担太重,希望用户网络10.0.1.1/32与10.0.2.2/32之间的通信优先选用经由R3和R4的路径。
为了实现这个需求,最直接的做法是在Rl上拒绝接收来自AS 500的关于10.0.2.2/32的路由信息,以及在R2上拒绝接收来自AS 500的关于10.0.1.1/32的路由信息。但是,如此一来,R1和R2的BGP路由表中将不再有经由AS 500去往对方的路由信息,当经由R3和R4之间的链路发生故障时,两个用户网络的通信就会中断。为此,可以采用修改AS_Path的方法来更好地实现上述需求。
使用Route-Policy对R1接收的来自AS 500的关于10.0.2.2/32的路由信息中的AS Path属性讲行修改。

bgp 100
 peer 10.0.15.5 route-policy as import
#
route-policy as permit node 10
 if-match ip-prefix as
 apply as-path 500 500 additive
#
route-policy as permit node 20
#
ip ip-prefix as index 10 permit 10.0.2.2 32

 可以看到,现在R1优选了下一跳为10.0.13.3,即通过R3的路径,原因是现在经由R5的路由的AS_Path属性变为了500 500 500 200,长度为4。

 可以看到,从10.0.2.2/32去往10.0.1.1/32的报文依旧选用的是经由AS 500的路径。为了实现从10.0.2.2/32去往10.0.1.1/32的报文同样选用经由R4、R3的路径,可以在R2上修改来自AS 500的关于10.0.1.1/32的路由信息的AS_Path 属性。

bgp 200
 peer 10.0.26.6 route-policy as import
#
route-policy as permit node 10
 if-match ip-prefix as
 apply as-path 300 500 500 100 overwrite 
#
route-policy as permit node 20
#
ip ip-prefix as index 10 permit 10.0.1.1 32

 可以看到,现在R2去往10.0.1.1/32网络时,选用的是下一跳为10.0.24.4,即经由R4和R3的路径。经由R6的路由的AS_Path属性已被修改为300 500 500 100,长度为4。注意,选用overwrite关键字,路由策略会使用配置的AS编号序列替换原有的AS_Path属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansible的脚本-----playbook剧本【上】

目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一:给被管理主机安装httpd服务 2.2 实战演练二:定义、引用变量 2.3 实战演练三:指定远程主机sudo切换用户 2.4 实战演练四:when条件判断 2.5 实战演练五&…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

【C#】visual studio打包winForm(依赖DLL)为安装程序exe

0.简介 IDE:VS2022 平台:C# .NetFramework4.7 WinForm界面 有GDAL、EEplus库的依赖,所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件 在VS扩展中选择管理扩展,Microsoft Visual Studio Installer Projects …

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一,既能在客户端程序中使用,也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目,在Nuget包管理器中搜索并安装Quartz包,如下所…

51单片机嵌入式开发:18、STC89C52RC嵌入式DS1302实时时钟实验及数码管显示

STC89C52RC嵌入式DS1302实时时钟实验及数码管显示 STC89C52RC嵌入式DS1302实时时钟实验及数码管显示1 概述1.1 DS1302简介1.2 DS1302功能和特点1.3 DS1302工作原理1.4 DS1302应用领域 2 DS1302设计原理2.1 引脚说明2.2 寄存器说明及使用(1)命令cmd字节说…

Redis的缓存问题:缓存穿透、缓存击穿和缓存雪崩

目录 一、缓存穿透 1、问题描述 2、解决方案 二、缓存击穿 1、问题描述 2、解决方案 三、缓存雪崩 1、问题描述 2、解决方案 3、雪崩案例 一、缓存穿透 1、问题描述 缓存穿透指的是⼤量请求的 key根本不存在于缓存中,每次针对此key的请求从缓存获取不到…

报红:找不到名称ref ts(2304)、‘ref‘ is not defined. eslint(no-undef)

接上篇 在上篇介绍了使用 unplugin-auto-import 和 unplugin-vue-components 配置完成后,项目可以正常运行,并且页面也正常显示,但vscode里就是报红 这个报红可能是由于 ts 发出的,也可能是由于 eslint 发出的 具体可以用鼠标…

如何使用 API list 极狐GitLab 群组中的镜像仓库?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC]

文章目录 某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请…

云计算实训13——DNS域名解析、ntp时间服务器配置、主从DNS配置、多区域DNS搭建

一、DNS域名解析 1.正向解析 将域名解析为IP地址 DNS正向解析核心配置 (1)安装bind [rootdns ~]# yum -y install bind (2)编辑配置文件 编辑named.conf文件,限定访问权限 [rootdns ~]# vim /etc/named.conf 编辑named.rfc文件,指定要访问的域名 [ro…

大语言模型推理优化--键值缓存--Key-value Cache

文章目录 一、生成式预训练语言模型 GPT 模型结构二、FastServe 框架三、Key-value Cache1.大模型推理的冗余计算2.Self Attention3.KV Cache 一、生成式预训练语言模型 GPT 模型结构 目前,深度神经网络推理服务系统已经有一些工作针对生成式预训练语言模型 GPT 的独…

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上) 大家好 我是寸铁👊 【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法,如果要设计多线程程序,一般是从 QThread继承定义一个线程类,在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR(光学字符识别)软件,可让您轻松从照片中提取文本。它支持多种语言,并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作: Umi-OCR无需互联网连接即可工作&…

Python实现websocket连接服务器报rejected WebSocket connection: HTTP 401

1. websockets报HTTP 401解决办法 代码如下: #!/usr/bin/env python import asyncio import websockets import requestsuri ws://192.168.20.167/websocket msg {"type":6,"param":{"businessType":3,"cmd":1,"f…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库,它存储了关于所有其他数据库的元数据信息。…

20240724-然后用idea创建一个Java项目/配置maven环境/本地仓储配置

1.创建一个java项目 (1)点击页面的create project,然后next (2)不勾选,继续next (3)选择新项目名称,新项目路径,然后Finsh,在新打开的页面选择…

无人机上磁航技术详解

磁航技术,也被称为地磁导航,是一种利用地球磁场信息来实现导航的技术。在无人机领域,磁航技术主要用于辅助惯性导航系统(INS)进行航向角的测量与校正,提高无人机的飞行稳定性和准确性。其技术原理是&#x…

康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(四)

在上一篇文章 “康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(三)”,我们讲述了在构建FMU中,如何通过fmi_simple_car.cpp来实现FMI2.0,即如何实现一个简单的车辆模型来进行车辆动力学仿真。今天康谋接着展示如何通…

MFC与QT中禁用Esc、Alt+F4、关闭图标

在业务中,我们需要按指定的方式才能关闭当前对话框。如下图需输入密码点击确认后,界面才能关闭。 1.禁用关闭按钮 在对话框初始化部分添加将关闭按钮禁用 //MFC CMenu *pSysMenu GetSystemMenu(FALSE); ASSERT(pSysMenu ! NULL); pSysMenu->EnableM…