1 WiFi物理层
1.1 电磁波的波段命名
1)HF:0.003 to 0.03 GHz,High Frequency
2)VHF:0.03 to 0.3 GHz,Very High Frequency
3)UHF:0.3 to 1 GHz,Ultra High Frequency
4)L:1 to 2 GHz,Long wave
5)S:2 to 4 GHz,Short wave
6)C:4 to 8 GHz,S和X的折中,妥协(Compromise)
7)X:8 to 12 GHz,火控雷达,X代表准心(Crosshair)
8)Ku:12 to 18 GHz,Kurz-under,表示短以下
9)K:18 to 27 GHz,Kurz,德语表示短
10)Ka:27 to 40 GHz,Kurz-above,表示短以上
11)mm or G:110 to 300 GHz,Millimeter,毫米波(其实一般包含30 - 300 GHz)

1.2 物理层的组成
PLCP:Physical Layer Convergence Procedure,物理层汇聚子层
PMD:Physical Medium Dependent,物理媒介相关层;调制解调就是这一层

1.3 信号RSSI
WPS key: press key within 3 seconds.
路由器有效信号范围:-20dB ~-90dB
一个房间的话,在-40dB左右;隔一堵墙,就会在-50dB左右。
-20dB一般很少,要靠得很近才有。
the smaller abs(rssi), the better.

1.4 WiFi信号通道设置多少最合适
- 建议选择1,6,11或13这些互相不冲突的信道。
- 无线AP无线信号覆盖范围内有两个以上的AP时,需要为每个AP设定不同的频段,以免共用信道发生冲突。而很多用户使用的无线设备的默认设置都是Channel为1,当两个以上的这样的无线AP设备相“遇”时冲突就在所难免。
- 无论是IEEE802.11b还是IEEE802.11g标准其都只支持3个不重叠的传输信道信道,只有信道1、6、11或13是不冲突的,但使用信道3的设备会干扰1和6,使用信道9的设备会干扰6和13。

1.5 MRMC Concurrency
1)MRMC是multi-role multi-channel operation的缩写。
2)The WiLink8.0 supports the multi-channel operation as time division multiplexing (TDM)-based concurrency. Each role gets a portion of the air time. The core of the multi-role operation is the scheduler that decides on each given time what role should be activated, and protects the role that should be suspended before moving to a new role.
3)TI AP+SoftAP是单信道TDM并发。
4)Cypress WLAN+P2P采用不同的信道实现TDM并发。
5)Linux中每一个role叫做vif。

2 RT3070
2.1 基本概念
1)CAST 8051 and USB core come from Poland Evatronix SA(OTG 3.0 spec),Evatronix SA was acquired by Cadence in 2013。
2)MT7620中的WiFi模块和CAST CUSB2来自于RT3070,并且保持了同样的寄存器映射。
3)CUSB2中的PDMA(Packet DMA)硬件上支持Bulk Out WiFi报文聚合加速。
4)集成了8051单片机。

2.2 WCID
WCID全称为Wireless Client Index,范围从0到254,255表示无效的Client,WiFi AP使用这个值去索引存在于SRAM中的table,包括MAC Search Table和Pairwise Key Table(保存PTK)等。

2.3 SRAM Table
1)WiFi AP MAC Search Table
- RT3070有256个entry,每个entry占用8个字节,保存一个Client的MAC地址和2个字节的属性。
- 256个entry保存256个Wireless Client MAC地址。
- 256个entry保存128个Wireless Client MAC地址和128个WCIDn_TX_RATE(仅仅占用每个entry的2个字节,高6个字节未使用)。
2)WiFi AP Beacon Table
- Linux kernel中每创建一个带有AP功能的vif(Multi BSSID Mode),驱动就会在Beacon Table中增加一个entry。
- 包括Beacon在内的管理帧通过3个发送队列之一的TX0Q发送。

2.4 2个MAC地址
1) STA的MAC地址(MAC_ADDR)
2) AP的MAC地址(MAC_BSSID)

2.5 RT3070 4-way handshake
ap/ap_auth.c
ap/ap_assoc.c
ap/ap_wpa.c
1)AP和STA计算各自的PTK(Pairwise Transient Key),GTK(Group Temporal Key)由AP计算,并发送给STA。
2)AP和STA双方使用PTK对单播进行加密,使用GTK对组播进行加密。
3)PTK保存在Pairwise Key Table(offset 0x4000)中,GTK保存在Shared Key Table(offset 0x6C00)中。

3 其它WiFi芯片
3.1 MT6630
wmt_loader:使用文件节点/dev/wmtdetect,加载SDIO测试驱动探测chipid,成功后卸载探测驱动,然后加载标准的SDIO功能驱动
wmt_launcher:使用文件节点/dev/stpwmt,给SDIO接口MT6630上电和加载firmware;MT6630的所有功能都使用SDIO接口,UART口用来外接4G模块
shell命令:svc wifi enable

3.2 ESP8266 smartconfig
0) DA/SA/BSSID/Seq Ctl/Frame Body. MTK, Marvell, Realtek use 6-byte DA to transfer SSID and password, ESP8266 uses 2-byte Length field of 8-byte UDP header.
1)智能硬件的WiFi模块通电,进入混杂模式(sniff mode),开始监听信号覆盖范围内的所有WiFi数据帧;
2)手机APP端发送包含AP SSID和密码的UDP广播包或者组播包;
3)智能硬件的WiFi芯片接收到该UDP包(利用WiFi 8-byte UDP报文头未加密的2-byte Length字段,因为其它字段都用GTK加密了),解密出AP SSID和密码;
4)智能硬件用收到的SSID和密码连接到指定的WiFi AP上。

3.3 openwifi
https://github.com/open-sdr/openwifi
https://zhuanlan.zhihu.com/openwifi

4 WiFi network namespace
一个物理网络设备最多存在在一个network namespace中。

net/core/net_namespace.c
网络命名空间定义了2个链表:pernet_list和net_namespace_list。
net/core/dev.c
alloc_netdev_mqs()
{
    [...]
    // point to the default net namespace
    dev_net_set(dev, &init_net);
    [...]
}

net/wireless/core.c
wiphy_new_nm()
{
    [...]
    wiphy_net_set(&rdev->wiphy, &init_net);
    [...]
}

cfg80211_pernet_exit()
{
}

# find the WLAN PHY name
iw phy
# move to ns1 namespace
iw phy phy0 set netns ns1
# back to root namespace, 1 means root namespace
# ip netns exec ns1 <command>
ip netns exec ns1 iw phy phy0 set netns 1

5 Android WiFi Framework
5.1 WiFi State和StateMachine
State.java - 状态,其它类继承该类,产生N多状态
StateMachine.java - 管理状态,其它类继承该类,生成State管理类

5.2 STA和AP共存
在/sys/class/net下必须有2个节点:诸如p2p0(或者wds0)和wlan0。

in /etc/wifi/wifi_concurrency_cfg.txt under WifiServiceImpl.java
WifiController.java - 决定使用SoftApStateMachine.java还是WifiStateMachine.java
SoftApStateMachine.java - AP和STA并发状态机,打开AP的代码就放在该类中;而打开STA的代码在WifiStateMachine.java中
WifiStateMachine.java - AP和STA不能并发状态机,打开AP和STA的代码都放在该类中,AP和STA只能二选一

5.3 Android 8.0 WiFi Tethering
TetheringConfiguration.java
config.xml: config_tether_dhcp_range
Tethering|wificond|hostapd|CommandListener|TetherController|NatController|dnsmasq

system/connectivity/wificond - LAN
TetherController.cpp - Bridge
NatController.cpp - WAN

ndc nat enable{disable} intiface extiface
ndc ipfwd add{remove} intiface extiface
ndc nat enable wlan0 eth0
dumpsys network_management
iptables-save -c

am start -n com.android.settings/.TetherSettings
service call <your_service_name> \
<1-based index number at which the function appears in your_service_name.aidl> \
<type of the argument like i32 or i64> <argument>

5.4 Android captive detection
in NetworkMonitor.java
1)查看所有配置
settings list global

2)使用https
settings put global captive_portal_use_https 1
settings put global captive_portal_https_url https://www.qualcomm.cn/generate_204

3)使用http
settings put global captive_portal_use_https 0
settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204

4)使用默认,即删除配置
settings delete global captive_portal_http_url
settings delete global captive_portal_https_url

5)禁用captive探测
settings put global captive_portal_mode 0

6 常用网络调试工具
- SocketTool(测试MCU和PC Socket通信非常方便)
- WireShark

7 Abbreviations
Android 8.0 wificond: Wi-Fi Connection Manager
BSS:Basic Service Set,AP或者IBSS或者STA
CentOS yum:[jʌm],Yellowdog Updater,Modified
config_tether_upstream_types:Android手机配置为ApCli(AP-Client)时,作为Client的一方
config_tether_usb_regexs:regular expressions,正则表达式
DBS:WiFi双频并发
genl:Generic Netlink
IBSS:Independent Basic Service Set,一般指ADHOC
MLME:Mac Layer Management Entity
MTK ATE: MediaTek Automatic Test Environment
netr28ux.inf:Ralink RT2870系列驱动
promiscuous: sniff mode
RTMP: Ralink Technology Miniport
RTS/CTS:Request To Send(STA发送给路由器),Clear To Send(由路由器发送给STA)
SMA:Sub Miniature version A
STA:STAtion
TAP/TUN:TUNnel
Ubuntu apt-get:Advanced Packaging Tool
vif:Virtual Interface
Wi-Fi 6E:Extended,支持 2.4GHz、5GHz和6GHz三频
WiFi AGO: Autonomous Group Owner, AGO means P2P, for CarPlay
wlp6s0: wl means Wireless LAN, pXsY means PCI BDF

Android WiFi开发总结相关推荐

  1. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

  2. android Wifi开发相关内容

    今天,简单讲讲android里如何使用WifiManager. 之前,我看代码时,看到了wifi相关的代码,发现自己对于这个内容的使用还很不熟悉,所以在网上查找资料,最终解决了问题.这里记录一下. 移 ...

  3. linux wifi开发书籍,Android WIFI开发介绍.pdf

    Android WIFI开发介绍: WifiStateTracker 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心.WifiSe ...

  4. Android WiFi开发

    概述 介绍Android WiFi的扫描.连接.信息.以及WiFi热点等等的实现,并用代码实现. 详细 代码下载:http://www.demodashi.com/demo/10660.html 一. ...

  5. Android WiFi开发 (二)分享Wifi热点

    Android WiFi开发 (二)Wifi热点 标签: wi-fiandroid热点安全 2016-03-07 13:08  11415人阅读  评论(29)  收藏  举报   分类: Andro ...

  6. Android WiFi开发教程(二)——WiFi的搜索和连接

    在上一篇中我们介绍了WiFi热点的创建和关闭,如果你还没阅读过,建议先阅读上一篇文章Android WiFi开发教程(一)--WiFi热点的创建与关闭. 本章节主要继续介绍WiFi的搜索和连接. Wi ...

  7. Android WiFi开发教程

    Android WiFi开发教程(一)--WiFi热点的创建与关闭 相对于BlueTooth,WiFi是当今使用最广的一种无线网络传输技术, 几乎所有智能手机.平板电脑和笔记本电脑都支持Wi-Fi上网 ...

  8. android获取wifi开关,Android WiFi开发(一)--WiFi开关与状态监听

    之前开发了一个WiFi,热点相关的应用.因为对这方面也不熟悉,刚开始找资料看书,但看明白实现时,发现随着android版本更新,相关api有较大改动,之前的代码不能用.经过一番探索,最后实现出来了,现 ...

  9. android wifi 广播吗,Android WIFI开发之广播监听

    在 WIFI 网络开发过程中,容易对网络变化的系统广播和不同广播对应的网络状态区分不清楚,所以对常用的系统网络广播Intent Action和网络状态含义做了整理,希望能够加强记忆并且帮助到大家理解何 ...

  10. Android wifi 开发

    Android Wifi相关操作 - 简书 Android进阶之路 - WiFi的全面使用_Modu_Liu的博客-CSDN博客 1. 获取当前networkid, 发起断开重连 WifiInfo c ...

最新文章

  1. android 打卡动画,android音视频打卡(-)3种方法绘制图片
  2. mysql5.7.13.zip安装(windows)
  3. Spring Cache 缺陷,我好像有解决方案了
  4. 使用 Docker 部署 Spring Boot 项目
  5. 如何配置java环境变量
  6. v-for和v-if同时使用(案例分析:循环最新的前14条数据显示) - 踩坑篇
  7. Java webservice 将晦涩难懂的参数名修改为容易理解的名称
  8. tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
  9. Linux\Unix线程的互斥锁和条件变量
  10. windowsf进程管理器中进程解释
  11. 论文笔记_S2D.39_2015-ICCV-条件随机场作为递归神经网络(CRF-RNN)
  12. 第10章 接口、继承与多态----对象类型的转换
  13. phalapi 数据库锁_PhalApi:[1.15] 数据库操作:基于NotORM的使用及优化-Go语言中文社区...
  14. 揭秘如何搭建梦幻西游社交框架
  15. macmini做文件服务器,macmini改造云服务器
  16. mac 下安装python+selenium+firebox+pycharm+geckodriver
  17. 零基础学习CANoe Panel(6)—— 开关/显示控件(Switch/Indicator)
  18. Java减肥计划(swith版)
  19. word 顽固的“信息检索”
  20. 树莓派什么都不装(包括python)测试摄像头的方法

热门文章

  1. ANSI字符集和Unicode字符集
  2. SSM实现会议室预约管理系统
  3. 网络工程师十个常见面试问题
  4. csdn下载分获取方法
  5. 万恶的火狐插件IE Tab Plus+引起的Superfish.com
  6. 基于模糊聚类的图像分割
  7. python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】
  8. 设计测试用例的常用方法
  9. 移动硬盘打开文件突然变得很卡
  10. 初学者入门——NOI题库1.3