Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64044
  • 博文数量: 25
  • 博客积分: 1050
  • 博客等级: 少尉
  • 技术积分: 239
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-28 20:21
文章分类
文章存档

2010年(25)

我的朋友

分类: 系统运维

2010-03-03 19:43:48

最近比较糊涂,找到下面的一些文章,都是转自 

记得刚开始接触802.11协议以及实际的网络产品的时候,最让我糊涂的就是两个"range":一是transmission range(或者reception range),另一个是carrier sensing range(有的又叫interference range)。ns2里面就是这两个的设置,一般TX range比较短,250米左右。CS range是TX range的两倍多一点,550米左右。

有这么一段时间,一堆paper都在讨论怎么调整这两个range,来提升性能。特别是做graph model的一群人,很多不区分这两个range,上来就说如果两个节点能听到对方的传输,它们之间就有一个连接。那看了就让人头疼了,到底两个节点距离250米有一个连接,还是550米就可以有一个连接呢?


原来的分析有错误,谢谢匿名网友的指出。请大家参考我对paper 51的分析。

多谢那个谁给我的推荐。不过你匿名了,只好用那个谁来称呼你了,嘿嘿。你说的对,carrier sensing range和interference range是两个不同的东西。这再次证明了这些range是多么让人头疼,本来以为两个range就完事了,没想到又多出一个来。现在我们有三个range了,great!

怎么去理解它们呢?我觉得最可以避免混淆的理解方式就是1和2是真实可调的range,而3更多的是一个概念层面上的东西。下面一一分解。

1. Transmission range (TX)

意思是说光看一个发送方,一个接收方,没有任何别的干扰,最大多远我就不能正确接收一个包了。这个范围完全由传输能量,信道的衰减特性,以及我的接收阈值(SNR Threshold)决定。也就是说,接收到的SNR大于这个阈值就算正确接收了,反之就不是。其中传输能量和接收阈值在网卡中是可调的两个参数。

2. Carrier sensing range (CS)

到底检测到多大的能量算是信道忙?这个是跟检测阈值相关的(CS threshold)。这个阈值通常比接收阈值要低,也是网卡中可调的。

总结:TX range虽然是以发送方为圆心,但实际是跟接收相关。也就是说在这个range之内的节点,在没有别的干扰的情况下,可以正确接收。而CS range实际是和发送相关的。也就是说谁想发送谁根据CS threshold来检测信道是否忙。所以这个所谓的CS range其实不是很讲得通。比如我说A的CS range是500米,这是什么意思呢?是说500米之内任何一个节点的发送都会使A认为信道忙?但是我怎么知道每个节点用多大的能量发送呢?如果一定要这样理解就说明这里隐含了一个假定,就是每个节点的发送能量都是一样,也是我已知的。所以我根据这个发送能量,信道衰减特性和CS threshold可以算出每个节点的作用范围。然后根据刚才的假定把这个范围放在A的身上。所以某个节点的CS range这个提法本身是不合理的。更严格的说法是根据这个节点的CS threshold,以及每个别的节点的传输能量,我可以找出这个节点的CS group。这个group里的每个节点在发送的时候都可以让这个节点觉得信道忙。这样我就可以消除每个节点发送能量一样这个假定了。

3. Interference range (IF)

前面两个range都不考虑干扰,都是单纯两个节点之间的关系。而IF range不是一个可以单纯存在与两个节点之间的关系,而必须包含至少三个节点。根据这篇文章的分析,IF range是和TX range相关的。比如IF range = 1.78*TX range。怎么理解这个IF range呢?举个例子,A要发送给B,根据上面的分析,A和B的距离只要不超过TX range,B就可以正确接收了。这时候又来了个C,位置关系是A->B - C。C想发送给别的什么节点,不用管。从B的角度来看,它会收到A的能量(记作P_A。当然是衰减过的,不过还是比SNR threshold大),同时也收到了C的能量(记作P_C。和A一样,这个能量也跟C的TX power有关,和信道衰减有关),这时候B收到的SNR就会比单纯接收A的要小一点了(计算方法是P_A/P_C)。一旦这个SNR小于了SNR threshold,B就不能正确接收A的包了,这就叫C对B产生了干扰。或者你可以说,B在C的IF range里面。所以你看,这个range和P_A有关。严格地说应该跟A和B的距离有关,那么你取upper bound的话,就可以说跟TX range有关了。

为什么说IF不是真实存在,就是因为不能单纯拿一个节点说它的IF range是多少,而必须要看它要去影响谁。一个节点,对于同样远的两个接收方,很可能一个能干扰,一个不能干扰。因为它们各自对应的发送方离它们的距离可能不一样,给它们施加的能量也不一样。所以IF range在真实的网络中是很难事先算好放在每个节点身上的。这更多是个概念。在应用的过程中很多是包含了所有的节点都一样这个假设,但是作者们往往自己还没搞清楚这一点。

*对上面的一点补充,涉及具体的ns2,以下来自http://victorgau.blogspot.com/2009/01/transmission-range-carrier-sensing.html

Transmission Range 指的是資料傳輸可以正確被接收的範圍,譬如 NS2 中預設 Tx Range 是 250m。

Carrier Sensing Range 指的是訊號可以被偵測到的範圍,譬如 NS2 中預設是 550m。

當你在 node A 的 Tx Range 裡面,而 node A 也正在傳輸資料給你,這個時候 node B 不知道你在接收資料,所以他也在傳送資料,不巧的是你剛好在 node B 的 Carrier Sense Range 中,所以 node B 的訊號影響了你,這個時候你可能會沒有辦法正確的收到從 node A 來的訊息,如果因為兩個訊號互相干擾的關係,而沒有收到訊號,這就叫做 collision。但是如果從 node A 跟 node B 來的訊號如果強度差異很大,雖然你受到干擾,但是你可能還是可以正確的收到訊號,這個叫做 Capture Effect

在 NS2 中可以使用 CSThresh_, RXThresh_, 跟 CPTresh_ 來設定 802.11 模組中訊號的 threshold。


---------------------------------------------------------------------

其实802.11本身很简单,sender在发包之前检测一下信道,如果超过DIFS的时间还是idle的,就随机地backoff来避免碰撞(因为可能 有好几个senders都有包要发送,他们会同时检测到idle)。backoff结束以后就把数据发出去(这个数据包括物理头,MAC头以及上层的一些 包头什么的)。接受方收到以后,等SIFS就发一个确认(ACK)包回去。发送方发完以后,等SIFS+ACK的时间,如果什么都没收到,就准备重发。重 发和第一次发送的主要区别就是随机backoff取值的区间要加倍,这是因为802.11假定丢包是因为碰撞,所以重发的时候增大取值区间来降低碰撞概 率。

802.11为什么要这样最根本的原因是无线网卡不能同时发和收,任何时间都只能做其中的一种,所以发完了以后需要接收方发送一个确认。因为碰撞只有在包 发完以后才可能检测到,碰撞的代价比较大,所以要先backoff来避免碰撞。在可以同时收发的以太网中,协议就不这样设计了,包发出去的时候,发送方可 以同时监测信道看看自己的包有没有碰撞掉,如果有它就会中断当前的发送。也就是说,碰撞的代价比较小。所以以太网协议中接收方不需要发确认,而且 backoff是放在碰撞之后的,就是说一开始大家有包就发,发现碰撞了再一起做backoff,然后重传。

以上基本就是最常用的802.11 DCF了。当然它本身还有PCF,不过基本没人用。802.11主要的问题有两个,一是本身overhead太大,像这个backoff, DIFS, PHY头, ACK占用了大量的传输时间,而真正传输有效数据的时间相对来说反而很小。第二就是用来避免碰撞的backoff机制本身不是最优的,用户少的时候, backoff有点浪费,用户太多了,backoff又不足以解决问题,两边不讨好。除了这两个最根本的问题,还有一些基本假设的问题值得商榷。比如重传 的时候,backoff区间要加倍,这个是假定丢包是碰撞引起的。但是如果丢包是因为信道质量不好,这个区间加倍的方法就是浪费了。这个跟TCP over wireless挺像的,也是不能区分两种丢包,结果在传输错误丢包的情况下,错误地降低窗口的大小,造成浪费。一般研究TCP over wireless的人都只看TCP丢包,很少考虑802.11 MAC层的细节。实际上,这两种情况会共同作用,导致TCP over wireless的吞吐量更小了。

阅读(2254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~