随着IoT的兴起,愈来愈多的嵌入式设备内置了Wi-Fi模块,具有了网络接入能力。
在开发过程当中,不免会遇到各类各样的网络问题,而抓包无疑是分析网络问题最直接、最有效的手段。由于经过抓包能够明确问题是处于发送端仍是接收端,迅速缩小排查范围。
然而,许多嵌入式设备上运行的可能不是Linux系统,而是一些实时操做系统(RTOS),甚至根本就没有操做系统。而和设备通讯的对端也不必定能运行tcpdump或者wireshark等抓包工具。这使得常见的点对点抓包手段失效。算法
咱们知道,无线网络信号在传播过程当中是以发射点为中心,像波纹同样往外辐射。因此理论上来说,若是一个接收器处于无线信号通过的地方,它能够收到(“听到”)任何通过它的信号,只是它可能“听不懂”(没法解析报文内容)。
如下图为例,IPAD若是和最左侧的台式机通讯,MacBook彻底有能力监听他们的通讯。bash
空口抓包就是基于这个原理工做的。若是咱们想要抓某个嵌入式设备的无线报文,只需在它附近运行一个具备监听功能的PC。网络
在Windows上可使用Omnipeek,可是该软件须要特殊无线网卡支持,还须要特殊的驱动。具体安装方法、操做步骤能够参考Omnipeek官网介绍。tcp
在Linux上能够用aircrack。下面简单介绍Ubuntu16.04上的操做方法:函数
确认网卡是否支持monitor模式,输入iw list
命令,若是输出中有monitor说明支持。不然没法进行空口抓包工具
software interface modes (can always be added):
* AP/VLAN
* monitor
复制代码
安装aircrack工具集(aircrack包含一系列工具)测试
sudo apt-get install aircrack-ng
复制代码
环境清理,主要是中止一些影响抓包的服务ui
sudo airmon-ng check kill
复制代码
创建虚拟监听网卡spa
sudo airmon-ng start wlp2s0 4
复制代码
上面命令中的wlp2s0为无线网卡名称,4为信道号。
上面的命令执行后,将生成一个虚拟网卡wlp2s0mon,该网卡处于monitor模式,而且监听信道4。
若是上面的命令不加通道号,则监听全部信道。(airodump-ng工具会以必定的频率扫描信道)。操作系统
经过airodump-ng抓包
sudo airodump-ng -c 4 wlp2s0mon –w huo.pcap
复制代码
上面命令指明只监听4信道,若是不加-c参数,airodump-ng默认以必定的周期扫描全部信道,这样会出现漏抓报文的状况。因此建议指定信道抓包。
-w参数能够将抓包文件写入文件,该文件能够用wireshark或者Omnipeek打开分析,建议使用Omnipeek软件,由于该软件分析无线报文功能更强大。
可是airodump-ng不会把信号强度、信道号、速率等信息写入抓包文件中,在部分场景下会影响问题定位。可使用tcpdump解决该问题。只须要将步骤5中的命令换成下面的命令便可(tcpdump命令的其余选项仍然适用):
sudo tcpdump -i wlp2s0mon –w huo.pcap
复制代码
在项目中发现设备和不一样品牌手机对接时,用iperf测试吞吐量差别较大。
好比:OPPO R11的iperf吞吐量在13Mbps左右,而Xiaomi 5X的吞吐量在25Mbps左右。
以下图所示,设备和Xiaomi 5X交互时,TCP数据包载荷都是1460字节:
而设备和OPPO R11交互时,则是一个1420字节的大包和一个40字节的小包交替出现。
从上面报文中的TCP握手阶段能够看出,OPPO R11(192.168.42.2)的MSS是1420。这个字段是最大报文段的意思,若是数据长度超过该字段,须要拆包发送。
这个值通常取自MTU, adb 进入OPPO手机执行ifconfig发现该值是1460,减去20字节的IP头部,再减去20字节的TCP头部,有效数据长度就只有1420了(也就是MSS)。
再看下Xiaomi 5X的MTU, 发现是1500,因此MSS为1460。
再反查设备端的iperf代码,发现每次调用send函数固定发送1460字节。这样就形成了:同一个数据包,和Xiaomi 5X交互的时候一次就发送完了,和OPPO R11交互的时候,被设备端拆成了1420和40两个包分开发送。
这就解释通了,为何Xiaomi 5X的吞吐量将近是OPPO R11的两倍。
注:正常状况下,若是没有开启TCP_NODELAY选项,Nagle算法会在必定程度上将小包聚合成大包的。可是该设备使用的协议栈并没有此功能。
在Wi-Fi稳定性测试过程当中,发现速率每过十分钟左右就会降低到5Mbps左右,3s左右才能恢复。
用Omnipeek打开抓包文件,在流量图中找到一个速率降低的区间:
分析波谷附近报文,发现PC的网卡进入了省电模式。
禁用PC网卡省电模式后再测试,Wi-Fi速率一直比较平稳。
更多内容,请移步blog.coderhuo.tech。