2008年3月27日 星期四

實驗九 無線網路效能分析探討(一) 隱藏節點和暴露節點問題

背景知識:


隱藏節點問題:


如圖有三個節點,A和C都正傳送資料給B,但是A和B都不在對方的傳送範圍內,所以以C來說,它會認為目前沒有別的節點傳送資料給B,結果A和C傳送給C的資料就會在B發生碰撞!而這樣因傳送距離而發生誤判的問題就被稱為隱藏節點問題


暴露節點問題:


如圖上有四個節點,A1和A2彼此在對方的傳送範圍內,而B1和B2卻不是,因此當A1傳資料給B1時,A2會偵測到A1在傳資料且怕說影響到A1的傳送而暫時不傳資料給B2,但事實上A2是可以順利無誤的傳送給B2;結論是此種問題是發生在當有一個節點要發送資料給另一個節點,但因為臨時節點也正傳送資料,因而影響了原本節點的資料傳送





實驗:

因為此實驗要計算出有效的傳輸距離和相對應的參數,所以在NS2中我們可以找到一些小工具來輸入並顯示想要的數據,我們可以在以下的位置找到要用的工具C:\cygwin\home\使用者名稱\ns-allinone-2.29\ns-2.29\indep-utils\propagation





第一次使用時要先編譯程式





輸入此行可看使用說明




以Two Ray Ground , 希望有效的傳輸距離為250公尺為例



TCL模擬程式驗證(book2/lab9/test_2nodes.tcl)



模擬後會產生傳送端記錄檔sd和接收端記錄檔rd,下圖為sd,

如果我們把兩節點的距離改成251公尺的話,會發現rd沒記錄

因為兩節點距離過遠







隱藏節點問題

節點A到節點B的距離為100m,節點B到節點C的距離也是100m,而節點之間的carrier sense 距離為150m,可以傳送資料的有效距離為120m


TCL模擬程式驗證(book2/lab9/test_hidden_terminal.tcl)


以下是模擬後產生出來的檔
當沒有RTS/CTS時(Mac/802_11 set RTSThreshold_ 3000)


讀取rd的時候赫然發現數字跟課本的不太一樣!


我想說先試試看接下來的數據好了,在模擬之前記得改依下tcl檔的參數
當沒有RTS/CTS時(Mac/802_11 set RTSThreshold_ 0)






結果又有數字不一樣了!!

還好是課堂上做的,所以問了老師再看看老師發表的文章後,大概知道是怎麼回事了






暴露節點問題



節點s1和節點s2同時想要分別傳送資料到R1和R2,節點之間的距離都為100m,而carrier sence 距離為120m,可以傳送資料的有效距離為100m



TCL模擬程式驗證(book2/lab9/test_exposed_terminal.tcl)


以下是模擬後產生出來的檔

當沒有RTS/CTS時(Mac/802_11 set RTSThreshold_ 3000)

此為sd檔



此為rd檔



當沒有RTS/CTS時(Mac/802_11 set RTSThreshold_ 0)

此為rd檔


大部分的說明課本上和課堂上都有講,我這裡只有描述自己的操作和簡略說明而已




















































































































2008年3月20日 星期四

實驗五 無線網路封包傳輸遺失模型

在做實驗之前我習慣先把ns和nam這兩個檔案複製到要用的資料夾裡


然後開啟cygwin進入lab5這個資料夾裡


執行startxwin.bat進入圖形介面視窗



情境一 :

使用隨機統一模型(PG = 0.1 , loss_model = 0)和multicast傳送(comm_type = 0)
執行方式 : $ns lab5.tcl 0 0 0.1 0 0 0(課本有打錯要注意!)
結果說明 :
模擬結束後,會產生一傳送記錄檔個sd和一個接收記錄檔rd,從sd檔案中我們可以得知共有12351個封包被送出,從rd檔案中我們可以得知共有11124個封包被接收,所以封包遺失率為(12351-11124)/12351=0.099
這個值跟所設定的網路底層封包遺失率0.1很接近,這也同時驗證了當封包只有multicast傳送時,網路使用者所感受到的傳送遺失機率將會和網路底層有相同的封包遺失率





情境二 :

使用隨機統一模型( PG = 0.4 , loss_model = 0)和multicast傳送(comm_type = 1)
執行方式 : $ns lab5.tcl 0 0 0.4 0 0 1(課本有打錯要注意!)
結果說明 :
模擬結束後,會產生一傳送記錄檔個sd和一個接收記錄檔rd,從sd檔案中我們可以得知共有12351個封包被送出,從rd檔案中我們可以得知共有12061個封包被接收,所以封包遺失率為(12351-12061)/12351=0.0234
這個值跟0.4的四次方0.0256很接近,同時也說明了若是使用unicast傳輸,網路使用者所感受到的傳送遺失率大約是網路底層所設定的四次方,其中四次方指的是最多重傳的次數(因為預設的RTSThreshold_為0,每個封包一定會大於0,所以重傳次數就由LongRetryLimit_所控制,其預設值為4)




情境三 :

使用GE模型(PGG = 0.96 , PBB = 0.94 , PG = 0.001 , PB = 0.05 , loss_model = 1)和multicast傳送(comm_type = 0)
執行方式 : $ns lab5.tcl 0.96 0.94 0.001 0.05 1 0(課本有打錯要注意!)
結果說明 : 模擬結束後,會產生一傳送記錄檔個sd和一個接收記錄檔rd,從sd檔案中我們可以得知共有12351個封包被送出,從rd檔案中我們可以得知共有12118個封包被接收,所以封包遺失率為(12351-12118)/12351=0.0188
這個值跟理論值0.01*(1 - 0.94)+0.05*(1 - 0.96) / ( (1 - 0.96)+(1 - 0.94) ) = 0.0206很接近












2008年3月19日 星期三

實驗四 網路效能測量

實驗前的注意事項 :

1.先檢查lab4有沒有這次實驗所需要的檔案



2.如果要使用nam和gnuplot的話,必須下startxwin.bat這個指令進入圖形化面 視窗

3.要執行的資料夾內要有下面兩個檔案

4.執行gnuplot只需在圖形介面視窗內輸入gnuplot即可開啟程式

第一步驟 : 有線網路

執行 $ns wired-measure.tcl

模擬後會出現以下三個檔(tcp_sink , sd_udp , rd_udp)

(CBR的封包遺失率)從 sd_udp 檔案中,可以得知共有550筆記錄;從 rd_udp 檔案中,可以得知共有542筆記錄,所以共有八個封包遺失,因此封包遺失率就為8/550=1.45%(註:以下畫面我用excel開啟)



(求得封包時間)使用awk,把rd_udp檔案中的第一(封包序號)和第四欄(封包延遲時間),列印到cbr_delay的檔案中


使用gnuplot畫出cbr_delay





(求得抖動率)執行方式: $awk -f measure-jitter.awk rd_udp > cbr_jitter


執行後資料夾會出現cbr_jitter的檔案,然後利用此檔繪出圖形



(求得吞吐量)執行方式 : $perl measure-throught.pl rd_udp 0.5
0.5指的是每0.5秒去統計這段時間的平均吞吐量,結果中的第一欄是時間,第二欄是這段時間內的平均吞吐量,最後還會把全部平均吞吐量的值和最高的吞吐量顯示出來


(計算TCP的吞吐量)課本字少打,應該為$perl measure-TCP.pl tcp_sink 0.5
以下為執行結果



第二步驟 : 無線網路

大部分的指令都類似步驟一只是wired改成wireless
此為執行無線網路的TCL程式碼


(CBR的封包遺失率)從 sd_udp 檔案中,可以得知共有453筆記錄;從 rd_udp 檔案中,可以得知共有205筆記錄,所以共有248個封包遺失,因此封包遺失率就為248/453=54.74%(註:以下畫面我用excel開啟)


求得封包延遲時間,模擬後產生cbr_delay的檔案


然後利用gnuplot作圖



計算抖動率


執行後資料夾會出現cbr_jitter的檔案,然後利用此檔繪出圖形




計算吞吐量,此為執行後的結果


Average rate: 517.429 bps