无线mesh网络,由mesh routers(路由器)和mesh clients(客户端)组成,其中mesh routers构成骨干网络,并和有线的internet网相连接,负责为mesh clients提供多跳的无线internet连接。
无线Mesh网络(无线网状网络)也称为“多跳(multi-hop)”网络,它是一种与传统无线网络完全不同的新型无线网络技术.
现在mesh网络的应用也很广泛,解决了部分有线不容易覆盖的点,下面就在实际工作中涉及到mesh进行简单的梳理。 产品中mesh网络基于高通的驱动利用wds的机制进行开发。
mesh代码涉及几个模块: wpa_supplicant、hostapd、无线驱动以及wds机制。
先看一下wpa_supplicant的状态机:
wpa_supplicant可以选择加密模式,几种常见的wifi加密都支持,也可以open ,里面需要注意的几个点:
(1)它默认是主动扫描的,即触发底层发送probe request帧 (probe帧它个处理是和beacon在一起的)
(2)它根据底层的扫描结果进行连接,默认扫描到的可以连接的ssid进行了简单的rssi排序,
一般一直连接不上是因为没有扫描结果。需要和底层的其他扫描动作做好互斥,比如被动扫描等
(3) root侧不用wpa_supplicant,只有sta侧才会用到。
(4)日志它里面已经自带了非常详细,需要打开编译开关,在启动脚本里可以添加选项 -dd 也可以加时间戳 -t 如把日志输入到一个文件里:
-
wpa_supplicant -t -dd -g /var/run/wpa_supplicantglobal -B -P /var/run/wpa_supplicant-global.pid -f/tmp/wpa.log
(5)wpa_cli交互命令可以动态的查看状态,以及配置信息都比较易懂 ,比如查看当前sta侧连接状态:
-
#wpa_cli -p /var/run/wpa_supplicant-athsta1 status
-
Selected interface 'athsta1'
-
bssid=34:e7:0b:03:c5:e9
-
freq=5180
-
ssid=meshaaa
-
id=0
-
mode=station
-
pairwise_cipher=CCMP
-
group_cipher=TKIP
-
key_mgmt=WPA2-PSK
-
wpa_state=COMPLETED
-
address=34:e7:0b:03:c5:7a
-
uuid=ecb672f6-30cf-5f31-8d53-25d274317f39
既然知道了应用层的状态机,我们就看看具体的底层交互报文帧是如何工作的
这里面没有 太多的特别之处,其实和普通的client连接ssid过程几乎一样。
如果出现问题比如连接出现了问题,一方面我们可以打开底层日志,另外一方面我们可以通过无线抓包网卡进行抓包对报文进行分析,后续我们再详细说。
对于无线驱动层的代码还是非常复杂的,并且一些代码不是开源的我们只能看过fw的日志,或者一些配置接口,我们就针对mesh下的连接过程中对应的HSM状态机画了个图
它是基于事件触发的机制,比较易懂。 图里没有进行详细注释,可以自行看代码吧
其实通过上面的几个图的分析,应该对这种mesh的实现机制有了一个清晰的认识,排查问题以及优化会有很好的帮助和方向。
我们可以看看实际的组网模型是什么样的
当然要注意环路,以及5G连接和2.4G连接共存的问题,在无线驱动里有宏DBDC_REPEATER_SUPPORT里有针对多radio的处理。感兴趣的可以看看.
以及在建立mesh的时候,有线口的处理(默认作为下行口而不能作为上行口),可以开启stp来检测处理环路问题。
当然针对mesh的组网在这种实现方式下还是需要有规格限制的,比如每一个节点可以连接多少RE需要做限制,以及最多可以连接多少跳也需要限制,毕竟经过的跳数越多相对的网络性能会下降很多, 比如设置maxsta 或者maccmd中的白名单什么的,有很多种方法。
这里面还涉及很多没有解决的问题:
(1)性能问题
(2)最佳链路选择的问题
(3) 漫游的问题
(4) 数据上报拓扑图的问题
无线是个很复杂的东西,就拿mesh作为一个学习总结的一小步吧
阅读(14759) | 评论(1) | 转发(0) |