作者nicepizza (pizza)
看板Network
標題Re: [問題] About Hidden Node Problem..
時間Fri Oct 17 19:24:59 2008
darkcc跟你討論很好玩XDDD
閒的話就不用說了,我把這個問題PO上來不是顯得我更閒XD
(其實是想看有沒有人跟我有一樣的問題Orz)
終於下班了,可以好好再來PO文…
回到話題(繼續討論)…
我不懂你為什麼說:
「實際上A的訊號會干擾C->B,但B->C是可以接受的」
就我的認知而言,這兩種狀況都會被干攘。
因為他們應該是ad-hoc網路,每一個station所用的channel應該一樣,
既然一樣,任何一個station所發出的無線訊號都會曝露在同一個channel上,
所以只要有兩個station同時(或小於傳輸時間)要發聲,
就會造成干攘。
這就像在會議室上,同時有兩個人要講話一樣,此時他們要表達的訊息就交結在一起
沒人能知道他們要講什麼。
再舉更貼切的例子--如打開收音機轉FM92.1台北X音,
如果有人惡作劇在這個Channel上講話,全國在聽FM92.1的人除了會聽到台北X音的廣播,
還會聽到那個人惡作劇的聲音。
這也就是為什麼各大無線電信業者要花大錢跟國家買channel,
因為買了就是你的了,也只有你能在那個channel上發聲。否則就違法。
當然有一些channel是for free的。
所以我的意思是,無論是C->B 還是B->C,
因為A的無線訊號範圍包含了B,
B無論是收還是送,都必需和A共用同一個Channel,所以要正確傳輸,
無論是c->b 或b->c A都必需閉嘴。
這也是為什麼RTS/CTS是廣播的方式,
因為在同一時間同一channel上,只可以有某一種訊號(無論收或送)
否則都會被干攘,被視為collision。
除非擺明了收和送的ISM不一樣,那就不會有影響。
另外…
你說:偵測僅限於該機器所在的那個點,而不是整個訊號範圍
也和我所認知的衝突,我所知道的應該是整個訊號範圍
原因就是因為同一個channel上有兩個人以上發訊號,就是collision,
所以機器不是看自己所在的這個點有沒有collision,
而是偵測它和大家共用的channel上有沒有collision,
所以802.11的精神就是:"channel很珍貴且任一station唯有在channel是idle時才能發言"
所以802.11底下所發展出來的RTS/CTS 才會以廣播的方式,
告訴所有 "有效範圍且同一channel" 的station說,
有人要講話了,請所有人在NAV時間裡閉嘴。
如果偵測Collision是你說的定義:即限於該機器所在的node。
那RTS/CTS 演算法顯得愚笨許多。
因為RTS/CTS大可不必告訴所有人請閉嘴,
只要告訴大家誰誰誰正在接收訊號,請不要跟他講話就好。
事實上也很好做到這件事情,因為每一個station都有唯一的AID(Associate ID)
顯然RTS/CTS並不這麼做,原因不是因為複雜難以實現,
而是因為Collision的定義是在channel上有兩個以上的人在說話
而不是你說的限於機器本身。
還有…
你說:因此會有RTS/CTS的出現,就是補充偵測上的不足
我所認知…偵測上並沒有不足。
Physical carrier-sensing和RTS/CTS是兩個不同的Sensing function
而實作802.11必需完成CSMACA,
所以目前有兩種方式如下:
+Physical carrier-sensing:
每一個station有一個實體的偵測裝置,會把接收器放在channel上看是否idle,
如果是idle的話,他才會送訊息,否則不會送。但是有一種情況
還是會在Channel上發生Colision,就是"同時有人要送",這也就是
為什麼是CA而不是CD,所以,所謂的CA並不是只有RTS/CTS才能完成,
光靠一個Physical carrier-sensing的方法就叫做CA了。
+Virtual carier-sensing(即RTS/CTS Procedure)
透過NAV向量,告訴大家"閉嘴的時間",
大家拿到NAV向量就好比接收器偵測到有人有用Channel,
但實際上它是沒有放接收器在channel上的,
所以才叫做"虛擬偵測"。
它是用這樣的方式達到所謂的CA。
所以應該不是你以為的那樣,
這兩個是可以獨立運作的。
都能達到CSMACA的功能。
只是RTS/CTS是目前實作上比較常用的方式,
以致於大部份的人都以為CA就是RTS/CTS
好拉…打累了…
很高興與你討論…
看有什麼還需要指教的XDDDDD
ps:你居然忘記802.11要回ACK XDDD 有嚴重到唷XD
※ 引述《darkcc (will)》之銘言:
: 我這樣一直回一直回會不會顯示我太閒...
: 先為我的錯誤道歉,我忘記最後還有一個ACK封包了...
: Q1:為啥收到RTS/CTS都要安靜
: 實際上A的訊號會干擾C->B,但B->C是可以接受的
: 但是ACK封包的存在表示即使是B->C,C最後丟ACK給B還是會被A干擾
: 因此不論是聽到RTS跟CTS要安靜,就是因為在此時間任何傳輸的動作都有可能造成干擾
: (收到CTS代表會干擾到資料封包,收到RTS代表會干擾到ACK封包)
: Q2:做Physical Carrier Sensing不做Virtual Carrier Sensing可以嗎
: Physical Carrier Sense指的應該是偵測實際載波是否有訊號
: 但是偵測僅限於該機器所在的那個點,而不是整個訊號範圍
: 所以實際上C的訊號是不會被A偵測到的,因為距離太遠了
: 如果沒有B發出CTS,A勢必在此時間會嘗試丟訊息
: (不限定B,反正都可能讓B收不到C發出的ACK封包)
: 因此會有RTS/CTS的出現,就是補充偵測上的不足
: NAV實際上並不需要隨時做sensing的動作,一切都靠RTS/CTS的資訊做判斷
: 收到就把整個Duration都當成BUSY,不管有沒有偵測到
: 一直到時間過了再回到競爭狀態
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.81.169
※ 編輯: nicepizza 來自: 220.130.81.169 (10/17 19:26)
推 jien:你們的討論很有趣,版主要不要收進精華區XDD 10/17 19:57
推 darkcc:重點是沒有其他人要湊一腳...XD 10/17 22:00
推 HiJimmy:重點是我看不懂@@ 10/19 21:44