ADOV路由和DSR路由matlab对比仿真
1.程序功能描述
ADOV路由和DSR路由的仿真,仿真输出网络的路由路径,跳数,路由长度,并对比ADOV和DSR的性能。
2.测试软件版本以及运行结果展示
MATLAB2022a版本运行
3.核心程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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)包含在数据包头中,以便中间节点能够根据该路径转发数据包。
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签