1.程序功能描述

ADOV路由和DSR路由的仿真,仿真输出网络的路由路径,跳数,路由长度,并对比ADOV和DSR的性能。

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

3.核心程序

Nodes    = 30;
Radius = 10; %节点通信距离
Sp = 10; %开始点
Ep = 6; %目标点
X = 20*rand(1,Nodes);
Y = 20*rand(1,Nodes);
Z = 1*rand(1,Nodes);%节点的信任值 figure(1);
clf;
hold on;
%画拓扑结构
for i = 1:Nodes
plot(X(i), Y(i), '.');
text(X(i), Y(i), num2str(i));
for j = 1:Nodes
dist = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2);
if dist<= Radius
Fmat(i,j) = 1;
Tmat(i,j) = 1-((Z(i)+Z(j))/2);
dmat(i,j) = dist;
else
Fmat(i,j) = inf;
Tmat(i,j) = inf;
dmat(i,j) = inf;
end
end
end
%路由
[path, cost] = func_dijkstra(Sp,Ep,Tmat); dist_all=0;
for j=2:length(path)
dist_all= dist_all + dmat(path(j-1),path(j));
end for p =1:(length(path)-1)
line([X(Sp) X(path(1))],[Y(Sp) Y(path(1))],'Color','r','LineWidth', 1, 'LineStyle', '-')
line([X(path(p)) X(path(p+1))], [Y(path(p)) Y(path(p+1))], 'Color','r','LineWidth', 2, 'LineStyle','-')
end
grid disp('路由:');
path
disp('跳数:');
length(path)-1
disp('路由长度:');
dist_all save R1.mat
18

  

4.本算法原理

4.1 ADOV路由(Ad hoc On-demand Distance Vector Routing)

ADOV是一种反应式的路由协议,它仅在需要时才建立路由。这种路由协议主要包括三个过程:路由发现、路由维护和路由表更新。

路由发现:

当源节点需要向目的节点发送数据,但路由表中没有有效路由时,源节点会发起路由发现过程。它广播一个路由请求(RREQ)消息,该消息包含源节点和目的节点的地址、请求的序列号等信息。

路由维护:

每个节点都维护一个路由表,其中包含到达已知目的地的下一跳地址和跳数。当节点的路由表发生变化时(例如,链路中断),它会更新其路由表,并可能向邻居节点发送路由错误(RERR)消息。

路由表更新:

当节点收到RREQ或RERR消息时,它会根据这些消息更新其路由表。如果RREQ消息提供了一个更好的路由(即跳数更少),则节点会更新其路由表,并可能将RREQ消息转发给其邻居节点。

在ADOV路由中,一个重要的概念是路由度量。路由度量通常基于跳数,但也可以考虑其他因素,如链路质量。假设(d(i, j))表示从节点(i)到节点(j)的距离(以跳数计),则路由发现过程可以表示为寻找从源节点(s)到目的节点(d)的最短路径,即最小化(d(s, d))。

4.2 DSR路由(Dynamic Source Routing)

DSR是一种源路由协议,意味着路由是由源节点确定的,并且路由信息包含在数据包头中。DSR同样是反应式的,它使用路由缓存来存储先前发现的路由。

路由发现:

与ADOV类似,当源节点需要向目的节点发送数据但没有有效路由时,它会发起路由发现过程。不同的是,DSR会在RREQ消息中包含一个路由记录,该记录用于记录从源节点到目的节点的路径。

路由维护:

DSR使用路由缓存来存储先前发现的路由。当节点收到数据包时,它会检查数据包头中的路由信息,并根据该信息转发数据包。如果路由缓存中的路由不再有效(例如,由于节点移动导致链路中断),则节点会丢弃数据包,并可能向源节点发送路由错误消息。

在DSR中,路由发现过程可以表示为寻找从源节点(s)到目的节点(d)的有效路径(P)。路径(P)可以表示为一系列节点的序列:(P = \langle s, n_1, n_2, ..., n_k, d \rangle),其中(n_1, n_2, ..., n_k)是路径上的中间节点。源节点将路径(P)包含在数据包头中,以便中间节点能够根据该路径转发数据包。

ADOV路由和DSR路由matlab对比仿真的更多相关文章

  1. 第二十一节:Asp.Net Core MVC和WebApi路由规则的总结和对比

    一. Core Mvc 1.传统路由 Core MVC中,默认会在 Startup类→Configure方法→UseMvc方法中,会有默认路由:routes.MapRoute("defaul ...

  2. ip route rule 路由策略 高级路由 捆绑 网桥

    http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...

  3. CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP

    路由器 在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报.对于路由器来说,路由表是其内部最为重要的构成组件.当路由器需要转发数据时,就会按照路 ...

  4. ASP.NET Core的路由[2]:路由系统的核心对象——Router

    ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路由参数的形式解析出来供后续请求处理流 ...

  5. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  6. IP路由及静态路由配置

    IP路由及静态路由配置 qianghaohao(CodingNutter) 链接来源:http://www.cnblogs.com/codingnutter/p/5654271.html 一.IP路由 ...

  7. React Router 4.0 ---- 嵌套路由和动态路由

    嵌套路由,从广义上来说,分为两种情况:一种是每个路由到的组件都有共有的内容,这时把共有的内容抽离成一个组件,变化的内容也是一个组件,两种组件组合嵌套,形成一个新的组件.另一种是子路由,路由到的组件内部 ...

  8. ASP.NET的路由系统:路由映射

    总的来说,我们可以通过RouteTable的静态属性Routes得到一个基于应用的全局路由表,通过上面的介绍我们知道这是一个类型的RouteCollection的集合对象,我们可以通过调用它的MapP ...

  9. 【原创】一篇学会vue路由配置 、 动态路由 、多层路由(实例)

    先来看看效果图: 为了方便讲解,我没有使用vue脚手架,如果需要的,可以留言跟我要.不多说开工: 首先,html先组上 <div id="app"> <div&g ...

  10. Vue-初步了解vue-router的三要素:路由map 、路由视图、路由导航

    安装vue-router模块 使用vue-router前要先安装vue-router库 cnpm install vue-router –save 使用vue-router vue-router有三个 ...

随机推荐

  1. Markdown基础语法入门

    Markdown基础语法入门 基础语法讲解 1.加粗 我是一段普通的文本信息. ** 我是一段普通的文本信息 ** 2.斜体 我是一段普通的文本信息. * 我是一段普通的文本信息 * 3.加粗+斜体 ...

  2. 深度学习入门 (4)softmax函数的实现

    softmax函数实现 import numpy as np a = np.array([0.3,2.9,4.0]) exp_a = np.exp(a) print(exp_a) sum_exp_a ...

  3. linux服务器更换主板后无法识别网卡(网卡启动失败)解决办法

    在我的超算集群里,有台服务器故障报修,主板坏了,更换主板后,无法识别网卡,用命令ifconfig -a 查看只显示lo loopback 127.0.0.1,以及eth7,eth8,eth9等没有网卡 ...

  4. 修改Element Slider 滑块 label选中样式 (自定义 Elementui Slider 滑块 样式)

    效果图: 1,加入slider滑块代码 <el-slider v-model="level" vertical :show-stops="true" :s ...

  5. ZYNQ linux上使用 USB CDC ACM

    一.USB CDC ACM介绍 USB CDC ACM 是 USB 通信设备类(CDC)中的一个子类,它提供了一种通过 USB 接口实现虚拟串行通信的标准方法. 1. 基本概念 CDC ACM 是 U ...

  6. Spring AOP 与 Solon AOP 有什么区别?

    Spring 和 Solon 作为容器型框架.都具有 IOC 和 AOP 的能力.其中: Spring AOP 使用表达式确定"切入点",可以是某个注解(有侵入),可以是包名或类名 ...

  7. php 开根号 不使用sqrt函数

    <?php /** * $t 是误差范围值 */ function squre($number ,$t){ $x1 = $number; $x2 = $number/2; while( abs( ...

  8. 二叉树 红黑树 B树 B+树 理解

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进 BAT 互联网公司. 话说两个多月前,小史通过了 A 厂的一面,两个多月后的今天,小史终于等到了 A 厂的 ...

  9. Huggingface Transformers库学习笔记(一):入门(Get started)

    前言 Huggingface的Transformers库是一个很棒的项目,该库提供了用于自然语言理解(NLU)任务(如分析文本的情感)和自然语言生成(NLG)任务(如用新文本完成提示或用另一种语言翻译 ...

  10. 《HelloGitHub》第 113 期

    兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...