Wi-Fi架构(五)- Android V wlan连接过程梳理

原文关注公众号 - 无线技术栈,及时查看网络/Wi-Fi更多知识

“本文图片没有一一列出,感兴趣可以关注公众号 - 无线技术栈”
在这里插入图片描述借一个粉丝的留言,零零散散的写了这么多文章,其中不乏高质量制作,但是小编有没有一篇文章可以把整个wifi架构讲清楚,所以这里准备整理一系列文章,梳理下整个wifi架构以及软件的实现~

文章目录
往期精彩
Android Wi-Fi整体架构以及80211协议架构
Wi-Fi连接关键流程代码梳理(Android V)
Wi-Fi连接到可以上网需要经历的过程
Wi-Fi连接过程抓包详解

往期精彩
零零散散分门别类开展了好几个主题,目前基本处于并发整理的阶段中,希望给深耕无线技术的兄弟姐妹贡献一点自己的力量~
目前关于Wi-Fi架构的文章如下:
Wi-Fi架构(四)-- 网络工厂1
Wi-Fi架构(三)-- Wifi大管家ClientModeImpl
Wi-Fi架构(二)-- Wi-Fi打开问题实战2.2
Wi-Fi架构(二)-- Wi-Fi打开流程2.1
Wi-Fi架构(一)

目前关于Wi-Fi网络的文章如下:
TCP/IP(八)- 全网介绍TCP/IP最细的文章
TCP/IP(七)- 在数据链路层迷路的TCP包&工厂AP搭建建议
TCP/IP(六)- 全网介绍TCP/IP最全的文章
TCP/IP(五)- 我确定可以说清楚IP
TCP/IP(四)- 你确定可以说清楚IP

目前关于Wi-Fi新技术的文章如下:
吞吐系列(二)- Wi-Fi高性能背后的技术原理
吞吐系列(一)- Wi-Fi7吞吐性能拆解
Wi-Fi技术简介(八)-- Wi-Fi7技术解析
Wi-Fi7 MLO(Multi-Link Operation)

目前关于安全的文章如下:
十分钟学会wireshark对wifi加密数据的解密
802.11 - Wi-Fi连接发生mic failure怎么办
Wi-Fi四种安全协议 - WEP、WPA、WPA2、WPA3,看完秒懂

目前关于网络编程的文章如下:
TCP/IP(九)- Socket编程实战

目前关于Wi-Fi通识的文章如下:
Wi-Fi技术简介(七)-- 理解基本概念与专业术语
Wi-Fi技术简介(六)-- 理解基本概念与专业术语
Wi-Fi技术简介(六)-- 网络是如何工作的

目前关于Android的文章如下:
Android Tombstone分析定位(二)
一次wlan固件crash的debug经历
Android架构(一)- Binder系列

目前关于802.11系列的文章如下:
Wi-Fi技术简介(九)-- WIFI6高性能之OFDMA
11AX省电 - TWT技术
Wi-Fi技术简介(五)-- DCF

以及还有一些不知道关于什么的文章:
HarmonyOS应用开发者高级认证证书获取
父亲节快乐, 到今天才读懂朱自清父亲的背影

Android Wi-Fi架构以及80211协议架构
先画一张图,整体看一下wifi的整体架构:
在这里插入图片描述

Android Wi-Fi整个框架如上图,后续对于软件侧的一些设计基本也是围绕这个框架展开,这一节以连接为例,来看看wifi连接的软件设计;

Wi-Fi连接关键流程代码梳理
L2层连接:
希望通过下图流程让我们对连接以及不同的进程对于连接过程主要需要完成什么?
Frameworks:这里主要是对连接事件的处理、权限的校验、连接状态的监听、发起DHCP、发起DNS,并且将AP的配置信息发送到wpa_supplicant;
wpa_supplicant:主要复制发起802.11过程,包括扫描、认证、关联以及四次握手的处理,也包括key相关处理,负责上报连接状态;
nl80211:实现了一些空口相关的钩子函数,将用户态的认证、关联、四次握手请求传递给driver;
driver&firmware:负责将802.11空口发送到空中,并且进行功率控制、Qos等处理;
RF:负责将802.11数字信号转化为电信号,这里涉及到一些射频的知识;
如下流程没有详细的绘制每一个连接的细节,主要提供一个大致的框架,知道怎么连接下去,状态怎么上来,对于各种状态做了什么处理可以根据实际问题实际深入读代码;

关于四次握手阶段的过程,绘图如下:
在这里插入图片描述

Wi-Fi连接到可以上网需要经历的过程

图片
Wi-Fi连接需要经历802.11连接 - IP配置 - DNS校验这么几个过程;

Wi-Fi连接过程抓包详解
如上节说,wlan连接到上网需要经历L2 - L3层的配置;
(1)802.11,这个阶段主要是空口连接,包括双端能力获取、qos、加密解密密钥派生等关键流程,包括(主动/被动)扫描、认证、关联、四次握手(如果是open就不需要四次握手,这个阶段主要是密钥处理)

图片

(2)DHCP阶段,这个阶段主要是L2层协议,主要目的是为客户端分配IP地址;这里的细节,参考TCP/IP精讲
看一下DHCP报文流程:

图片

看一下DHCP报文抓包:

抓包命令:
tcpdump -i wlan0 -w /data/data.cap

//L2层抓包流程

图片
//L3层抓包如果是加密连接,还需要解密之后才能看到

看一下DHCP的报文类型:
Discover(0x1): DHCP客户端在请求IP时,并不知道服务器是谁,因此需要先发送DHCP广播报文,会包含自己的MAC地址,DHCP收到此报文之后如果检查到路由缓存表里有这个MAC地址,将会回复DHCP offer;

图片
DHCP offer(0x2):DHCP服务器如果收到了自己的客户端发送的DHCP Discover报文,将会回复一个offer,主要包含IP地址以及租约时间;

图片

DHCP Request(0x3):DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。

图片

DHCP ack(0x5):DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。

图片

NAK(0X7):如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。

Decline(0x4):DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。

Inform(0x8):DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。

(3)DNS流程,DNS阶段主要是为STA设置DNS server地址、对STA网络通路进行校验并且把这些配置通过netd写入到kernel里边;DNS流程抓包如下,Android原生的网址使用的是一个谷歌中国的网址,但是由于这个网址不太稳定,我们通常会添加并行的网址,只要一个通过就认为DNS校验pass;

图片

如果读到这里,你觉得有所收获,就关注下小编的公众号,未来一起进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值