找回密码
 立即注册
搜索
查看: 156|回复: 0

深入解析网状网络:动态路由与自我调校机制的全面探讨

[复制链接]

2万

主题

0

回帖

6万

积分

管理员

积分
61942
发表于 2024-12-7 19:29:45 | 显示全部楼层 |阅读模式
网状网络(Mesh)是一种在网络节点之间动态路由以传输数据和控制指令的方法。这种网络可以保持各个节点之间的连接完好。当网络拓扑中的某个节点发生故障或无法提供服务时,该架构允许使用“跳数”形成新的路由,然后将消息发送到传输目的地。

在网状网络中,所有节点都可以连接到拓扑中的所有节点,形成“局域网”。网状网络与常规网络架构的不同之处在于,所有节点都可以通过多跳通信数据,但它们通常不是移动设备。网状网络可以被视为点对点架构。移动点对点网络在架构上与网状网络非常相似,只不过移动点对点网络必须随时更新其配置以应对每个节点的移动。

Mesh网络自调整机制:即使拓扑中的某个节点失效或过于繁忙,网络仍能正常运行。这导致了高度可靠的网络架构。这种架构适用于无线网络、有线网络,甚至软件架构。

当一个节点启动时(绿色LED灯亮),所有节点都会定期收集广播消息来确定拓扑的形成。另外,当某个节点发生故障时,经过该节点的原始通信路径将找到替代路径,因此网络可以保持连通性而不会中断。无线网络是网状网络最典型的应用。无线网状网络最初用于军事目的,但在过去十年中经历了重大改进。

无线网状网络迄今为止已经经历了三代演进,每一次的反复演进都提供了更好的可靠性和多样化的功能。随着无线电成本迅速下降,单频段无线网状网络节点产品逐渐发展为支持多个频段,利用额外的无线电波提供额外的功能——例如:客户端接入、后端网络(最后一英里)或扫描通道在移动应用中提供快速信号切换。网状网络节点的设计也越来越模块化——一个盒子可以支持多个多频段网卡——每个网卡都可以在不同的频率下运行。因此,第三代网状网络技术实现了一系列全新的应用。这包括实时视频监控、周边安全或语音通信。

网状网络拓扑

例子

网状网络可能由固定或移动设备组成,因此实际的解决方案会根据通信环境而变化。 VoIP 是网状网络的应用之一。通过相关的QoS机制,语音数据包可以在网状网络中尽可能快地传输。最近的一些应用包括:

美军已经使用无线网状网络连接战场上的军用计算机,这使得军方能够知道每名士兵的位置,从而增强军队协调行动的能力。一些城市已经安装了电子水表或电表,将读数一一传输给公用事业公司,从而无需额外的读表器或安装额外的电缆来传输数据。学生可以拥有具有网状路由器功能的笔记本电脑,这样他们不仅可以交换文件,还可以通过其他具有网络连接的人连接到互联网。由66颗卫星组成的【铱星卫星】系统本身就是一个网状网络系统,相邻的铱星卫星会相互连接,形成一个网状顶部。呼叫将通过铱星卫星网状网络路由到目的地,无需地面通信站的协助,从而减少传输距离和通信延迟。

-

网状网络的优点

与传统WLAN相比,无线Mesh网络具有几大无可比拟的优势:

1.部署快速且易于安装。安装 Mesh 节点非常简单。只需将设备从包装盒中取出并将其连接到电源即可。由于安装大大简化,用户可以轻松添加新节点以扩展无线网络的覆盖范围和网络容量。在无线Mesh网络中,并不是每个Mesh节点都需要有线电缆连接,这是与有线AP最大的区别。 Mesh的设计目标是最大限度地减少有线设备和有线AP的数量,从而大大降低总拥有成本和安装时间。仅此一项所带来的成本节约就非常可观。无线Mesh网络的配置和其他网络管理功能与传统WLAN相同。用户使用WLAN的经验可以很容易地应用到Mesh网络中。

2.非视距传输(NLOS)。利用无线Mesh技术可以轻松实现非视距配置,因此在室外和公共场所具有广泛的应用前景。与发射器处于直接视线范围内的用户首先接收无线信号,然后将接收到的信号转发给不在直接视线范围内的用户。这样,信号就可以自动选择最佳路径从一个用户连续跳转到另一个用户,最终在无直视视线的情况下到达目标用户。这样,直视用户就可以有效地为附近无直视用户提供无线宽带接入。无线Mesh网络的非视距传输特性极大地拓展了无线宽带的应用领域和覆盖范围。

3.稳健性。实现网络健壮性的常见方法是使用多个路由器来传输数据。如果路由器发生故障,信息将由其他路由器通过备用路径发送。电子邮件就是一个例子。电子邮件信息被分成多个数据包,然后通过多个路由器发送,最后组装成信息到达用户的收件箱。网状网络比单跳网络更稳健,因为它们不依赖于单个节点的性能。在单跳网络中,如果一个节点发生故障,整个网络就会瘫痪。在Mesh网络结构中,每个节点都有一条或多条路径用于传输数据。如果最近的节点发生故障或受到干扰,数据包将自动路由到备用路径进行传输,整个网络的运行不会受到影响。

4、结构灵活。在单跳网络中,设备必须共享一个AP。如果多个设备想要同时访问网络,可能会发生通信拥塞并降低系统速度。在多跳网络中,设备可以同时通过不同的节点连接到网络,因此不会降低系统性能。网状网络还提供更强的冗余机制和通信负载平衡能力。在无线Mesh网络中,每个设备都有多条可用的传输路径,网络可以根据每个节点的通信负载动态分配通信路由,从而有效避免节点通信拥塞。然而,当前的单跳网络无法动态处理通信干扰和接入点过载。

5、高带宽。无线通信的物理特性决定了通信传输距离越短,越容易获得高带宽,因为随着无线传输距离的增加,各种干扰等导致数据丢失的因素增多。因此,选择通过多短跳来传输数据将是获得更高网络带宽的有效途径,而这正是Mesh网络的优势。

在Mesh网络中,节点不仅可以发送和接收信息,还可以充当路由器,向其附近的节点转发信息。随着更多的节点相互连接以及可能的路径数量增加,总带宽也大大增加。

另外,由于每短跳的传输距离较短,因此传输数据所需的功率也较小。由于多跳网络通常使用较低的功率向相邻节点传输数据,节点之间的无线信号干扰也较小,因此网络的信道质量和信道利用效率大大提高,从而实现更高的网络容量。例如,在高密度的城市网络环境中,Mesh网络可以减少使用无线网络的相邻用户之间的相互干扰,大大提高信道利用效率。

Mesh网络在物联网领域的意义

之前讲了很多理论,那么Mesh网络对于物联网的应用有什么意义呢?

首先,我们常见的WIFI是有距离限制的。该距离由连接节点和路由器之间的距离决定。目前延长这种传输距离的方式主要有两种:

使用可穿墙的大功率路由器(形成星形网络),并在主路由器与节点之间的有效距离内添加中继器(AP)(形成树形网络)

然而,这些方法要求连接到网络的设备必须首先连接到路由器或中继器。也就是说,如果拿它来举例的话,就意味着首先要执行下面的代码:

<p><pre>    <code class="c">void setup() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }


  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}
</code></pre></p>
只有获取了WIFI连接上的IP地址后,我们才能通过TCP/IP与其他节点进行通信。

思考:如果我们的环境中没有路由器怎么办?两人能愉快地交流吗?

答案是:是的!

实现的网格节点

将以下程序分别写入两台不同的机器中,然后通过串口连接并打开两台机器上的串口监视器。

<p><pre>    <code class="c">#include <ESP8266WiFi.h>
#include <ESP8266WiFiMesh.h>
unsigned int request_i = 0;
unsigned int response_i = 0;
String manageRequest(String request);
/* Create the mesh node object */
ESP8266WiFiMesh mesh_node = ESP8266WiFiMesh(ESP.getChipId(), manageRequest);
/**
* Callback for when other nodes send you data
*
* @request The string received from another node in the mesh
* @returns The string to send back to the other node
*/
String manageRequest(String request)
{
    /* Print out received message */
    Serial.print("received: ");
    Serial.println(request);
    /* return a string to send back */
    char response[60];
    sprintf(response, "Hello world response #%d from Mesh_Node%d.", response_i++, ESP.getChipId());
    return response;
}
void setup()
{
    Serial.begin(115200);
    delay(10);
    Serial.println();
    Serial.println();
    Serial.println("Setting up mesh node...");
    /* Initialise the mesh node */
    mesh_node.begin();
}
void loop()
{
    /* Accept any incoming connections */
    mesh_node.acceptRequest();
    /* Scan for other nodes and send them a message */
    char request[60];
    sprintf(request, "Hello world request #%d from Mesh_Node%d.", request_i++, ESP.getChipId());
    mesh_node.attemptScan(request);
    delay(1000);
}
</code></pre></p>
请注意,我上面的代码没有建立任何WIFI连接!接下来打开串口监视器查看运行效果:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【智道时空】 ( 京ICP备20013102号-16 )

GMT+8, 2025-5-9 10:42 , Processed in 0.065143 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表