【路由交换方向IE认证】BGP选路原则之Weight属性


文章目录

  • 一、路由器BGP路由的处理过程
    • 控制平面和转发平面
    • 选路工具
  • 二、BGP的选路顺序
    • 选路的前提
    • 选路顺序
  • 三、Wight属性选路原则
    • 规则9与规则11的潜移默化
    • 使用Weight值进行选路
      • 直接更改Weight值进行选路
      • 配合使用route-map进行选路
  • 四、BGP邻居建立配置

一、路由器BGP路由的处理过程

路由器对BGP路由的处理过程,简单来说就是BGP中的选路过程

控制平面和转发平面

一、控制平面 :是从起点到目的地所使用的IGP,BGP等路由协议从而控制产生路由表,VPNV4路由表,标签转发表等

二、转发平面 :也叫做数据平面,根据刚刚产生的路由表,VPNV4路由表,标签转发表去进行数据的从起点到目的地的转发

image-20250410211308046

图1-1

选路工具

在 BGP 选路中有两个重要的概念:

一、策略机 : 相当于route-map,能够对属性值进行修改,影响路由表的生成(在控制平面上:是一个过程),从而影响用户的数据转发

①输入策略机:路由进入本地时的route-map,我们可以理解为 in 方向,会影响自身和下游的路由器

②输出策略机:路由离开本地时的route-map,我们可以理解为 out 方向,只会影响下游的路由器,不会影响自身

二、路由决策 : 根据刚刚的策略机(route-map)选择出最佳的路径,并且将最佳的路径添加到路由表中,简单来说就是去哪里,哪条路比较方便或近

如图1-2,就是BGP路由的处理过程

image-20250410213600930

图1-2

二、BGP的选路顺序

选路的场景主要面对同一个目的网络存在多种去的方式

如图2-1,对于R3来说,去往192.168.10.0/24有去往R1或R2两条路可以选

image-20250410215455583

图2-1

选路的前提

我们选路的前提是路由的下一跳可达,如果说路由的下一跳不可达的话,那么选路将不具有任何意义

选路顺序

  1. 我们之前学过的那么多个BGP属性都是能够应用到BGP路由的选路当中的,但是也是存在依照属性进行选路的顺序的,并且如果较为前的属性已经选出最佳路径,那么后面的属性将不会影响到属性

  2. 例如:路由器已经依照Local Preference选出了最佳的路径,而MED值无论在怎么进行修改都是无济于事的

选路顺序如下

  1. 优选Weight值较高的;
  2. 优选Local Preference值较高的;
  3. 优选AS-Path长度较短的;
  4. 按照Origin属性为IGP、EGP、Incomplete类型的路由进行选路;(IGP > EGP > Incomplete)
  5. 优选MED值较小的路由
  6. 按照EBGP路由,接着是联盟EBGP路由,最后是IBGP路由的顺序
  7. 优越最近的IGP邻居通告的路由
  8. 执行等价负载均衡(默认是没有开启等价负载均衡的)
  9. 优选BGP Router-ID 小的 Peer 通告的路由
  10. 优选Cluster-list长度较短的路由
  11. 优选较小的 Peer 地址路由器通告的路由

这么多一串顺序我们将会逐一进行讲解,本文章所分享的是排位第一个的属性:Weight属性

三、Wight属性选路原则

1、Wight权重值,Cisco独有的属性,但是在锐捷和华为等一系列厂商设备里都有,其原因是Weight属性仅在本地有效,是传不出去给其它的BGP Peer的。

2、锐捷的Weight在本地默认值是32768,并且不可修改;Weight选路原则是Weight值越大越优先,BGP Peer学到的路由属性应该为0

规则9与规则11的潜移默化

如图3-1,当我们的将IP,bgp邻居等配置都完成后,其实我们的选路顺序已经生效了

文末提供配置过程

image-20250414114436327

图3-1

在我们没有进行配置属性的选路之前,BGP 路由已经自动产生了选路

如图3-2,从图中BGP 的路由表上可以看出来R4去往1.1.1.11.1.2.1的下一跳都是走2.2.2.2

这是因为我们在什么属性都相同的情况下,BGP 选路顺序的第9条和第11条就会自动生效

规则9优选BGP Router-ID长度较短的路由

规则11优选较小的Peer地址路由器通告的路由

对于R4而言,很明显,BGP Router-ID 较小的是R2这条路径,所以才自动进行了选路

在这里插入图片描述

图3-2

使用Weight值进行选路

直接更改Weight值进行选路

如果说我们想让R4走R3这条路呢?即去往1.1.1.1和1.1.2.1的下一跳是3.3.3.3

我们可以在R4通过直接针对R3,对他传来的路由进行修改。下述命令就是在R4上配置,使得R3传来的路由,R4认为其Weight值为10

如图3-3,很明显,与各个没有修改Weight值先比,现在的下一跳变成了3.3.3.3,说明了我们的目的达成了

R4(config)#router bgp 200			//进入BGP进程
R4(config-router)#nei 3.3.3.3 weight 10		//将BGP Peer 3.3.3.3发过来的路由的Weight值都改为10
R4(config-router)#ex

image-20250414122130122

图3-3

缺陷:但是这样使用命令直接修改有一个弊端,那就是只走R4-R3这条路的话,R4-R2那条路就已经完全的空闲了下来,只有R3出现了灾难的情况在启用R4-R2的路径

如图3-4,也就是说,我们这样做只起到了主备的作用,没有起到链路负载均衡的作用,非常地浪费带宽

这样的情况可以通过我们之前提到过的策略机,也就是route-map解决,起到链路负载均衡的作用

image-20250414133239797

图3-4

配合使用route-map进行选路

如图3-5,进行负载的分别结果是1.1.1.1–>R3–>R1,1.1.2.1–>R2–>R1

根据Weight值越大越优先的原则,我们可以将对于R2而言,在R4上修改1.1.2.1的Weight值为10

可以将对于R3而言,在R4上修改1.1.1.1的Weight值为10

image-20250414133907655

图3-5

在R4上增加配置命令如下

R4(config)#access-li 10 per 1.1.1.1 0.0.0.0		//匹配出1.1.1.1的感兴趣流
R4(config)#access-li 20 per 1.1.2.1 0.0.0.0		//匹配出1.1.2.1的感兴趣流
R4(config)#route-map to_R2 per 10			//创建route-map名为to_R2
R4(config-route-map)#mat ip add 20			//设置一个条件,匹配出ACL 20的流量,类似于编程里面的if语句
R4(config-route-map)#set weight 10			//当match的条件成立的时候,将weight值设为10,if成立后就执行什么的语句
R4(config-route-map)#ex
R4(config)#route-map to_R2 per 20
R4(config-route-map)#ex						//由于route-map末尾有一跳deny any,所以我们这里要写一个空route-map,用来匹配那几个感兴趣流之外的路由
R4(config)#route-map to_R3 per 10
R4(config-route-map)#mat ip add 10
R4(config-route-map)#set weight 10 
R4(config-route-map)#ex
R4(config)#route-map to_R3 per 20
R4(config-route-map)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 route-map to_R2 in			//将route-map应用到BGP进程中
R4(config-router)#nei 3.3.3.3 route-map to_R3 in
R4(config-router)#ex

Question:我们可以试想,如果没有那条空的route-map会这么样的?

Answer:那么将会出现R4上只收到1.1.1.1和1.1.2.1这两条路由,却把中间进行传输路由的路由条目给拒绝的,所以说,我们在配置route-map的时候,习惯性的还是需要加一条空路由

如图3-6,通过查看R4的BGP路由表可以知道,1.1.1.1和1.1.2.1的下一跳都发生了改变

并且也符合我们的预想,实现了链路上的负载均衡

image-20250414134534485

图3-6

四、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

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

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

相关文章

Missashe考研日记-day20

Missashe考研日记-day20 1 高数 学习时间:2h30min学习内容: 今天当然是刷题啦,做不等式的证明板块的真题,证明题懂的都懂,难起来是真的一点思路都没有,这个板块还没做完,做完再总结题型。 2…

了解JVM

一.JVM概述 1.JVM的作用 把字节码编译为机器码去执行,负责把字节码装载到虚拟机中 现在的 JVM 不仅可以执行 java 字节码文件,还可以执行其他语言编译后的字节码文件,是一个跨语言平台 2.JVM的组成部分 类加载器(ClassLoader)运行时数据区&#x…

LeetCode LCR157 套餐内商品的排列顺序

生成字符串的全部排列(去重):从问题到解决方案的完整解析 问题背景 在编程和算法设计中,生成字符串的所有排列是一个经典问题。它不仅出现在算法竞赛中,也在实际开发中有着广泛的应用,比如生成所有可能的…

pgsql:关联查询union(并集)、except(差集)、intersect(交集)

pgsql:关联查询union(并集)、except(差集)、intersect(交集)_pgsql except-CSDN博客

微信小程序中使用ECharts 并且动态设置数据

项目下载地址 GitHub 地址 https://github.com/ecomfe/echarts-for-weixin 将当前文件夹里的内容拷贝到项目中 目录&#xff1a; json: {"usingComponents": {"ec-canvas": "../components/ec-canvas/ec-canvas"} }wxml&#xff1a; <ec…

RV1126 人脸识别门禁系统解决方案

1. 方案简介 本方案为类人脸门禁机的产品级解决方案,已为用户构建一个带调度框架的UI应用工程;准备好我司的easyeai-api链接调用;准备好UI的开发环境。具备低模块耦合度的特点。其目的在于方便用户快速拓展自定义的业务功能模块,以及快速更换UI皮肤。 2. 快速上手 2.1 开…

深度学习ResNet模型提取影响特征

大家好&#xff0c;我是带我去滑雪&#xff01; 影像组学作为近年来医学影像分析领域的重要研究方向&#xff0c;致力于通过从医学图像中高通量提取大量定量特征&#xff0c;以辅助疾病诊断、分型、预后评估及治疗反应预测。这些影像特征涵盖了形状、纹理、灰度统计及波形变换等…

DeepSeek 接入 Word 完整教程

一、前期准备 1.1 注册并获取 API 密钥 访问 DeepSeek 平台&#xff1a; 打开浏览器&#xff0c;访问 DeepSeek 官方网站&#xff08;或您使用的相应平台&#xff09;。注册并登录您的账户。 创建 API 密钥&#xff1a; 在用户控制面板中&#xff0c;找到“API Keys”或“API…

驱动开发硬核特训 · Day 7:深入掌握 Linux 驱动资源管理机制(Resource Management)

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 总线驱动模型实战全解析 —— 以 PCA9450 PMIC 为例 敬请关注&#xff0c;记得标为原始粉丝。 &#x1f6a9; 在 Linux 驱动开发中&#xff0c;资源管理机制决定了驱动的稳定性与可靠性…

什么是TensorFlow?

TensorFlow 是由 Google Brain 团队开发的开源机器学习框架&#xff0c;被广泛应用于深度学习和人工智能领域。它的基本概念包括&#xff1a; 1. 张量&#xff08;Tensor&#xff09;&#xff1a;在 TensorFlow 中&#xff0c;数据以张量的形式进行处理。张量是多维数组的泛化…

【ChCore Lab 01】Bomb Lab 拆炸弹实验(ARM汇编逆向工程)

文章目录 1. 前言2. 实验代码版本问题3. 关于使用问题4. 宏观分析5. read_line 函数介绍6. phase_0 函数6.1. read_int 函数6.2. 回到 phase_0 函数继续分析6.3. 验证结果 7. phase_1 函数7.2. 验证结果 8. phase_2 函数8.1. read_8_numbers 函数8.2. 回到 phase_2 函数继续分析…

《Vue Router实战教程》20.路由懒加载

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 路由懒加载 当打包构建应用时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&am…

docker 多主机容器组网

一、服务器A 1、初始化Swarm集群&#xff08;管理节点&#xff09; docker swarm init --advertise-addr 主节点ip 2、获取工作节点​​加入Swarm集群所需的Token 和完整命令 docker swarm join-token worker 3、创建Overlay网络 docker network create -d overlay --subnet…

rancher 解决拉取dashboard-shell镜像失败的问题

问题背景 在 Kubernetes 集群中部署 Rancher 后&#xff0c;点击右上角的 "Shell" 按钮时&#xff0c;Rancher 会动态创建一个 dashboard-shell-xxxxx Pod&#xff0c;用于提供 Web 终端功能。然而&#xff0c;由于默认镜像 rancher/shell:v0.1.21 托管在 Docker Hu…

OpenCV day2

Matplotlib相关知识 Matplotlib相关操作&#xff1a; import numpy as np from matplotlib import pyplot as pltx np.linspace(0, 2 * np.pi, 100) y1 np.sin(x) y2 np.cos(x)# 使用红色虚线&#xff0c;圆点标记&#xff0c;线宽1.5&#xff0c;标记大小为6绘制sin plt.p…

【网络安全】通过 JS 寻找接口实现权限突破

未经许可,不得转载。 本文所述所有风险点均已修复。 文章目录 引言正文引言 以下些漏洞已被起亚方面修复;起亚方面确认,这些漏洞从未被恶意利用过。 2024年6月11日,我们发现起亚汽车存在一系列严重安全漏洞,攻击者仅凭车牌号即可远程控制车辆的核心功能。该攻击不需要接触…

LabVIEW 发电机励磁系统监测与诊断

在现代工业体系中&#xff0c;发电机作为关键的电能转换设备&#xff0c;其稳定运行对于电力供应的可靠性起着决定性作用。而励磁系统作为发电机的核心控制部分&#xff0c;直接影响着发电机的性能和电力系统的稳定性。一旦励磁系统出现故障&#xff0c;可能引发发电机电压波动…

MacOS红队常用攻击命令

MacOS红队常用攻击命令 1.自动化武器2.系统信息3.服务 & 内核信息4.快捷命令5.网络相关6.brew相关 / 软件包相关7.高权限命令8.创建一个管理员权限的后门用户 1.自动化武器 1、linPEAS LinPEAS 是一个脚本&#xff0c;用于在 Linux/Unix/MacOS 主机上搜索提权路径 2、me…

【数据结构_8】栈和队列

一、反向输出链表元素 Ⅰ使用递归进行反向输出 package stack; public class Test2 {static class Node{public String val;public Node next;//构造方法public Node(String val) {this.val val;this.next null;}}//利用递归来反向输出链表public static void reverse(Nod…

Java 正则表达式综合实战:URL 匹配与源码解析

在 Web 应用开发中&#xff0c;我们经常需要对 URL 进行格式验证。今天我们结合 Java 的 Pattern 和 Matcher 类&#xff0c;深入理解正则表达式在实际应用中的强大功能&#xff0c;并剖析一段实际的 Java 示例源码。 package com.RegExpInfo;import java.util.regex.Matcher; …