lab1 MAC的竞争窗口

来源:互联网 发布:澳洲留学中介 知乎 编辑:程序博客网 时间:2024/04/28 03:04

在做MAC的竞争窗口实验之前,我们需要先了解MAC层的工作原理,也即MAC的发包过程。

CSMA/CA 概述

嗯,这篇文章也是在之前写的(6月22日),首先发表于我们的班级博客(www.seedclass.com)。是在听完一位来自挪威的教授讲座后总结的。

现在发现一个问题,以下叙述的不是简单的CSMA/CA机制,而是加入了RTS/CTS的CSMA/CA机制,特此说明。

以下为原文:

首先,李教授说,通讯协议的几个重要的点:

  1. reliable,可信,数据传输可靠
  2. fairly,公平,网络中的节点机会合理
  3. protect,保护,传输中的节点(lucky guys)不被打扰

下面就从这几点介绍CSMA/CA协议:

CSMA/CA 概述

CSMA/CA (Carrier sense multiple access with collision avoidance) 多用于无线通讯协议,是基于IEEE的802.11协议的。他的中文名称是载波侦听多路访问/冲突避免。

从名字来看,就知道它的设计思想了:

  1. 载波侦听,在特定载波频率侦听,空闲时发送
  2. 多路访问,可以在多个载波频道传输和接收数据
  3. 冲突避免,用避免冲突的方式来实现数据可靠传输

 
值得一说的是最后一点,除了冲突避免(CA)还有另一种冲突保护机制,冲突检测(CD)。冲突检测是在发送数据之前,直接检测整个网络的状态,提前检测到 冲突的可能。检测整个网络,需要网络具有高速、微小衰减,这样,在世界范围内,这种全网络检测都是可能的。因此,有线网络是可以做到这点的。目前的有线网 络,衰减极小,速度极快。远处的另一台发送端的数据几乎能马上被整个网络的计算机探测到。

而无线网络由于其衰减严重显然做不到这点。假设一个节点的传输距离是100m,那么下面的情况,A可以与B通讯,而无法检测C的冲突:

A  <–  100m –>  B  <– 100m –> C

所以,无线网络采用另一种冲突保护机制:冲突避免(CA)。

冲突避免,是使用一些方法来商定发送数据的顺序和时间,以避免发生冲突。
CSMA/CA中是使用“RTS-CTS握手”的方式来避免冲突:“设备欲发送帧前,先发送一个很小的RTS(Request to Send)帧給目標端,等待目標端回應CTS(Clear to Send)帧後,才開始傳送。此方式可以確保接下來傳送資料時,不會发生冲突。同時由於RTS帧与CTS帧都很小,讓傳送的无效开销變小。”(来自维基百科)

我补充一点,RTS和CTS都是携带预计时间的,非目标地址的节点收到这些信号时,将不会在这段时间内发送信号。也就是说,一旦RTS-CTS握手成功,接下来的过程将不会被打扰(也就是一个节点占有信道后,知道发送完数据后,才释放)。

当然,RTS的发送是不能保证没有冲突的。这样的冲突就不可避免了,只能尽量减小。CSMA/CA的办法是,发送失败,则随机延时时间加倍,具体参数后文详述。

前面的握手机制,就是保证了“protect”。

另外,由于失败后的重发,就使得这个协议也具有“reliable”的特性。

最后一点,“fairly”如何保证?在介绍这个之前,我先把前面的握手介绍清楚,下面是详细的流程图:
CSMA/CA 传输流程

我一步步详细介绍。

CSMA/CA 详细详述

确认信道空闲

数据的传输是以帧为单位。传输前,先检测信道情况,若已被占用,则随机等待一段时间(Backoff time)。这段时间是以一个基本时隙为单位,在[0, CWmin - 1](协议规定CWmin = 32,可根据具体需要修改)中的线性随机分布。这个基本时隙是跟硬件响应速度,数据传输周期有关的,应该足够长来完成这些工作,否则没有意义。具体计算公 式我不太清楚。

若未被占用,等待DIFS (DCF Interframe Space) 时间(DIFS = 2 * slots + SIFS)后再次检测。slots没搞清楚,估计是考虑的数据传输时间?求问。。SIFS (Short Interframe Space) 是考虑了硬件响应时间。总之,若DIFS时间后仍然未被占用,则视为信道空闲。

RTS/CTS

信道空闲后,等待一个随机时间(Random Backoff time),就开始发送RTS包。发送结束并收到CTS后,表示握手成功,可以不被打扰的传输数据了。

若没有收到CTS,则需要等待一个随机时间后重新发送,这时,需要将CW扩大一倍(比如原来是32,现在到64),以优化网络环境。减少冲突的发生。根据大量的测试数据,老师告诉我们一个数据,重传次数应该为4次,或者7次。两个值,最好。

RTS和CTS的包中,包含了目标地址的信息,以及预计的后续传输时间(相对于一个帧结束的时间)。这时,非目标地址的节点就应该自觉的中止正在进行的活动,等待这么一段携带的剩余时间。

那么,如果在发送RTS之前的Backoff time时收到其他节点的RTS或CTS怎么办?毫无疑问的要中止当前的工作,等待包中包含的剩余时间。这个过程,叫frozen。这个时间结束 后,DIFS,接着,就不是随机时间了,是上一次未完成的随机时间。这样上次未完成的传输将在这次有更高的优先级。

数据传输

这一轮握手成功后,基本就可以安全的传输数据了,但是怎么保证数据的可靠?CSMA/CA 规定,数据帧发送结束后,接收端需要发送一个ACK,以确认成功接收。

倘若发送端没有收到ACK,则认为发送失败,需要重发,就类似上面提到的重发RTS了,也需要扩大CW。

不过,成功发送后,CW就将减为CWmin。另外,CW的值不应该超过CWmax(一般规定为1024,刚好是32*2^5),否则延时太长。超过了,就不再重发,认为丢包了。由上层协议去处理。

综上,握手的过程如下:
RTS -> CTS -> DATA -> ACK(CSMA/CA的内容转自:http://www.cnblogs.com/tankery/archive/2011/07/07/2100247.html,个人认为这个人的CSMA/CA讲解的非常好)。

如下是上述握手的图:


然后就开始我们的实验部分:lab1:MAC的竞争窗口。实验的过程可以参考:http://www.crhc.illinois.edu/wireless/assignments/simulations/assn_03.html

实验中提出了几个问题:

This assignment lets you correlate the CW size and network size/density. The trend may or may not be very clear due to factors like interference with increase in density etc. Try to answer following questions with respect to the graph obtained above- 
1. What trends do you observe? Do you observe any optimal CW size for each network population? 
2. If yes, does the optimal window size exhibit any particular relationship with the network population? 
3. Can you predict what would happen if you try to run this script for rlen = 6? Explain. 
4. Could you explain what the grep command does to extract information from the trace file?

1.如图可知CW存在一个最优值,当大于或者小于最与之的时候PDR会减小(The ratio of [Packets Received] / [Packets Sent] is the PDR)。

2.如图可知当网络规模增大的时候,CW的值也在增加,也就是线性关系。

3.如果rlen =6 ,则CW值在63或者127的时候PDR的值最大。

4.这个大家可以google下grep就能理解了。



原创粉丝点击