本指南提供有关 ESP-MESH 协议的信息。有关 API 使用的更多信息,请参阅 MESH API 参考。
ESP-MESH 是一种基于 Wi-Fi 协议构建的网络协议。ESP-MESH 允许在大的物理区域(室内和室外)上分布的多个设备(以下称为节点)在单个 WLAN(无线局域网)下互连。ESP-MESH 具有自组织和自我修复功能,意味着网络可以自主构建和维护。
传统的 Wi-Fi 网络是一点对多点网络,其中称为接入点(AP)的单个中心节点直接连接到所有其他节点(station)。AP 负责仲裁和转发节点之间的传输。一些 AP 还通过路由器中继与外部 IP 网络的传输。传统的 Wi-Fi 网络由于要求每个站必须在一定范围内以直接与 AP 连接而具有有限覆盖区域的缺点。此外,传统的 Wi-Fi 网络易于过载,因为网络中允许的最大站数受到 AP 容量的限制。
ESP-MESH 与传统的 Wi-Fi 网络的不同之处在于节点不需要连接到中心节点。相反,允许节点与相邻节点连接。节点相互负责传递彼此的传输。这允许 ESP-MESH 网络具有更大的覆盖区域,因为节点仍然可以实现互连而无需在中心节点的范围内。同样,ESP-MESH 也不易受到过载的影响,因为网络上允许的节点数量不再受单个中心节点的限制。
术语 | 说明 |
---|---|
节点 | 任何属于或可以属于 ESP-MESH 网络的设备 |
根节点 | 网络中的顶级节点 |
子节点 | 当节点 X 连接到另一节点 Y 时,节点 X 是子节点,其中连接使节点 X 比根节点更远离节点 Y(就连接数而言)。 |
父节点 | 子节点的相反概念 |
子孙节点 | 通过从父节点到子节点重复进行都可以访问的任何节点(例:父->子->子孙) |
同级节点 | 共享同一父节点的节点 |
连接 | AP 与站之间的传统 Wi-Fi 关联。ESP-MESH 中的节点将使用其工作站接口与另一个节点的 SoftAP 接口关联,从而形成连接。连接过程包括 Wi-Fi 中的认证和关联过程。 |
上游连接 | 从节点到其父节点的连接 |
下游连接 | 从节点到其子节点之一的连接 |
无线跳数 | 源节点和目标节点之间的路径部分,对应于单个无线连接。遍历单个连接的数据包称为单跳,而遍历多个连接称为多跳。 |
子网 | 一个子网是 ESP-MESH 网络的细分,它由一个节点及其所有后代节点组成。因此,根节点的子网由 ESP-MESH 网络中的所有节点组成。 |
MAC 地址 | 媒体访问控制地址,用于唯一标识 ESP-MESH 网络中的每个节点或路由器。 |
DS | 分配系统(外部 IP 网络) |
ESP-MESH 基于 Wi-Fi 协议构建,可以被视为将许多单独的 Wi-Fi 网络组合到单个 WLAN 中的网络协议。在 Wi-Fi 中,Station 在任何时候都限于与 AP(上游连接)的单个连接,而 AP 可以同时连接到多个 Station(下游连接)。然而,ESP-MESH 允许节点同时充当 Station 和 AP。因此,ESP-MESH 中的节点可以使用其 SoftAP 接口具有多个下游连接,同时使用其 Station 接口具有单个上游连接。这就是具有由多个层组成的父子层次结构的树状网络拓扑结构。
ESP-MESH 是多跳网络,意味着节点可以通过一个或多个无线“跳跃”将数据包发送到网络中的其他节点。因此,ESP-MESH 中的节点不仅传输自己的数据包,还同时用作其他节点的中继。如果物理层上的任何两个节点之间存在路径(通过一个或多个无线跳),则 ESP-MESH 网络内的 任何两个节点(节点对) 都可以进行通信。
ESP-MESH 网络中的大小(节点总数)取决于网络中允许的最大层数,以及每个节点可以拥有的最大下游连接数。可以通过配置这两个变量限制网络的大小。
根节点: 根节点是网络中的顶级节点,并且是 ESP-MESH 网络和外部 IP 网络之间的唯一接口。 根节点连接到传统的 Wi-Fi 路由器,并将数据包中继到外部 IP 网络或从中继到 ESP-MESH 网络内的节点。 ESP-MESH 网络中只能有一个根节点,根节点的上游连接只可能与路由器连接。参考上图,节点 A 是网络的根节点。
叶节点: 叶节点是不允许具有任何子节点(没有下游连接)的节点。因此,叶子节点只能发送或接收自己的数据包,但不能转发其他节点的数据包。如果节点位于网络的最大允许层上,则将其指定为叶节点。这可以防止节点形成任何下游连接,从而确保网络不会添加额外的层。由于需要为任何下游连接提供 SoftAP 接口,因此一些没有 SoftAP 接口(仅限 Station)的节点也将被指定为叶节点。参考上图,节点 L/M/N 位于网络最大允许层上,因此已被指定为叶节点。
中间父节点: 既不是根节点也不是叶节点的连接节点是中间父节点。中间父节点必须具有单个上游连接(单个父节点),但可以具有零到多个下游连接(零到多个子节点)。因此,中间父节点可以发送和接收数据包,但也可以转发从其上游和下游连接发送的数据包。参考上图,节点 B 到 J 是中间父节点。没有下游连接的中间父节点(例如节点 E/F/G/I/J)不等同于叶节点,因为它们在将来仍然允许形成下游连接。
空闲节点: 尚未加入网络的节点被指定为空闲节点。空闲节点将尝试与中间父节点形成上游连接,或尝试在正确的情况下成为根节点(请参阅自动根节点选择)。参考上图,节点 K 和 O 是空闲节点。
ESP-MESH 中能够形成下游连接(即具有 SoftAP 接口)的每个节点将周期性地发送 Wi-Fi 信标帧。节点使用信标帧来允许其他节点检测其存在并知道其状态。空闲节点将监听信标帧以生成潜在父节点的列表,空闲节点将与其中一个形成上游连接。ESP-MESH 使用信标帧中的供应商信息(Vendor IE)元素来存储(传输)元数据,例如:
潜在上游连接的信号强度由潜在父节点的信标帧的 RSSI(接收信号强度指示)表示。为了防止节点形成弱上游连接,ESP-MESH 为信标帧实现了 RSSI 阈值机制。如果节点检测到 RSSI 低于预先配置的阈值的信标帧,则在形成上游连接时将忽略发送该信标帧的节点。
上图中的面板 A 展示了 RSSI 阈值如何影响空闲节点具有的候选父节点的数量。
上图中的面板 B 展示了 RF 屏蔽对象如何降低潜在父节点的 RSSI。由于 RF 屏蔽对象,节点 X 的 RSSI 高于阈值的区域显着减小。这导致空闲节点忽略节点 X,即使节点 X 在物理上相邻。由于更强的 RSSI,空闲节点将改为与物理上远的节点Y形成上游连接。
节点在技术上仍然接收 MAC 层上的所有信标帧。RSSI 阈值是 ESP-MESH 功能,它只是过滤掉所有接收到的低于预先配置阈值的信号帧。
当空闲节点具有多个候选父节点(潜在父节点)时,空闲节点将与首选父节点形成上游连接。首选父节点基于以下标准确定:
首选父节点的选择将始终优先考虑网络最浅层(包括根节点)上的候选父节点。这有助于在形成上游连接时最小化ESP-MESH网络中的层总数。例如,给定第二层节点和第三层节点,第二层节点将始终是首选的。
如果在同一层内存在多个候选父节点,则具有最少子节点的候选父节点将是首选的。该标准具有平衡同一层的节点之间的下游连接数的效果。
上图中的面板 A 展示了在给定五个候选父节点 B/C/D/E/F 的情况下空闲节点 G 如何选择首选父节点的示例。最浅层上的节点是首选的,因此节点 B/C 优先选择做为父节点,因为它们是第二层节点,而节点 D/E/F 在第三层上。选择节点 C 作为首选父节点,因为与节点 B 相比,它具有更少的下游连接(更少的子节点)。
上图中的面板 B 展示了根节点在空闲节点 G 的范围内的情况。换句话说,当节点 G 接收时,根节点的信标帧高于 RSSI 阈值。根节点始终是最浅节点,因此,在 ESP-MESH网络中,给定多个候选父节点时,根节点总是首选的父节点。
用户还可以定义自己的算法以选择首选父节点,或强制节点仅与特定父节点连接(请参阅手动 MESH 网络示例)。
ESP-MESH 网络中的每个节点将单独维护自己的路由表,用于将 ESP-MESH 数据包(请参阅 ESP-MESH 数据包)正确路由到正确目标节点。特定节点的路由表将包括特定节点的子网内所有节点的 MAC 地址(包括特定节点本身的 MAC 地址)。每个路由表在内部划分为多个子表,每个子表对应于每个子节点的子网。
使用上面的图作为示例,节点 B 的路由表将包括节点 B 到 I 的 MAC 地址(即,等同于节点 B 的子网)。节点 B 的路由表在内部划分为两个子表,包含节点 C 到 F 和节点 G 到 I(即分别等同于节点 C 和 G 的子网)。
ESP-MESH 利用路由表来确定是否应根据以下规则向上游或下游转发 ESP-MESH 数据包。
用户可以调用
esp_mesh_get_routing_table()
来获取节点的路由表,或者调用esp_mesh_get_routing_table_size()
来获取节点的路由表的大小。
esp_mesh_get_subnet_nodes_list()
可用于获取特定子节点的相应子表。同样,esp_mesh_get_subnet_nodes_num()
可用于获取子表的大小。
在 ESP-MESH 网络构建过程开始之前,配置的某些部分必须在网络中的每个节点上保持一致(请参阅
mesh_cfg_t
)。每个节点必须配置相同的 Mesh 网络 ID,路由器配置和 SoftAP 配置。
ESP-MESH 网络构建过程涉及根节点选择,然后逐层形成下游连接,直到所有节点都加入网络。网络的确切布局可以取决于诸如根节点选择,父节点选择和异步上电复位等因素。但是,ESP-MESH 网络构建过程可以概括为以下步骤:
根节点选择
根节点可以在配置期间指定(请参阅用户指定的根节点部分),或者根据每个节点和路由器之间的信号强度动态选择(请参阅自动根节点选择)。选择后,根节点将与路由器连接并开始允许形成下游连接。参考上图,节点 A 被选择为根节点,因此节点 A 与路由器形成上游连接。
第二层形成
一旦根节点连接到路由器,根节点范围内的空闲节点将开始与根节点连接,从而形成网络的第二层。连接后,第二层节点成为中间父节点(假设允许的最大层数 > 2),因此形成下一层。参考上图,节点 B 到 D 在根节点的范围内。因此,节点 B 到 D 与根节点形成上游连接,并成为中间父节点。
形成剩余层
剩余的空闲节点将与范围内的中间父节点连接,从而在网络中形成新层。连接后,空闲节点将成为中间父节点或叶节点,具体取决于网络允许的最大层数。重复该步骤,直到网络中不再有空闲节点或者直到达到网络的最大允许层为止。参考上图,节点 E/F/G 分别与节点 B/C/D 连接,并成为中间父节点本身。
限制树深度
为防止网络超出允许的最大层数,最大层上的节点一旦连接就会自动成为叶子节点。这防止任何其他空闲节点与叶节点连接,从而防止形成新的层形式。但是,如果空闲节点没有其他可能的父节点,它将无限期地保持空闲状态。参考上图,网络的最大允许层数设置为 4。因此,当节点 H 连接时,它成为叶节点以防止形成任何下游连接。
根节点的自动选择涉及所有空闲节点之间基于其与路由器的信号强度的选举过程。每个空闲节点将通过 Wi-Fi 信标帧发送其 MAC 地址和路由器 RSSI 值。MAC 地址用于唯一地标识网络中的每个节点,而路由器 RSSI 用于指示节点参考路由器的信号强度。
然后,每个节点将同时扫描来自其他空闲节点的信标帧。如果节点检测到具有更强路由器 RSSI 的信标帧,则该节点将开始发送该信标帧的内容(即,对具有更强路由器 RSSI 的节点进行投票)。传输和扫描的过程将重复预先配置的最小迭代次数(默认为 10 次迭代),这将导致具有最强路由器 RSSI 的信标帧在整个网络中传播。
在所有迭代之后,每个节点将单独检查其投票百分比(投票数/参与选举的节点数)以确定它是否应该成为根节点。如果节点的投票百分比大于预配置的阈值(默认为 90%),则该节点将成为根节点。
下图演示了在自动选择根节点时如何构建 ESP-MESH 网络。
可以使用
esp_mesh_set_attempts()
配置选举过程的最小迭代次数。用户应该基于网络内的节点数量来调整迭代次数(即,网络越大,所需的扫描迭代次数越多)。
也可以使用
esp_mesh_set_vote_percentage()
配置投票百分比阈值。设置低投票百分比阈值可导致两个或更多节点成为同一 ESP-MESH 网络内的根节点,从而导致建立多个网络。如果是这种情况,ESP-MESH 具有自主解决根节点冲突的内部机制。多个根节点的网络将组合成具有单个根节点的单个网络。但是,根节点冲突,其中两个或多个根节点具有相同的路由器 SSID 但不处理不同的路由器 BSSID。
根节点也可以由用户指定,这将使指定的根节点直接与路由器连接并放弃选举过程。当指定根节点时,网络中的所有其他节点也必须放弃选举过程以防止发生根节点冲突。 下图演示了当用户指定根节点时如何构建 ESP-MESH 网络。
在指定根节点时,根节点应调用
esp_mesh_set_parent()
以直接与路由器连接。同样,所有其他节点应调用esp_mesh_fix_root()
以放弃选举过程。
默认情况下,ESP-MESH 是自组织的,这意味着每个节点将自动选择与哪个潜在父节点形成上游连接。自主选择的父节点称为首选父节点。用于选择首选父节点的标准旨在减少 ESP-MESH 网络中的层数,并平衡潜在父节点之间的下游连接数(请参阅首选父节点)。
但是,ESP-MESH 还允许用户禁用自组织行为,这将允许用户定义自己的父节点选择标准,或配置节点以具有指定的父节点(请参阅手动 MESH 网络示例)。
ESP-MESH 网络建设可能受节点上电顺序的影响。如果网络中的某些节点异步上电(即相隔几分钟),则网络的最终结构可能与所有节点同步通电的理想情况不同。上电延迟的节点将遵循以下规则:
规则1:如果网络中已存在根节点,则延迟节点将不会尝试选择新的根节点,即使它与路由器具有更强的 RSSI。通过连接首选父节点,延迟节点将像任何其他空闲节点一样加入网络。如果延迟节点是指定的根节点,则网络中的所有其他节点将保持空闲,直到延迟节点通电。
规则2:如果延迟节点形成上游连接并成为中间父节点,则它也可以成为其他节点的新首选父节点(即,是较浅的节点)。这将导致其他节点切换其上游连接以与延迟节点连接(请参阅父节点切换)。
规则3:如果空闲节点具有在通电时被延迟的指定父节点,则空闲节点将不会在没有其指定的父节点的情况下尝试形成任何上游连接。空闲节点将无限期地保持空闲,直到其指定的父节点上电为止。
以下示例演示了异步上电对网络构建的影响。
同步上电:如果所有节点同步上电,节点 E 将成为根节点,因为它具有最强的路由器 RSSI(-10db)。与在异步通电条件下形成的网络相比,这将导致显着不同的网络布局。但是,如果用户手动切换根节点,仍然可以达到同步开机网络布局(请参阅 esp_mesh_waive_root()
)。
由异步上电引起的父节点选择的差异在 ESP-MESH 中在某种程度上被自动校正(参见父节点切换)
环路是特定节点与其后代节点之一(特定节点的子网内的节点)形成上游连接的情况。这导致圆形连接路径,从而破坏树状网络拓扑结构。ESP-MESH 通过排除在选择节点的路由表中已存在的节点(参见路由表)来防止在父节点选择期间产生环路,从而防止特定节点尝试连接到其子网内的任何节点。
在发生环路的情况下,ESP-MESH利用路径验证机制和能量传输机制来检测环路发生。导致环路的上游连接的父节点将通知子节点环路并启动断开连接。
ESP-MESH 是一个自我修复网络,意味着它可以检测并纠正网络路由中的故障。当具有一个或多个子节点的父节点发生故障或父节点与其子节点之间的连接变得不稳定时,会发生故障。ESP-MESH 中的子节点将自动选择新的父节点并与其形成上游连接以维持网络互连。ESP-MESH 可以处理根节点故障和中间父节点故障。
如果根节点发生故障,与其连接的节点(第二层节点)将立即检测到根节点的故障。第二层节点最初将尝试与根节点重新连接。但是,在多次尝试失败后,第二层节点将初始化新一轮的根节点选举。具有最强路由器 RSSI 的第二层节点将被选为新的根节点,而剩余的第二层节点将与新的根节点(或相邻的父节点,如果不在范围内)形成上游连接。
如果根节点和多个下游层同时发生故障(例如,根节点,第二层和第三层),仍然起作用的最浅层将初始化根节点选举。以下示例说明了从根节点分解的自我修复示例。
如果指定的根节点发生故障,则其余节点将不会自主地尝试选择新的根节点,因为在使用指定的根节点时将永远不会尝试选举过程。
如果中间父节点发生故障,则断开连接的子节点将首先尝试与父节点重新连接。在多次尝试重新连接失败后,每个子节点将开始扫描潜在的父节点(请参阅信标帧和 RSSI 阈值)。
如果其他可能的父节点可用,则每个子节点将单独选择新的首选父节点(请参阅首选父节点)并与其形成上游连接。如果特定子节点没有其他潜在父节点,则它将无限期保持空闲状态。
下图说明了从中间父节点分解的自我修复的示例。
如果子节点具有指定的父节点,则子节点将不会尝试连接新的父节点。子节点将无限期保持空闲状态。
除非根节点发生故障,否则 ESP-MESH 不会自动切换根节点。即使根节点的路由器 RSSI 降级到断开点,根节点也将保持不变。根节点切换是明确开始新选举的行为,使得具有更强路由器 RSSI 的节点将被选为新的根节点。这可以是适应降低根节点性能的有用方法。
要触发根节点切换,当前根节点必须显式调用 esp_mesh_waive_root()
以触发新选举。当前根节点将发信号通知网络内的所有节点开始发送和扫描信标帧(参见自动根节点选择),同时保持连接到网络(即,不空闲)。如果另一个节点收到的选票多于当前根节点,则将启动根节点切换。否则,根节点将保持不变。
新选择的根节点向当前根节点发送切换请求,该当前根节点将以确认响应,表示两个节点都准备切换。一旦收到确认,新选出的根节点将与其父节点断开连接,并迅速与路由器形成上游连接,从而成为网络的新根节点。先前的根节点将断开与路由器的连接,同时保持其所有下游连接并进入空闲状态。然后,先前的根节点将开始扫描潜在的父节点并选择首选父节点。
下图说明了根节点切换的示例。
根节点切换必须要求选举,因此仅在使用自组织 ESP-MESH 网络时才支持。换句话说,如果使用指定的根节点,则不能发生根节点切换。
父节点切换需要子节点将其上游连接切换到较浅层的另一个父节点。父节点切换自动发生,这意味着如果较浅层的潜在父节点变得可用(即,由于异步上电复位),子节点将自动改变其上游连接。
所有潜在的父节点周期性地发送信标帧(参见信标帧和 RSSI 阈值),允许子节点扫描较浅的父节点的可用性。由于父节点切换,自组织的 ESP-MESH 网络可以动态调整其网络布局,以确保每个连接具有良好的 RSSI 并且网络中的层数最小化。
ESP-MESH 网络数据传输使用 ESP-MESH 数据包。ESP-MESH 数据包完全包含在 Wi-Fi 数据帧的帧体内。ESP-MESH 网络中的多跳数据传输将涉及通过不同的 Wi-Fi 数据帧在每个无线跳上承载的单个 ESP-MESH 数据包。
下图显示了 ESP-MESH 数据包的结构及其与 Wi-Fi 数据帧的关系。
ESP-MESH 数据包的包头包含源节点和目标节点的 MAC 地址。选项字段包含与特殊类型的 ESP-MESH 数据包有关的信息,例如组传输或源自外部 IP 网络的数据包(请参阅 MESH_OPT_SEND_GROUP
和 MESH_OPT_RECV_DS_ADDR
)。
ESP-MESH 数据包的有效负载包含实际的应用程序数据。此数据可以是原始二进制数据,也可以在应用程序层协议(如 HTTP,MQTT 和 JSON)下编码(请参阅 mesh_proto_t
)。
将 ESP-MESH 数据包发送到外部 IP 网络时,包头的目标地址字段将包含目标服务器的 IP 地址和端口,而不是节点的 MAC 地址(请参阅
mesh_addr_t
)。此外,根节点将处理输出 TCP/IP 数据包的形成。
多播是一种允许将单个 ESP-MESH 数据包同时传输到网络中的多个节点的功能。ESP-MESH 中的多播可以通过指定目标节点列表或指定预先配置的节点组来实现。两种多播方法都是通过 esp_mesh_send()
调用的。
要通过指定目标节点列表进行多播,用户必须首先将 ESP-MESH 数据包的目标地址设置为多播组地址(01:00:5E:xx:xx:xx)。这表示 ESP-MESH 数据包是具有一组地址的多播数据包,并且该地址应从头选项中获取。然后,用户必须将目标节点的 MAC 地址列为选项(请参阅 mesh_opt_t
和 MESH_OPT_SEND_GROUP
)。这种多播方法不需要事先设置,但可能产生大量开销数据,因为每个目标节点的 MAC 地址必须列在数据包包头的选项字段中。
按组进行多播允许将 ESP-MESH 数据包传输到预先配置的节点组。每个组由唯一 ID 标识,并且可以通过 esp_mesh_set_group_id()
将节点放入组中。对组进行组播涉及将 ESP-MESH 数据包中的目的地址设置为目标组 ID。此外,必须设置 MESH_DATA_GROUP
标志。使用组进行多播会产生较少的开销,但需要先前将节点添加到组中。
在多播期间,网络中的所有节点仍然在 MAC 层上接收 ESP-MESH 数据包。但是,未包含在 MAC 地址列表或目标组中的节点将简单地过滤掉该数据包。
广播是一种允许单个 ESP-MESH 数据包同时传输到网络中所有节点的功能。每个节点基本上将广播包转发到其所有上游和下游连接,使得广播包尽可能快地在整个网络中传播。但是,ESP-MESH 利用以下方法避免在广播期间浪费带宽。
ESP-MESH 依靠父节点来控制其直接子节点的上游数据流。为了防止父节点的消息缓冲区由于上游传输的过载而溢出,父节点将为其每个子节点分配用于上游传输的配额,称为接收窗口。每个子节点必须在允许向上游传输之前申请接收窗口。 可以动态调整接收窗口的大小。从子节点到父节点的上游传输包括以下步骤:
ESP-MESH 不支持任何下游流量控制。
由于父节点切换,在上游传输期间可能发生数据包丢失。
由于根节点充当外部 IP 网络的唯一接口,因此下游节点了解根节点与外部 IP 网络的连接状态至关重要。如果不这样做,可能会导致节点在与 IP 网络断开连接时尝试将数据上行传递到根节点。这导致不必要的传输和数据包丢失。ESP-MESH 通过提供一种机制来解决此问题,该机制基于根节点和外部 IP 网络之间的连接状态来稳定传出数据的吞吐量。根节点可以通过调用 esp_mesh_post_toDS_state()
将其外部 IP 网络连接状态广播到所有其他节点。
下图说明了 ESP-MESH 双向数据流中涉及的各种网络层。
由于使用了路由表,ESP-MESH 能够完全在网状层上处理包转发。仅当根节点向/从外部 IP 网络发送/接收数据包时,才需要 TCP/IP 层。
在传统的 Wi-Fi 网络中,信道是预定的频率范围。在基本服务集(BSS)中,服务 AP 及其连接的 Station 必须在相同信道(1 至 14)上发送信标。在同一信道上运行的物理上相邻的 BSS(基本服务集)可能会导致干扰并降低性能。
为了使 BSS 适应不断变化的物理层条件并保持性能,Wi-Fi 包含用于网络信道切换的机制。网络信道切换是尝试将 BSS 移动到新的操作信道,同时在此过程中最小化对 BSS 的干扰。然而,应该认识到,在将所有 Station 移动到新的操作信道时,信道切换可能是不成功的。
在 Wi-Fi 网络中,AP 触发网络信道切换,目的是使 AP 和所有连接的 Station 同步切换到新信道。通过在 AP 的周期性发送的信标帧内嵌入信道切换公告(CSA)元素来实现网络信道切换。CSA 元素用于向所有连接的站点通告关于即将到来的网络信道切换,并且将被包括在多个信标帧中直到切换发生。
CSA 元素包含关于新信道号和信道切换计数的信息,其指示在网络信道切换发生之前剩余的信标帧间隔(TBTT)的数量。因此,每个信标帧递减信道切换计数,并允许连接的 Station 将其信道切换与 AP 同步。
ESP-MESH 网络信道切换还利用包含 CSA 元素的信标帧。然而,作为多跳网络使得 ESP-MESH 中的切换过程更复杂,因为信标帧可能无法到达网络内的所有节点(即,在单跳中)。因此,ESP-MESH 网络依靠节点转发 CSA 元素,以便它在整个网络中传播。
当具有一个或多个子节点的中间父节点接收到包含 CSA 的信标帧时,该节点将通过将该元素包括在其下一个发送的信标帧中(即,具有相同的新信道号和信道切换计数)来转发 CSA 元素。鉴于 ESP-MESH 网络内的所有节点都接收相同的 CSA,节点可以使用信道切换计数来同步其信道切换,尽管由于 CSA 元素转发而导致短的延迟。
ESP-MESH 网络信道切换可以由路由器或根节点触发。
只有当 ESP-MESH 网络未连接到路由器时,才会发生根节点触发的信道切换。通过调用 esp_mesh_switch_channel()
,根节点将设置初始信道切换计数值并开始在其信标帧中包含 CSA 元素。然后,每个 CSA 元素由第二层节点接收,并在它们自己的信标帧中向下游转发。
当 ESP-MESH 网络连接到路由器时,整个网络必须使用与路由器相同的信道。因此,当根节点连接到路由器时,将不允许根节点触发通道切换。
当根节点从路由器接收包含 CSA 元素的信标帧时,根节点将 CSA 元素中的信道切换计数值设置为自定义值,然后通过信标帧向下游转发。它还将相对于自定义值递减后续 CSA 元素的通道切换计数。此自定义值可以基于诸如网络层数,当前节点数等因素。
将信道切换计数值设置为自定义值是由于 ESP-MESH 网络及其路由器可能具有不同且变化的信标间隔。因此,路由器提供的信道切换计数值与 ESP-MESH 网络无关。通过使用自定义值,ESP-MESH 网络中的节点能够相对于 ESP-MESH 网络的信标间隔同步切换信道。但是,这也会导致 ESP-MESH 网络的信道切换与路由器及其连接站的信道切换不同步。
尽管 ESP-MESH 网络信道切换旨在将网络内的所有节点移动到新的操作信道,但应该认识到信道切换可能不能成功地移动所有节点(例如,由于诸如节点故障的原因)。
ESP-MESH 允许通过配置启用/禁用自主通道切换。同样,也可以通过配置启用/禁用自主路由器切换(即,当根节点自主连接到另一个路由器时)。自主信道切换和路由器切换取决于以下配置参数和运行时条件。
允许通道切换: 此参数通过 mesh_cfg_t
结构的 allow_channel_switch
字段设置,并允许 ESP-MESH 网络在设置时动态切换通道。
预设信道: 通过将 mesh_cfg_t
结构的信道字段设置为所需的信道号,ESP-MESH 网络可以拥有预设信道。如果未设置此字段,则会覆盖 allow_channel_switch
参数,以便始终允许通道切换。
允许路由器切换: 此参数通过 mesh_router_t
的 allow_router_switch
字段设置,并允许 ESP-MESH 在设置时动态切换到其他路由器。
预设路由器BSSID: ESP-MESH 网络可以通过将 mesh_router_t
结构的 bssid
字段设置为所需路由器的 BSSID 来具有预设路由器。如果未设置此字段,则会覆盖 allow_router_switch
参数,以便始终允许路由器切换。
根节点存在: 根节点的存在还会影响是允许还是允许通道或路由器切换。
下表说明了参数/条件的不同组合如何影响是否允许信道切换和/或路由器切换。请注意,X 表示参数的“不关心”。
可以基于多个指标评估 ESP-MESH 网络的性能,例如:
网络构建时间: 从头开始构建 ESP-MESH 网络所需的时间。
恢复时间: 网络检测节点故障所需的时间,并执行适当的操作来修复网络(例如生成新的根节点或形成新的连接)。
每跳延迟: 通过一个无线跳数据传输的延迟。换句话说,将数据包从父节点传输到子节点所花费的时间,反之亦然。
网络节点容量: ESP-MESH 网络可以同时支持的节点总数。此数字由节点可接受的最大下游连接数和网络中允许的最大层数确定。
下表列出了 ESP-MESH 网络的常见性能数据。但是,用户应注意,基于网络配置和操作环境的安装之间的性能数字可能会有很大差异。
使用以下测试条件产生上述性能数据。
- 测试设备数量:100
- 要接受的最大下游连接数:6
- 最大允许层数:6
吞吐量取决于数据包错误率和跳数。
根节点访问外部IP网络的吞吐量直接受 ESP-MESH 网络中节点数量和路由器带宽的影响。
原文链接