Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1206759
  • 博文数量: 56
  • 博客积分: 400
  • 博客等级: 一等列兵
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-30 13:08
个人简介

一个人的差异在于业余时间

文章分类

全部博文(56)

文章存档

2023年(1)

2019年(1)

2018年(1)

2017年(1)

2016年(2)

2015年(20)

2014年(10)

2013年(7)

2012年(12)

2011年(1)

分类: LINUX

2018-08-10 13:41:38

    无线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  如把日志输入到一个文件里:

点击(此处)折叠或打开

  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
既然知道了应用层的状态机,我们就看看具体的底层交互报文帧是如何工作的

这里面没有 太多的特别之处,其实和普通的client连接ssid过程几乎一样。
如果出现问题比如连接出现了问题,一方面我们可以打开底层日志,另外一方面我们可以通过无线抓包网卡进行抓包对报文进行分析,后续我们再详细说。
     对于无线驱动层的代码还是非常复杂的,并且一些代码不是开源的我们只能看过fw的日志,或者一些配置接口,我们就针对mesh下的连接过程中对应的HSM状态机画了个图

它是基于事件触发的机制,比较易懂。 图里没有进行详细注释,可以自行看代码吧 
其实通过上面的几个图的分析,应该对这种mesh的实现机制有了一个清晰的认识,排查问题以及优化会有很好的帮助和方向。 
    我们可以看看实际的组网模型是什么样的

当然要注意环路,以及5G连接和2.4G连接共存的问题,在无线驱动里有宏DBDC_REPEATER_SUPPORT里有针对多radio的处理。感兴趣的可以看看. 
以及在建立mesh的时候,有线口的处理(默认作为下行口而不能作为上行口),可以开启stp来检测处理环路问题。
  当然针对mesh的组网在这种实现方式下还是需要有规格限制的,比如每一个节点可以连接多少RE需要做限制,以及最多可以连接多少跳也需要限制,毕竟经过的跳数越多相对的网络性能会下降很多, 比如设置maxsta 或者maccmd中的白名单什么的,有很多种方法。
  这里面还涉及很多没有解决的问题:
(1)性能问题
(2)最佳链路选择的问题
(3) 漫游的问题
(4) 数据上报拓扑图的问题
 无线是个很复杂的东西,就拿mesh作为一个学习总结的一小步吧

阅读(14743) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

linuxDOS2018-10-25 10:43:44