WIFI:室内传播100米以内,室外可以达到几百米。如果要扩大传输范围,就需要一个分布式网络的支持。
WIFI:发送frame时,不同于有线,无法监测collision。
每个站点频宽使用链路也不保证公平。传出去,传播时间不保证。也不保证可靠性。
PCF:邀请的方式,重要的frame先送
DCF:开放,让大家一起抢频宽。
IEEE802.11设计时,基于很有线的区域,发射功率不会太大,发射范围也不会太大,透过空气做媒介进行传输。
IEEE802.11除了定义如何将frame传送出去之外,还定义了power management(因为无线网络也是一种可移动网络,移动设备的电源是一个很重要的因素,如没有使用是进入休眠状态,让设备尽量省电的情况下使用),security:通信的安全性。有线网络,想要窃听,必须插入cable,而无线,只要打开notebook,就可以收到空气中的很多无线信号,能否泄密,关键看接收信号的能否解读。加密解密也是基于计算,计算就要多耗电。
![](/qrcode.jpg)
一种基于跳频的技术,即传输时,把资料切割成不同的frequency(频道)进行传送,即使某一个频道发生collision,也可以将数据恢复。
另一种基于直接序列扩频的技术:用11-bit的clipping sequence,即使有一些信号干扰,也可以通过算法得以恢复。
IEEE802.11: 2Mbps,2.4G
IEEE802.11b: 11Mbps,2.4G
IEEE802.11a:OFDM,54Mbps,5G
IEEE802.11g:OFDM,54Mbps
IEEE802.11n:MIMO多天线技术,可以达到108Mbps
Hidden node:假设每一个Station传播的有效范围都是圆形,假设有4个node,每个node都可以听到相邻的左边与右边的node,如C可以听到B和D,
B:可以跟A/C通信,但A/C不可通信,因为A/C互相都在对方基地台涵盖的范围之外。这样:A/C就互为hidden node,A/C并不知道对方的存在,这样A/C同时送给B的信息会在B那里发生collision。
A送给B与C送给B的data同时到达B时,就会造成collision。 此时A发送时并不知道C也在送,同样C发送时,也不知道A也在发送。发生colission时,A/C并不知道。
Ethenert中的CSMA/CD机制,是有线网络,有能力侦测collision。而无线中,根本没有能力侦测collision,没有侦测collision的方法。这种情况下,仍然想成功的把frame丢出去。
B送给A时,C其实是知道的,因为B也在C的覆盖范围内。B和C同时发送,不一定会发生collision,取决于彼此的发送对象。比如B-->A,C-->D,就不会发生collision,这就是exposed node 问题:假设BC互相可以听到对方的信号,BC同时发送不一定会发生collision
做不到collision detection,设计一个方法,尽量避免collision。
在发送真正的封包之前,首先发送一个control frame,Request To Send(RTS),告诉在该站覆盖范围内的所有站点,我要发送了。所有收到RTS封包的站点,都会回传一个Clear to Send(CTS)frame,告诉发送站点,我已经清空channel,等待接收封包。RTC/CTS都是广播包,交换的封包里面交互的很重要的信息是,这个封包要发多久/收多久。 告诉周围的node,不要来闹,免得跟我的封包撞在一起。
CTS/RTS的覆盖范围不同。
上图:所有红色的node都不能send data给C,因为只有红色的node能够听到C发出的CTS,其它不再C覆盖区的node都可以发送。这5个红色node,还可以送给别人,就是不能送给C。
送一个RTS,一定要收到对方的一个CTS,
如果对端有正确的收到,一定要回一个ACK,如果没收到ACK,就假设该frame已经破坏,未成功收到。
Poll:基地台会不停的问有没有重要的data要送?有则优先发送。
Node会移动,移动过程中只能部分链接,为了保证node在移动过程中还能保持通信。
不可移动的部分与有线网络链接在一起:AP,基地台。
AP后端的基础设施,负责把多个AP链接在一起,称为DS
假设每个node必须与一个AP链接。
DS:将若干AP连接在一起,从而拓宽无线的传输范围。
如果node从一个cell移动到另一个cell,如何处理这些信息?
Association Request:如何选择不同的AP,选择信号最强的,还是免费的?
让node连接到AP的过程:scanning
移动过程中,可能慢慢的远离原来的AP,与原来的AP的信号越来越弱,跟新的AP信号越来越强。由node主动送出probe的信号scan AP信号强弱的过程称为Active scanning。当移动到新的AP2时,就会收到AP2的Probe Responses
C在移动过程中,会不断的发送Probe的信号。过程中可能会收到好几个AP的回应。可能会找更好的AP去连接。
Passive Scanning:发起搜寻probe的不是由node主动发起,而是由基地台AP发起
AP周期性的发出Beacon frame,广播自己的能力,包括与区域内所有node连接信号的强弱/传输速率的快慢。Node根据基地台发出beacon信息,来决定是否切换基地台。
对于C,本来与AP1连接,当向右移动过程中,接收到AP2发出的Beacon信息时,如果需要切换,就会发出一个Association Request给AP2,当收到AP2发出的Response信息时,C就会与AP2建立新的连接。
有4个Address,一般Ethernet Frame只有2个Address,SA/DA。
4个Address分别代表Source/Destination两个node的地址,以及与sorce/destination相连的AP的地址。
To DS:要送给AP
From DS:从AP来。
To DS/From DS均为1:代表两个AP之间通信
To DS/From DS均为0:代表两个node直接通信,没有AP介入。
每个Address,都是48bits
Data:to 2312 bytes
802.11 因为没法监测collision,采用的做法是在发送data之前先行发送RTS(request to send),duration字段会告诉发送多久。接收方返回CTS回馈给发送方。
TA:传送frame的AP
RA:接收frame的AP
DA:接收frame的node
SA:发送frame的node
当frame需要进入DS系统是,这4个地址才会用到。
to DS/from DS=0,0 表示node之间直接通信
to DS/from DS=0,1 从AP传给node
to DS/from DS=1,0 从node传给AP
第一步,由A到AP1的frame: 由A送给AP1,最后的目的地是E : Addr1/2/3/4 = AP1/ A/ E/ NA
第二步,由AP1到DS系统:由AP1送给AP3,最后的目的地是E,真正的起始的位置为A :Addr1/2/3/4 = AP3/ AP1/ E/A
第三步,由AP3送给最后的目的地是E,真正的起始的位置为A :Addr1/2/3/4 = E/AP3/ A/ NA
非竞争式的PCF,构建在竞争时的DCF之上。当服务期满,则自动进入竞争式的DCF模式。
Ad hoc:随意型的网络,没有AP。
Infrastructured:AP+DS(分布式系统)
point coordinator:通常是AP,手上通常会有一个清单,逐一轮询,看node要不要发送。等一轮问询结束之后,开始进入DCF模式。轮询一段时间,抢一段时间,再轮询一段时间,再抢一段年时间。。。。。
透过IFS,是控制传输方法的关键方法。 PIFS:时间间隔比较小。DIFS时间间隔比较大。
高优先权:取决于PIFS等待的时间比较短
同时,PCF有一张清单,知道向谁问询
contention-free burst:PCF
Contention period:DCF
DCF+PCF合起来的一个完整周期,称为super frame
super frame的长度是不固定的
super frame里面竞争与非竞争的长度也是不固定的。
PCF轮询一轮后,马上进入DCF。DCF结束之后,又进入PCF
DCF:如何让不同的node共享频宽
如果大家同时发送会有collision。当做carrier sense时,会有两种结果,idle/busy。如果是busy,则继续监听。当由busy变成idle时,一送一定collision,此时还要等待一个Inter Frame Gap,等这个Frame结束之后,这个Gap等待的时间是为了某些priority(RTS/CTS/PCF),如果是RTS/CTS,等待时间较短。如果是PCF,时间间隔中等,如果是normal data,则时间间隔最长。
发现idle,还要等待一个时间,让有优先权的data先发送。时间等到之后,还是不能发送,还需要等待一个random delay。时间到,如果是idle,就可以发送了。
802.11用immediate postive ACK frame:收到data,立即回送一个ACK。 任何一个frame发出去,一定要收到一个ACK,如果没有收到ACK,就认为发送失败,会启动重送机制。
Physical :真正的监听channel
virtual mechanisms:送frame之前,会发RTS/CTS,期间,本身不忙,但通道认为很忙。分别听到RTC/CTS期间,会有一段时间占用channel,在这个期间,被认为channel很忙。
802.11 2K的frame,比较长,如果发送,需要很久才能收到ACK,因此需要在发送之前,先通过RTS/CTS协商channel,预约好才发送。RTS threhold:如果frame/data太短,就不需要RTS/CTS。
两个node相互送封包时,有时会连续送好几个封包,连续送好几次,一个大封包送给对方有时会被切成好几个小片段,这样,RTC/CTS的duration如何填写?RTS/CTS一般都是填写一个封包传输所用的时间,Virtucal Carrier Sense会将RTC/CTS的时间记录到NAV中,几个参数,显示channel会busy多久,NAV不是一次的值,可能会收到多个时间,进行累加。
802.11可能会有collision,如何确认对方有正确的收到封包?我们用ACK frame, positive acknowledgment
ACK必须立刻回
Data:发data,一定要回ACK
Polling: PCF中询问每个node,是否要发送,被询问的node一定要回ACK
Request: 比如probe request,一定要回ACK
Response:
CTS:返回RTS,必须在SIFS时间之内。
非竞争性PIFS,等待时间中等,排第二优先级。
竞争型的DIFS:等待时间最长,排第三优先级。
SIFS:排第一优先级
即使等到IFS的time,还需要random backoff,不可以马上发送。
Slot time:在802.3中是51.2uS,通道最长的两端的来回时间。
STA:当发现空闲时,也不可以马上发送。因为这个idle可能是介于frame与ACK之间的时间点,一送,就有可能干扰到正常的传送。 至少要继续监听一段时间(大于DIFS的时间),通通都是free,才可以发送。
如果监测到busy,可能别人正在送,要等到它传送结束之后,再监听一个DIFS的时间,然后在加一个Random Backoff的时间之后,还是idle才能发送。当中间有发现别的frame正在发送,则失败。
Back-off window, 就是一个contention window
首先计算backoff time。算出来之后,就开始进入倒计时状态。当中间,channel一直idle,倒计时结束之后方可发送。
如果倒计时过程中,有别的frame在传送,通道变成busy,则倒计时freeze,马上暂停,直到传送完毕,free的时间大于DIFS时间时,才可继续开始倒数计时。当back-off时间倒数计时到零时,才可以发送。
送frame,返回ACK,frame与ACK中间有一个short时间,这个short时间还送busy,不能算idle。
e
在A发送封包过程中,B/C/D也要发送,发现是busy,则继续监听,直到A发送完毕,再加一个DIFS的时间,等到DIFS时间之后,然后再进行back-off。
B/C/D的back-off时间时间分别是19uS/10uS/15uS。然后,back-off倒计时结束之后,C首先开始发送,B/D倒计时暂停。
在C发送期间,有一个E要发送,一样侦测channel,发现busy,等到C发送完毕,加上一个DIFS之后,开始倒计时,此时E的back-off time为7 uS。
当C发送结束,在加一个DIFS时间之后,B/D再继续开始倒计时。只不过此时B/D倒计时的数值是从(19-10=9)/(15-10=5)uS开始倒计时,E新加进来的,以7uS开始倒计时。当倒计时5uS之后,D就开始发送,B/E倒计时暂停。
B/E继续监听,知道D传送结束,再加一个DIFS时间之后,B/E继续按照(9-5=4)/(7-5=2)uS开始倒计时,同样,等2uS后,E开始发送,B继续暂停。
知道E发送结束,再加一个DIFS时间之后,B才开始按照(19-10-5-2=2)uS开始倒计时,2uS之后,B开始发送。
预约时间计算:从送RTS/CTS结束,然后到送data,回一个ACK结束。 data与ACK之间,还有一个SIFS时间。
听到RTS/CTS,就会设置一个值NAV。
source等一个DIFS的时间,就准备开始传送。如果送的封包比较长,就需要先发一个RTS来探路。RTS本身会带一个duration(待会要保留预约的时间,从RTS结束到ACK结束的时间,图示从T1到T3中间的区间,也就是图示紫色的NAV(RTS)这一段时间)。
当RTS丢出去之后,其它的工作站就会听到,主动把channel busy 的时间设定为NAV(RTS);
目的地听到RTS之后,也会放一个CTS,这个时间段要比原来的RTS短一点,叫做SIFS。 CTS送出去之后,也会预约一个时间,从CTS结束到ACK结束这段时间。即图示紫色的NAV(CTS)这一个时间段。
听到RTS与听到CTS,它们的NAV的数值不同。其它node看到这个数值,就认为这个时间段channel是busy的。不会再发data出来捣乱。
CTS结束后,等待一个SIFS时间,就可以发送data,data发送完毕,再经过SIFS时间段,就把ACK发送出来。
等到data都送完之后,再加一个DIFS时间段之后,其它node开始根据back-off算法进入倒计时阶段,倒计时期间以及结束,若还空闲,在进行发送。
重送一次,random back-off time加倍一次,最高255.
DAta/ACK/RTC/CTS它们之间都是用SIFS,最短的时间通信。
原来的大封包,可能会被切成许多小的fragment,一旦有一个frameng抢到channel的传送权,就允许连续发送。每个fragment就要收到一个ACK,一旦有一个fragment没有收到ACK,就要重送。 可以多送,但不可以发送太长,为了公平性,一旦拿到传送全,一旦全部送完,有一个ACK未收到,或超过协议设定的上限值,则停止传送。
Fragment与ACK之间,SIFS,允许连续传送多个fragment的机制,就叫做Fragment Burst,把整个Fragment送完。用于大的封包切割成许多小的fragment,好不容易才抢到发送权的情形。当有一个fragment没有收到ACK,则要重送。重送结束,就要进入竞争等待的视窗内。
如果一次传送时有好几个fragmentation,
RTS/CTS只宣布下一个封包与ACK,如果是好几个fragment,我们不可能为每一个fragment都送一个RTS/CTS。
当有一连串的子片段发送时,就把后续的fragment与ACK当作一轮一轮的RTS/CTS,
最后一个Fragment和ACK的duration设置为0
只有第一个fragment开始传送之前,有RTS/CTS,之后,都是只有fragment与ACK,fragment/ACK之间的时间为SIFS。
NAV(Frag3)=0
对于其它站点,NAV不为零期间,均认为channel是busy的。
如果没有收到ACK,就无法更新NAV关于下一个fragment的预约时间,source就必须等到fragment 1的NAV降低到0时,开始重送。
如果能正常收到ACK1,则ACK1会携带下一个fragment对应的NAV时间。如果收不到,source必须等到上述时间点结束之后,其它节点才可以继续发送资料。
RTS/CTS:只有在MPDU很长, 大于RTS_Threshold,采用RTS/CTs,减少大frame的冲撞,提高效率。
频宽的保留预约:用于Audio/Vedio Service
SuperFrame:前一段免竞争,后面才进入竞争周期。是一个额外的功能。不一定每一个AP都有这样的功能
一个Super Frame的长度是变化的。每次免竞争的周期都不一定相同。
一个Super Frame分为两端,免竞争阶段,与竞争阶段。
免竞争阶段:AP根据清单中的host,逐个轮询是否要发送。
后面:大家通过CSMA来竞争通道的使用权。
PC:根据实际需求,控制免竞争区间的周期长短。
PIFS:封包与封包之间的间隔。
Point Coordinator得到medium的控制权,在superFrame的起始阶段,控制整个contention free的周期。这个周期通过控制PIFS来实现。
PIFS是在PCF中的IFS。它小于DIFS,具有比较高的优先权,他会优先抢到channel的使用权。
AP到node:CF-down contension free down
node到AP:CF-Up contention free up
在一个super frame开始的时候,point coordinator会sense medium,究竟是busy还是idle。
SIFS时间要比PIFS还短。
如果idle,PC就会等一个PIFS时间,就可以送一个data。
PC在往下送data时,会在这个data上面设置一个bit,问某一个station,PC送的不是只有data,而且还要问某一个station,你要不要送data上来。 如果询问结束,或完全没有征询,则送一个Conten free end frame,后面的时间就留给竞争的周期。
为什么PCF会得到高的优先权?它们都是CSMA/CA,完全竞争时,一定要等一个DIFS。而PCF不用等DIFS,只用等一个比较短的PIFS,就可以提前得到通道的使用权。
其它站点都会将NAV的值设置为CF的最长时间。
CF-End frame会reset NAV的值为0,与其它站点一起监听,竞争。
当PCF基地台本身是Transmitter或Receiver时,point coordinator会通过polling,询问每个node要不要发送。被询问的node必须立即回复,时间差为SIFS。一个polling一个data,会变成一连串的向下,向上发送的data burst,一直到免竞争的周期结束。 如果传输需要MAC level的ACK,会在CF-Up contension free向上送的frame中的一个bit,用于设置ACK信息,用于告诉coordinator刚才收到你送给我的data是正确的。
一开始,监听,medium为busy。 等它结束后,等待PIFS时间之后,开始发送一个frame。 同时这个frame带有一个polling,用广播的方式向下送,同时还带有一个polling,告诉我你要不要送data上来。继续向下送,被问到的station往上送。
对于CF-D3,经过SIFS还没有收到被问到的node送上来的data,则让它经过一个PIFS,则再送下一个frame,问另一个node/station。
轮询结束,送一个Contension Free End,会reset NAV的值,目的是让其它想要竞争的station,进入竞争周期,免竞争周期结束。竞争周期用CSMA/CA来抢channel
被询问到的station可以把封包送给任何其它的station,不一定是发出询问的那个基地台AP。当送给第三者的data,同样要被回应Acknowledged。经过SIFS之后,PC再取得控制权。
刚开始时,监听channel,发现忙碌。
等发送完毕,等待PIFS进入免竞争周期。
向下问某一个station,要不要发送,发现这个station有发送,并且是送给第三者,第三者收到封包后马上回一个ACK。
等ACK发送完成后,经过SIFS,PC(point coordinator)重新获的控制权,继续发送下一个封包,询问下一个station。 如果刚好有data需要发给基地台,则马上发送。
hidden node:A/C互相听不到对方,因为覆盖范围的关系,但当A/C同时给B发送时,可能回发生冲突。
C/B双方都能听到对方,双方同时送给不同的对象,A/D,可能都能成功。
802.11:不支持collision detection
因为无法监测collision,设计了RTS/CTS:为了减少长封包冲撞的概率,派先锋出去探路,预约资源。
被预约的时间段,别的node/station都认为他是busy