Mesh自组网技术及应用

前言:

Mesh自组网随着无线技术发展,在消费领域最近比较有热度。当然应用的场景不限于普通消费领域,在工业、军事领域被也是越来越重要。

 

一、什么是无线Mesh技术

1.1 无线自组网概念

      无线Mesh是一种智能、自组织、多跳、移动、对等、去中心化的自治网络通信系统 ,它不依赖于预设的基础设施 ,具有临时组网、快速展 开、无控制中心、抗毁性强等特点 ,

         是现代无线通信领域的重要组成部分 ,在军事和民用方面都具有广阔的应用场景。

1.2 无线Mesh技术起源

    无线Mesh自组技术起源于美国军事需求 ,寻求战场通信环境的快速建立,提升指挥作战能力。  目前已用于战场态势评估与实时战场网络化监测的美国军方列装产品。

1.3 国内政策支持

          2019年 国家发改委正式将数字移动通信、移动自组网、应急通信、卫星通信等产业列为鼓励类产业。

 

             

 2020年 ‘应急管理部科技和信息化司’ 开始征集 应急指挥无线宽带自组网标准规范。

 

 

                  

1.4 技术特点

  • 自组织:在网状网中,一个网状网节点必须能够发现对等网状网节点并与它们建立联系。我们不需要手动的去配置它或者操作它寻找对端设备,Mesh网络的特点就是自行感应相应的设备组织并互连。
     
  • 多节点:每个设备都是一个独立的个体,它们都可以互相感知对方的存在并分享它们已有的邻居。它可以通过任意方式动态地保持与其他单个或多个节点的连接通信。当一台设备出现问题时,会动态的改变网络拓扑结构,但并不影响设备正常工作。
     
  • 无中心:上面提到了,每个设备都是独立的个体,因此它们没有中心一说,相反,Mesh网络中的任意设备都可以看作一个中心,它们都会从自身角度考虑我该如何通过更好的路径转发数据信号。每一台设备都会计算从自身到其它每台设备的路径节点。
     
  • 协同通信:Mesh具备极强的适应能力,无论是手机、电脑、摄像头等等网络设备,都可以和Mesh进行互连,Mesh兼容其它网络的能力很强,可以做到全面覆盖。
     
  • 网络自愈合: 当一条线路断路时,该骨干网络会自动寻找其他最优路径,保证数据传输的通畅。

 

二、自组网路由协议

2.1 无线自组网路由协议分类

      

  • 主动路由协议:

      周期性的进行路由表的更新,找到一条到目的端的路径。网络中的每个节点需要有较高的保存信息的能力,可以维护通往其余节点的路由表。

      优点:具有延迟较小,可以快速适应网络的变化对系统的丢包率有很大的改善。缺点:适应小规模的网络,网络的控制开销较大。例如DSDV、OLSR属于主动路由协议。

  •  按需路由协议:

      工作原理是当有信息需要进行发送的时候,源端才启动路由发现进程,降低了网络控制方面的开销。当节点发送数据包时,重新开启路由发现的功能以泛洪的形式进行转发。

    优点:不用进行周期的广播,网络的开销比较小,带宽利用率相对来说较高,占用网络资源少。缺点:路由延时相对来说较高。例如DSR、AODV (SDR软件无线电用的比较多) 都属于按需路由协议。

  • 混合式路由协议:

      混合路由协议是对按需路由和主动路由进行了结合研究形成一种相比于它们各自更加优秀的混合路由协议。混合式路由协议具有快速收敛、网络环境适应性强和路由信息稳定可靠的特点,更加适用于复杂的网络环境。例如IEEE80211s,默认指定的协议HWMP。

2.1.1 几个常见协议简介

 

  • AODV 路由协议 (3层协议)

      在AODV协议中,当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出RREQ(路由请求)报文。

      RREQ报文中记录着发起节点和目标节点的网络层地址邻近节点收到RREQ,首先判断目标节点是否为自己。如果是,则向发起节点发送RREP(路由回应);

     如果不是,则首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播RREP,否则继续转发RREQ进行查找。

     AODV路由协议不用周期的进行路由表维护,只要在通信时才建立路由,相对其他路由协议来说大幅的减少路由开销。

 

  • OLSR 路由协议 (2层协议)

     OLSR是一种优化链路状态的主动路由协议,采用多点中继MPR(Multi Point Relay,中继节点)来控制分组信息的发送,从而降低洪泛现象造成的高负载。

   MPR节点的具有降低链路消息在传输范围内被重复广播和减小路由开销的作用。

   OLSR主要使用Hello消息和TC(Topology Control)两种控制消息,节点通过接收周围节点Hello消息来得到自己的一跳节点从而选择出MPR节点。

   OLSR的特点在于可以根据网络的不断变化进行及时地提供通信中需要的有效路由信息。

 

  • BATMAN-ADV (Better Approach To Mobile Ad-Hoc Networking) (2层协议)

     是一种通过OLSR改进并在路径选择过程中,考虑链路质量的新型主动路由协议。节点不必保留网络中全部的拓扑,只对最优的下一跳节点信息进行存储。

        官网: WikiStart - Open-Mesh - Open Mesh

      BATMAN adv路由算法

      BATMAN adv路由协议会周期性地向周围节点广播OGM包,当邻居节点接收OGM数据包时,首先判断数据包类型及是否与自己的版本号一致,

     如果不是OGM包类型或版本号不一致就丢弃该数据包,若是OGM包的类型和版本号一致就执行下一步,如果数据包的发送地址是本节点,就统计OGM包数量,

     然后丢弃该节点。如果OGM是邻居节点发送的节点就继续执行下一步。根据OGM包中的序列号判断是否第一次接收该节点,如果是则继续丢弃该数据包,

     如果不是则会根据里面的信息对该数据包进行处理并计算OGM的TQ值,然后更新路由表,最后再把接收到的OGM包进行转发。

     如果数据包即不是本地发的也不是邻居发的,则丢弃该数据包,最终根据TQ值来替代AODV路由协议中的跳数选择最优路径。下图为OGM包处理流程。

  •  
  • HWMP (Hybrid Wireless Mesh Routing Protocol )混合无线网状网路由协议(2层协议)

    HWMP协议是IEEE 802.11s草案中默认使用的路由协议,它是将反应式路由协议和基于树状拓扑的先验式路由协议相结合的综合性路由协议。

         反应式路由协议:节点间需要路由时,才发起路由请求,在节点间建立路由信息。

         先验式路由协议:设备组网后会先首先建立所有节点到根节点的路由信息。

三、自组网路由协议

3.1自组网架构分类

3.1.1 软件无线电台(SDR)

     一种是以FPGA+DSP+自组网协议(3层/2层)协议架构(多用于战术电台)下图是硬件构成:

PS:(Processing System)是处理系统,包括ARM Cortex-A9处理器、内存控制器、外设控制器等

PL:(Programmable Logic)是可编程逻辑部分,包括FPGA、DSP、RAM、IO等

下图是:一个ADI SDR软件的架构

https://www.analog.com/media/en/technical-documentation/user-guides/adrv9001-system-development-user-guide-ug-1828.pdf

3.1.2 战术电台有一个重要的特性:跳频技术

       起源:与传统的无线电通信不同,跳频(FH)定义了一种通过快速改变载波频率1来发送无线电信号的方法,Tesla在1903年的美国专利"信号传输方法"中首次提到了这种方法。

后来,在1942年,女演员Hedy Lamarr和作曲家George Antheil进一步巩固了这一概念,他们从钢琴的按键数量得到启发,在88个频率之间切换,以防止鱼雷的无线电控制受到干扰。

    如上图 如果将整个频带和持续时间划分为二维网格,那么在任何给定的时隙,将会使用不同的频率子带进行通信。跳频模式的随机性相当于增加了另一个只能在发送器和接收器之间解码的安全层,

使其具有较高的抗窄带干扰能力和较强的抗恶意拦截和封锁的能力。此外,跳频信号相互干扰小,可以和其他传统通信共享带宽,实现更高的频谱效率。随着跳频速率加快且使用更多的子频带,

跳频的优势变得更加突出,成为对许多不同应用有吸引力的解决方案。

3.1.3 WiFi Mesh

一种是以WiFi技术为基础+自组网协议架构(多用于民用、工业场景),下图为使用11ax技术的Mesh设备的硬件构成:
 

 

四、自组网路由协议Demo

4.1 基于RK3588使用batman-adv协议

 

  • 硬件平台:RK3588  + Ubuntu20 有线组网

  • 软件配置

    内核:batman-adv已经作为标准Linux内核的网络驱动,打开配置即可:
     

    Ubuntu20:从官网下载对应一致的版本  Index of /batman/releasesbatman-adv v2020.4版本编译完成,加载驱动即可

    乐凡机器刷机后可以看到:batman-adv的版本是 2020.4的版本
     
    需交叉编译应用层配置程序:batctl
     上图显示我们的板卡 有一个 有线口 eth0

    配置命令如下:

batctl meshif bat0 if add eth0  #新建bat0虚拟口,并将eth0加入bat0桥接口

ifconfig bat0 up # link up bat0

batctl bat0 orig_interval 1000 #设置OGM包广播频率 1s一次

ifconfig bat0 192.168.0.1 #设置bat0 ip server  

ifconfig bat0 192.168.0.2 #client

 

batctl n 查看邻居节点

ARM1:

pc:

3层ping:

2层batctl p:

 

 

batctl tcpdump -x interface ens33  #抓包查看协议详情:OGM IV 4 batman-adv版本

 

batctl tp 00:0c:29:d9:11:77 #测试带宽

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

滑动验证组件-微信小程序

微信小程序-滑动验证组件&#xff0c;直接引用就可以了&#xff0c;效果如下&#xff1a; 组件参数&#xff1a; 1.enable-close&#xff1a;是否允许关闭&#xff0c;默认true 2.bind:onsuccess&#xff1a;验证后回调方法 引用方式&#xff1a; <verification wx:if&qu…

11.Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor Docker 之分布式仓库 Harbor1. Harbor 组成2. 安装 Harbor Docker 之分布式仓库 Harbor Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器&#xff0c;由 VMware 开源&#xff0c;其通过添加一些企业必需的功能特性&#xff0c;例…

(一)趣学设计模式 之 单例模式!

目录 一、啥是单例模式&#xff1f;二、为什么要用单例模式&#xff1f;三、单例模式怎么实现&#xff1f;1. 饿汉式&#xff1a;先下手为强&#xff01; &#x1f608;2. 懒汉式&#xff1a;用的时候再创建&#xff01; &#x1f634;3. 枚举&#xff1a;最简单最安全的单例&a…

Chrome 浏览器(版本号49之后)‌解决跨域问题

谷歌浏览器解决跨域问题 如何查看 Chrome 浏览器版本号 打开 Chrome 浏览器点击右上角的三个点&#xff0c;打开“设置”页面 点击“关于Chrome” 查看版本号 解决跨域操作&#xff1a;windows系统为例 方法一&#xff1a;命令行启动方式&#xff08;最简单&#xff09; …

python中的JSON数据格式

文章目录 什么是json主要功能Python数据和Json数据的相互转化 什么是json JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据。JSON本质上是一个带有特定格式的字符串。 主要功能 json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编…

汽车智能制造企业数字化转型SAP解决方案总结

一、项目实施概述 项目阶段划分&#xff1a; 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑&#xff1a; 2022年6月6日&#xff1a;项目启动会2022年12月1日&#xff1a;系统上线 二、总体目标 通过SAP实施&#xff0c;构建研产供销协同、业财一…

JavaWeb-在idea中配置Servlet项目

文章目录 在idea中进行Servlet项目的配置(较新的idea版本)创建一个空的JavaSE项目(Project)创建一个普通的JavaSE板块(module)添加Web项目的配置定义一个对象模拟实现接口在web.xml中配置路径映射配置项目到Tomcat服务器启动Tomcat服务器进行测试 在idea中进行Servlet项目的配置…

【深度学习神经网络学习笔记(二)】神经网络基础

神经网络基础 神经网络基础前言1、Logistic 回归2、逻辑回归损失函数3、梯度下降算法4、导数5、导数计算图6、链式法则7、逻辑回归的梯度下降 神经网络基础 前言 Logistic 回归是一种广泛应用于统计学和机器学习领域的广义线性回归模型&#xff0c;主要用于解决二分类问题。尽…

力扣hot100 —— 电话号码字母组合; 子集 (非回溯做法)简单易懂

由于博主对回溯也不是很熟悉&#xff0c;这里提出一种简单易懂的解法&#xff08;有点暴力&#xff09; 解题思路&#xff1a; 每个数字对应有自己的字母串&#xff1b; 首先遍历将每个字母存入也就是 res{{a},{b},{c}} 然后遍历后续数子对应的字母&#xff0c;让每个字母与…

React 源码揭秘 | 更新队列

前面几篇遇到updateQueue的时候&#xff0c;我们把它先简单的当成了一个队列处理&#xff0c;这篇我们来详细讨论一下这个更新队列。 有关updateQueue中的部分&#xff0c;可以见源码 UpdateQueue实现 Update对象 我们先来看一下UpdateQueue中的内容&#xff0c;Update对象&…

解锁养生密码,拥抱健康生活

在快节奏的现代生活中&#xff0c;养生不再是一种选择&#xff0c;而是我们保持活力、提升生活质量的关键。它不是什么高深莫测的学问&#xff0c;而是一系列融入日常的简单习惯&#xff0c;每一个习惯都在为我们的健康加分。 早晨&#xff0c;当第一缕阳光洒进窗户&#xff0c…

muduo网络库2

Muduo网络库&#xff1a;底层实质上为Linux的epoll pthread线程池&#xff0c;且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环&#xff0c;有一个main Reactor负载accept连接&#xff0c;然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…

【大语言模型】【整合版】DeepSeek 模型提示词学习笔记(散装的可以看我之前的学习笔记,这里只是归纳与总结了一下思路,内容和之前发的差不多)

以下是个人笔记的正文内容: 原文在FlowUs知识库上&#xff0c;如下截图。里面内容和这里一样&#xff0c;知识排版好看一点 一、什么是 DeepSeek 1. DeepSeek 简介 DeepSeek 是一家专注于通用人工智能&#xff08;AGI&#xff09;的中国科技公司&#xff0c;主攻大模型研发与…

AWQ和GPTQ量化的区别

一、前言 本地化部署deepseek时发现&#xff0c;如果是量化版的deepseek&#xff0c;会节约很多的内容&#xff0c;然后一般有两种量化技术&#xff0c;那么这两种量化技术有什么区别呢&#xff1f; 二、量化技术对比 在模型量化领域&#xff0c;AWQ 和 GPTQ 是两种不同的量…

ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用

ARM Cortex-M3 技术解析&#xff1a;核寄存器R1-R15介绍及使用 作为嵌入式开发领域的经典处理器内核&#xff0c;ARM Cortex-M3&#xff08;CM3&#xff09;凭借其高效能、低功耗和丰富特性&#xff0c;在工业控制、物联网、消费电子等领域广泛应用。而内核寄存器是我们调试代…

ROS ur10机械臂添加140夹爪全流程记录

ROS ur10机械臂添加140夹爪 系统版本&#xff1a;Ubuntu20.04 Ros版本&#xff1a;noetic Moveit版本&#xff1a;moveit-noetic 参考博客&#xff1a; ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客 UR5机械臂仿真实例&#xf…

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …

【落羽的落羽 数据结构篇】树、二叉树

文章目录 一、树1. 树的概念和结构2. 树的相关术语 二、二叉树1. 概念与结构2. 满二叉树3. 完全二叉树4. 二叉树的性质5. 二叉树的存储结构 一、树 1. 树的概念和结构 之前我们学习了线性表&#xff0c;今天我们再来接触一种全新的数据结构——树。 树是一种非线性的数据结构…

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…