802.11总共提供9种服务:
1. 分布式(distribution) 接入点收到帧,就会使用分布式服务将真传送至目的地。
2. 整合(integration) 该服务由分布式系统提供,它让分布式系统得以链接至非IEEE802.11网络
3. 关联(association) 移动式工作站向接入点登记,分布式系统即可根据登记信息判断哪个移动式工作站该使用哪个接入点。只有关联之后才能进行身份验证。在身份验证完成之前,接入点会丢弃来自工作站的所有数据。
4. 重新关联(association) 当移动式工作站在同一个扩展服务区域里的基本服务区域之间移动时,它必须随时评估信号的强度并在必要时切换所关联的接入点。重新关联是由移动式工作站所开启,当信号强度现实最好切换关联对象时便会重新关联。
5. 取消关联(disassociation) 结束现有关联。
6. 身份验证(authentication) 认证是 STA 在扫描到合适的AP 之后,只有通过认证该STA 才能通过AP 使用WLAN
现有的认证方式有:(1)open,即不需要认证,只要交互一个null 帧 (2)shared key,需要一个4 次握手的过程 (3)802.11i,需要到认证服务器认证
当STA 完成认证之后只需要发送ReAssociation Request 帧,然后等待ReAssociationResponse 帧完成关联也就完成了整个切换的过程
解除身份验证 机密性 Wep等一些加密机制
7. MSDU传递(MAC Service Data Unit) 负责将数据传送给实际的接收端。
8. 传输功率控制(Transmit Power Control 简称TPC) 欧洲标准要求操作与5G Hz频带的工作站必须能够控制颠簸的传输功率,避免干扰其他同样使用5G Hz频带的用户。
9. 动态频率选择(Dynamic Frequency Selection 简称DFS) 无线局域网必须能够检测到雷达系统并选择未被雷达系统所使用的频
基本服务集(basic service set ,简称BBS)由一组相互通信的工作站构成。
BSS分为两种:
独立型网络independent BSS:通常由少数几个工作站为了特定目的而组成的暂时性网络。
基础结构型网络Infrastructure networks:有接入点。接入点负责基础结构型网络的所有通信。
扩展服务区域extended service set(ESS)
将几个BSS串联称为extended service set。所有位于同一个ESS的接入点使用相同的服务组标示符(service identifier ,简称SSID)
数据链路层的两个子层
逻辑链路控制 LLC (Logical Link Control)
子层 媒体接入控制 MAC (Medium Access Control)子层
网卡及其功能
802.11帧主要有三种类型:数据帧、控制帧、管理
帧
数据帧:
帧格式:
Protocol:代表MAC协议版本
Type与Subtype:制定使用帧类型(控制帧、数据帧、管理帧)
Address1:帧接收端 Address2:发送端的地址
Address3:供接入点与分布式系统过滤之用
Duration:媒介使用权,RTS传送段计算RTS帧结束后还需要多长时间用于帧交换。
对应第二行
Address1 : RA/BSSID Address2 : SA/TA
对应第三行
Address1 : RA/DA Address2 : TA/BSSID
控制帧:
通常与数据帧搭配使用,负责区域的清空、信道的取得、载波监听的维护,并于收到数据时予以肯定确认,借此提高工作站之间数据传送的可靠性。
因为无线收发器通常只有半双工工作模式,即无法同时首发数据,为防止冲突,802.11允许工作站使用request to send(RTS)和clear to send(CTS)信号来清空传送区域
节点1有个帧待传,首先发送RTS帧,预约无线链路的使用权、要求接收到这一帧的其他工作站保持沉默。
接收到RTS帧,接收端会以CTS帧应答,RTS会令附近的工作站保持沉默。
RTS/CTS完成交换后,可发送frame。
媒介访问权只留给单播帧使用,组播和广播帧只是简单的传送。 这种机制一般只用在高用量的环境下以及传输竞争比较激烈的场合,对低用量环境而言,暂不需要
Duration:媒介使用权,RTS传送段计算RTS帧结束后还需要多长时间用于帧交换。
Address1:大型帧的工作站地址
Address2:RTS的发送端
Address1:接收端的字段,拷贝于RTS的发送端地址。
除了这3种控制帧,还有PS-POLL帧(省电轮询)
管理帧
负责监督,用来加入或退出无线网络以及处理接入点之间关联的转移事宜。
为了限制广播或组播管理帧所造成的副作用,收到管理帧后,必须加以查验。只有广播或者组播帧来自工作站当前所关联的BSSID时,它们才会被送至MAC管理层。唯一例外是beacon帧。
帧主体分两种:固定字段、信息元素。
固定字段(Fixed-Length Management Frame Components):数据使用长度固定的字段。一共有10种。
1.
madwifi的结构,主要是有三层,hal是硬件层,然后是ath层,在之上的是802.11层,整个madwifi源码中重要的就是hal文件夹(硬件),ath文件夹,ath_rate文件夹 ,net80211文件夹(802.11协议相关),tools文件夹(一些工具)
当驱动被加载的时候,它会取探测物理设备是否存在,然后通过ath_attach()函数安装此设备。同时,驱动会自动创建一个虚拟的网络接口,通过函数ieee80211_create_vap( )实现。这个虚拟网络接口的初始状态为INIT,在此状态下硬件不会接收数据包。
当实际的AP接口开始工作(例如通过ifconfig ath0 up命令激活),驱动会将对硬件进行适当的设置并且进入SCAN状态。
在SCAN状态下,AP会扫描所有它支持的通道。
扫描包括两个方面,一个是主动扫描,即AP会发送适当的请求报文;一个是被动扫描,即AP监听临近AP的beacons。
在SCAN状态下,AP不会传输数据报。 在所有的通道都扫描完成以后,AP选择一个无线信号强度最低的通道然后进入RUN状态(ap_end( ))。
在RUN状态下,AP执行一个存取节点的普通操作。它约每隔100ms向外广播一个beacon消息(ath_beacon_send( )),
应答其它AP发送的请求,应答终端发送来的认证消息和连接/重连接消息,并且传输数据包。
当接口被关闭的时候,AP会发送取消认证消息到每一个连接了的终端,然后释放所它们所占有的资源并进入INIT状态。
需要注意控制消息的使用,如:RTS、CTS和ACK,它们是被驱动HAL(硬件抽象层)控制的。
结构体 ieee80211com中定义了各种帧处理函数指针
3. 数据接收
大多数的CSMA/CA机制被贯彻在HAL或者硬件中。当一个新的包到达时,开源的驱动部分是通过中断来获取通知的(ath_intr( ))。
包被linux的tasklet来处理(ath_rx_tasklet( )),这个包所在skb结构被找到并且 它的目标节点正确。
函数ieee80211_input( )接收各种不同类型的包,在这个函数中管理报文包被传递给
ieee80211_recv_mgmt( )函数处理,数据包被做相关的处理后变成以太帧格式然后传送给linux内核(netif_rx( ))或者,如果工作在桥模式下,则通过dev_queue_xmit( )发送此数据包
4. 数据的发送
Linux内核通过dev->hard_start_xmit轮流调用虚拟接口的ieee80211_hardstart()函数和物理接口的
ath_hardstart()函数实现包的传输。
ath_hardstart()函数将以太格式的包封装成802.11格式的包。
ath_tx_start()函数将需要加密的包进行加密处理,并将保存此包的skb映射到DMA缓冲,并根据包的优先级选定一个传输队列(QoS control)。ath_tx_txqaddbuf( )函数将映射后的缓冲(buffer)插入到选定的传输队列里面并通知HAL开始传输。
管理帧由802.11层产生。它们通过ieee80211_mgmt_output()函数发送。
Beacon消息由HAL触发。当发送beacon消息的时间到达,HAL会制造一个中断,然后调用函数
ath_beacon_send( )来发送。Beacon消息直接被传递到HAL并发送。
HAL成功发送完一个包后也会产生一个中断来通知驱动。
函数ath_tx_tasklet()会更新发送相关的信息。如果有工作在监视模式(monitor mode)的虚拟端口存在,
这个包会在函数ath_tx_capture()中被传递给监视接口。
5 madwifi加载到内核的顺序 :
insmod wlan.o
insmod ath_hal.o
insmod ath_rate_amrr.o
insmod ath_rate_onoe.o
insmod ath_rate_sample.o
insmod wlan_acl.o
insmod wlan_ccmp.o
insmod wlan_scan_ap.o
insmod wlan_scan_sta.o
insmod wlan_tkip.o i
nsmod wlan_wep.o i
nsmod wlan_xauth.o
insmod ath_pci.o