无线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的状态机:
无线mesh-LMLPHP
wpa_supplicant可以选择加密模式,几种常见的wifi加密都支持,也可以open ,里面需要注意的几个点:
(1)它默认是主动扫描的,即触发底层发送probe request帧 (probe帧它个处理是和beacon在一起的)
(2)它根据底层的扫描结果进行连接,默认扫描到的可以连接的ssid进行了简单的rssi排序,
一般一直连接不上是因为没有扫描结果。需要和底层的其他扫描动作做好互斥,比如被动扫描等
(3) root侧不用wpa_supplicant,只有sta侧才会用到。
(4)日志它里面已经自带了非常详细,需要打开编译开关,在启动脚本里可以添加选项 -dd 也可以加时间戳 -t  如把日志输入到一个文件里:

点击(此处)折叠或打开

  1. 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侧连接状态:

点击(此处)折叠或打开

  1. #wpa_cli -p /var/run/wpa_supplicant-athsta1 status
  2. Selected interface 'athsta1'
  3. bssid=34:e7:0b:03:c5:e9
  4. freq=5180
  5. ssid=meshaaa
  6. id=0
  7. mode=station
  8. pairwise_cipher=CCMP
  9. group_cipher=TKIP
  10. key_mgmt=WPA2-PSK
  11. wpa_state=COMPLETED
  12. address=34:e7:0b:03:c5:7a
  13. uuid=ecb672f6-30cf-5f31-8d53-25d274317f39
既然知道了应用层的状态机,我们就看看具体的底层交互报文帧是如何工作的
无线mesh-LMLPHP
这里面没有 太多的特别之处,其实和普通的client连接ssid过程几乎一样。
如果出现问题比如连接出现了问题,一方面我们可以打开底层日志,另外一方面我们可以通过无线抓包网卡进行抓包对报文进行分析,后续我们再详细说。
     对于无线驱动层的代码还是非常复杂的,并且一些代码不是开源的我们只能看过fw的日志,或者一些配置接口,我们就针对mesh下的连接过程中对应的HSM状态机画了个图
无线mesh-LMLPHP
它是基于事件触发的机制,比较易懂。 图里没有进行详细注释,可以自行看代码吧 
其实通过上面的几个图的分析,应该对这种mesh的实现机制有了一个清晰的认识,排查问题以及优化会有很好的帮助和方向。 
    我们可以看看实际的组网模型是什么样的
无线mesh-LMLPHP
当然要注意环路,以及5G连接和2.4G连接共存的问题,在无线驱动里有宏DBDC_REPEATER_SUPPORT里有针对多radio的处理。感兴趣的可以看看. 
以及在建立mesh的时候,有线口的处理(默认作为下行口而不能作为上行口),可以开启stp来检测处理环路问题。
  当然针对mesh的组网在这种实现方式下还是需要有规格限制的,比如每一个节点可以连接多少RE需要做限制,以及最多可以连接多少跳也需要限制,毕竟经过的跳数越多相对的网络性能会下降很多, 比如设置maxsta 或者maccmd中的白名单什么的,有很多种方法。
  这里面还涉及很多没有解决的问题:
(1)性能问题
(2)最佳链路选择的问题
(3) 漫游的问题
(4) 数据上报拓扑图的问题
 无线是个很复杂的东西,就拿mesh作为一个学习总结的一小步吧

12-23 10:21