计算机网络•自顶向下方法:路由选路算法

路由选路算法

在网络层中,选路是指数据包从源主机到目的主机的传输过程中,如何通过网络中的路由器选择一条合适的路径。路由器根据网络拓扑、路由表、协议规则等来决定如何将数据包转发到下一跳,直到数据包到达目的地。

在这里插入图片描述

选路算法分类

静态算法or 动态算法

  • 静态算法:路由随时间不变或缓慢变化 (手工配置)
  • 动态算法:路由器根据拓扑及链路代价的变化而自动更新路由

全局算法 or 分布式算法

全局算法:

  • 所有路由器具有关于拓扑和链路代价的全部信息
  • 集中式计算

分布式算法:

  • 路由器仅知道邻居节点以及到邻居节点的链路代价
  • 通过与邻居交换信息,进行迭代计算

链路状态(LS)选路算法

链路状态选路算法为全局算法,其基本思想为:每个节点利用可靠方法获得全网拓扑信息,抽象成一个带权拓扑图,计算到各个节点的最短路径

最常见的链路状态路由协议是 OSPF(Open Shortest Path First)

链路状态选路算法包括五个步骤:

  • 发现邻居:有链路直接相连的节点为邻居
  • 探测链路代价:探测到每个邻居的代价
  • 构造链路状态(LS)分组:利用邻居及链路代价信息
  • 扩散LS分组:向网络中所有节点发送LS分组
  • 计算路由:利用收到的LS分组构造网络拓扑,计算从本节点到其它各个节点的最短路径

一旦路由器有了完整的网络拓扑图,它就可以使用 Dijkstra 最短路径算法 来计算到每个目标的最短路径。

Dijkstra算法
1  Initialization: 
2    N’ = {u}      // N’为已找到最短路径的节点集合,初始时只有u
3    for all nodes v    //标记源节点u到各个节点v的路径代价D(v)
4      if v adjacent to u
5          then D(v) = c(u,v)   //c(u,v)为链路(u,v)的代价
6      else D(v) =7 
8   Loop 
9     find w not in N’ such that D(w) is a minimum  //下一条最短路径
10    add w to N’     //将找到最短路径的节点加入N’
11    update D(v) for all v adjacent to w and not in N’ :
12       D(v) = min( D(v), D(w) + c(w,v) )    //更新到相关节点的路径代价
13    until all nodes in N' 

在这里插入图片描述

Bellman-Ford 方程

假设 x 和 y 分别为源节点和目的节点, N ( x ) N(x) N(x)是x 的邻居集合, c ( x , p ) c(x,p) c(x,p)为 x 到其邻居 p 的链路代价, d x ( y ) d_x(y) dx(y)为从 x 到 y 的最小代价路径的代价,则:
d x ( y ) = m i n p { c ( x , p ) + d p ( y ) } , p ∈ N ( x ) ( B e l l m a n − F o r d 方程) d_x(y) = min_p\{{c(x,p) + d_p(y)}\},p∈N(x) \\(Bellman-Ford方程) dx(y)=minp{c(x,p)+dp(y)}pN(x)BellmanFord方程)
在这里插入图片描述

距离矢量(DV)算法

距离矢量算法:

  • 利用Bellman-Ford方程求解任意两个节点之间的最小代价路径
  • 主要贡献在于给出了分布式求解B-F方程的方法

算法的基本思想:

  • 节点 x 测量其到各个邻居 v 的链路代价 c ( x , v ) c(x,v) c(x,v)
  • 节点x 估计其到达各个节点 y 的最小代价 D x ( y ) D_x(y) Dx(y),这些代价构成了自己的距离矢量 D x = [ D x ( y ) : y є N ] D_x = [D_x(y): y є N ] Dx=[Dx(y):yєN]
  • 每个节点x周期性地将它的距离矢量 D x D_x Dx发送给邻居
  • 节点x拥有每个邻居v的距离矢量 D v = [ D v ( y ) : y є N ] D_v = [D_v(y): y є N ] Dv=[Dv(y):yєN]
  • 当节点 x 从各个邻居收到它们的距离矢量后,利用B-F方程更新自己的距离矢量: D x ( y ) ← m i n v { c ( x , v ) + D v ( y ) } D_x(y) ← min_v\{{c(x,v) +D_v(y)}\} Dx(y)minv{c(x,v)+Dv(y)}

距离矢量算法是迭代的、异步的、分布式算法。

RIP(Routing Information Protocol) 是最经典的基于 DV 算法的路由协议

特点
  • 好消息传播快
    • 当网络中某个链路代价变小时(例如,某条路径变得更短),节点通过距离矢量算法会迅速更新其路由表并通知邻居。由于每个节点都倾向于采用代价较小的路径,因此这个变化会以最快的方式沿着网络传播。
    • 原因:
      • Bellman-Ford 方程: D x ( y ) ← m i n v { c ( x , v ) + D v ( y ) } D_x(y)←min_v\{{c(x,v)+D_v(y)}\} Dx(y)minv{c(x,v)+Dv(y)}当某个链路代价 c ( x , v ) c(x,v) c(x,v) 减小时,所有受影响的节点会立刻采用新的较小代价进行更新。
      • 好消息无需额外验证,只需要简单比较,符合 Bellman-Ford 方程即可更新。
  • 坏消息传播慢
    • 当网络中某条链路断开或代价增加时,坏消息在距离矢量算法中传播较慢。这是因为距离矢量算法可能导致路由环路
    • 原因:
      • 节点在某些情况下无法立即获知链路断开的信息,会继续通过其邻居获取过时的距离矢量,误以为存在有效路径。
      • 更新代价遵循 Bellman-Ford 方程,但算法本身无法快速检测到全局无效路径的存在。

解决方法

  • 水平分割(Split Horizon):禁止节点将自己学到的信息传播回原来的来源。
  • 毒性逆转(Poisoned Reverse):若节点通过某个路径获知目标,则将该路径的代价设置为无穷大并通知邻居。

LS算法和DV算法的对比

通信复杂度

  • 链路状态(LS)算法
    • 链路状态信息需要在整个网络中传播
    • 每个节点向所有其他节点发送链路状态信息,通信复杂度较高
    • 传播范围:全网
  • 距离矢量(DV)算法
    • 距离矢量信息只需要发送给直接邻居。
    • 每个节点仅与其邻居交换信息,通信复杂度相对较低
    • 传播范围:仅邻居

收敛速度

  • 链路状态(LS)算法
    • 收敛速度快,所有节点在全网链路状态信息收集完毕后,利用 Dijkstra 算法进行路由计算
    • 收敛速度大致为 O ( ∣ N ∣ ∣ E ∣ ) O(|N||E|) O(N∣∣E) 个报文发送,主要取决于网络拓扑规模
  • 距离矢量(DV)算法
    • 收敛速度差异大,特别是在网络发生变化时,可能出现“坏消息传播慢”的现象
    • 可能出现路由环路,例如“计数到无穷问题”,导致收敛时间不确定

计算复杂度

  • 链路状态(LS)算法
    • 在链路状态收集完毕后,每个节点独立运行 Dijkstra 算法,计算复杂度为 O ( ∣ N ∣ 2 ) O(|N|^2) O(N2)
    • 适用于规模较小的网络,但对于大型网络计算代价会较高
  • 距离矢量(DV)算法
    • 计算复杂度较低,每个节点仅需简单地利用 Bellman-Ford 方程更新路由表
    • 计算复杂度大致为 O ( ∣ N ∣ ⋅ ∣ V ∣ ) O(|N| \cdot |V|) O(NV),其中 ∣ V ∣ |V| V 是直接邻居数

健壮性

  • 链路状态(LS)算法
    • 每个节点仅传播自己测量的本地链路代价,这些信息可靠且不会传播计算错误
    • 节点独立计算路由,不依赖邻居的路由信息
    • 优点:错误不会扩散
  • 距离矢量(DV)算法
    • 节点依赖邻居的距离矢量进行路由计算,邻居的距离矢量可能包含错误信息(“道听途说”)
    • 节点计算的路由信息需要传播给邻居,错误可能扩散
      靠且不会传播计算错误
    • 节点独立计算路由,不依赖邻居的路由信息
    • 优点:错误不会扩散
  • 距离矢量(DV)算法
    • 节点依赖邻居的距离矢量进行路由计算,邻居的距离矢量可能包含错误信息(“道听途说”)
    • 节点计算的路由信息需要传播给邻居,错误可能扩散
    • 缺点:网络中的故障可能导致错误快速传播并引发路由环路

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

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

相关文章

Qemu配置QXL显卡支持分辨率

默认情况下&#xff0c;创建的vm的视频RAM限制为16MB。在win操作系统中分辨率最高就只能调到1024x768。 <video><model typecirrus vram16384 heads1 primaryyes/><address typepci domain0x0000 bus0x00 slot0x02 function0x0/> </video>单单修改ram…

【区块链】零知识证明基础概念详解

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 零知识证明基础概念详解引言1. 零知识证明的定义与特性1.1 基本定义1.2 三个核心…

Redis面试相关

Redis开篇 使用场景 缓存 缓存穿透 解决方法一&#xff1a; 方法二&#xff1a; 通过多次hash来获取对应的值。 小结 缓存击穿 缓存雪崩 打油诗 双写一致性 两种不同的要求 强一致 读锁代码 写锁代码 强一致&#xff0c;性能低。 延迟一致 方案一&#xff1a;消息队列 方…

以太网协议和LWIP协议详解

一、以太网协议简介 以太网是一种产生较早&#xff0c;使用相当广泛的局域网技术。目前以太网根据速度等级分类大概分为&#xff1a;标准以太网&#xff08;10Mbit/s&#xff09;&#xff0c;快速以太网&#xff08;100Mbit/s&#xff09;&#xff0c;千兆以太网&#xff08;1…

Qt|QWidget窗口支持旋转

功能实现&#xff1a;使用QWidget创建的窗口支持窗口旋转功能。 展示的示例中支持由水平方向旋转至垂直方向。至于其它角度旋转的问题&#xff0c;看完这篇文章后应该会很简单能实现的&#xff01; 开发环境&#xff1a;win VS2019 Qt 5.15.2 在实现之前也有想用使用 QProp…

微信小程序滑动解锁、滑动验证

微信小程序简单滑动解锁 效果 通过 movable-view &#xff08;可移动的视图容器&#xff0c;在页面中可以拖拽滑动&#xff09;实现的简单微信小程序滑动验证 movable-view 官方说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.ht…

微服务实战——购物车模块实战

购物车 1. 数据模型分析 1.1. 需求描述 用户可以在登录状态下将商品添加到购物车【用户购物车/在线购物车】 放入数据库mongodb放入 redis&#xff08;采用&#xff09; 登录以后&#xff0c;会将临时购物车的数据全部合并过来&#xff0c;并清空临时购物车&#xff1b; 用…

1961-2022年中国大陆多干旱指数数据集(SPI/SPEI/EDDI/PDSI/SC-PDSI/VPD)

DOI: 10.5194/essd-2024-270 干旱指数对于评估和管理缺水和农业风险至关重要;然而&#xff0c;现有数据集中缺乏统一的数据基础&#xff0c;导致不一致&#xff0c;对干旱指数的可比性提出了挑战。本研究致力于创建CHM_Drought&#xff0c;这是一个创新且全面的长期气象干旱数…

xilinx的高速接口构成原理和连接结构及ibert工具的使用-以k7 GTX为例

一、相关简介 Xilinx的高速接口称之为transceivers(高速收发器&#xff09;&#xff0c;这部分的电路是专用电路&#xff0c;供电等都是独立的&#xff0c;根据速率可以分为GTP/GTX/GTH/GTY/GTM等。 Xilinx的高速接口是QUAD为单位的&#xff0c;没一个QUAD由一个时钟COMMON资…

机器学习之模型评估——混淆矩阵,交叉验证与数据标准化

目录 混淆矩阵 交叉验证 数据标准化 0-1标准化 z 标准化 混淆矩阵 混淆矩阵&#xff08;Confusion Matrix&#xff09;是一种用于评估分类模型性能的工具。 它是一个二维表格&#xff0c;其中行表示实际的类别&#xff0c;列表示模型预测的类别。 假设我们有一个二分类问题&…

第R3周:RNN-心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前言二、代码流程1、导入包&#xff0c;设置GPU2、导入数据3、数据处理4、构建RNN模型5、编译模型6、模型训练7、模型评估 电脑环境&#xff1a;…

40% 降本:多点 DMALL x StarRocks 的湖仓升级实战

小编导读&#xff1a; 多点 DMALL 成立于2015年&#xff0c;持续深耕零售业&#xff0c;为企业提供一站式全渠道数字零售解决方案 DMALL OS。作为 DMALL OS 数字化能力的技术底座&#xff0c;大数据平台历经多次迭代平稳支撑了公司 To B 业务的快速开展。随着国家产业升级和云原…

C语言——字符函数和内存函数

目录 前言 字符函数 1strlen 模拟实现 2strcpy 模拟实现 3strcat 模拟实现 4strcmp 模拟实现 5strncpy 模拟实现 6strncat 模拟实现 7strncmp 模拟实现 8strstr 模拟实现 9strtok 10strerror 11大小写字符转换函数 内存函数 1memcpy 模拟实现 2…

职场常用Excel基础04-二维表转换

大家好&#xff0c;今天和大家一起分享一下excel的二维表转换相关内容~ 在Excel中&#xff0c;二维表&#xff08;也称为矩阵或表格&#xff09;是一种组织数据的方式&#xff0c;其中数据按照行和列的格式进行排列。然而&#xff0c;在实际的数据分析过程中&#xff0c;我们常…

软考教材重点内容 信息安全工程师 第 12 章网络安全审计技术原理与应用

12.1.1 网络安全审计概念 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后”安全保障措施&#xff0c;保存网络安全事件及行为信息&#xff0c;为网络安全事件分析提供线索及证据&#xff0c;以便…

TT100K数据集, YOLO格式, COCO格式

TT100K交通标志数据集, 标签txt&#xff0c;图像已经分好了测试集&#xff0c;验证集&#xff0c;训练集 1️⃣可以直接导入YOLO进行训练&#xff0c;没有细分类&#xff0c;里面有的类&#xff0c; 闲鱼9.9 解君愁 &#xff0c;明人不说暗话 https://m.tb.cn/h.T7Ossey?tk…

更改element-plus的table样式

表头样式&#xff1a; <el-table :data"props.tableData" style"width: 100%" :header-cell-style"headerCellStyle" :cell-style"cellStyle"> </el-table>样式&#xff1a; // 表头样式 const headerCellStyle {backgro…

“善弈者”也需妙手,Oclean欧可林:差异化不是说说而已

作者 | 曾响铃 文 | 响铃说 俗话说&#xff0c;“牙痛不是病&#xff0c;痛起来要人命”。这话意思大家都知道&#xff0c;牙痛虽不是什么大病&#xff0c;可一旦发作却是极难忍受。 前几日&#xff0c;Oclean欧可林举办了一场AirPump A10氧气啵啵冲牙器新品品鉴会&#xff…

数字货币支付系统开发搭建:构建未来的区块链支付生态

随着数字货币的迅猛发展&#xff0c;越来越多的企业和机构开始关注如何搭建一个高效、安全、可扩展的数字货币支付系统。区块链技术因其去中心化、安全性高、透明性强等优势&#xff0c;已成为开发数字货币支付系统的首选技术。本文将深入探讨数字货币支付系统的开发和搭建过程…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署、常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台&#xff1b;我这里是安装的其他开源平台Kub…