无线网络封包传输遗失.docx
《无线网络封包传输遗失.docx》由会员分享,可在线阅读,更多相关《无线网络封包传输遗失.docx(10页珍藏版)》请在冰豆网上搜索。
无线网络封包传输遗失
實驗十八無線網路封包傳輸遺失模型
實驗目的
1.介紹無線網路之封包傳輸遺失模型。
2.瞭解群體廣播(Multicast)與單點傳播(Unicast)之傳輸模式對於封包傳輸遺失機率之影響。
背景知識
[無線網路之封包傳輸遺失模型]
一般來說,當封包資料在無線網路上傳輸時,會發生封包遺失的原因大致上有兩個:
擁塞遺失(congestionloss)與無線遺失(wirelessloss)。
前者發生的原因主要是當網路上的資料傳輸量過大,導致網路設備傳送處理不及,使得設備中的佇列(queue)緩衝空間不足,而必須將部分的封包資料丟棄;由於這種行為就如同馬路塞車一般,因此稱為擁塞遺失。
後者發生的主要原因是因為無線網路的傳輸通道(channel)本身受到外界的影響而造成訊號衰減或干擾,由於這些影響因子都是跟無線傳輸相關,所以這些因素所造成的封包遺失稱為無線遺失。
由於本書的重心是在介紹無線網路,所以此單元中主要探討的是無線遺失的現象。
對於無線傳輸遺失而言,可以根據其資料遺失的分佈現象而分成兩種類型:
分散式遺失(distributedloss)和連續性遺失(burstloss)。
當封包遺失的分佈情形是相當分散且平均,則屬於第一種類型,如圖一(a)所示;反之,如果發生遺失的現象都是以連續性的居多,即一發生遺失就連續遺失好幾個封包,則屬於第二種類型,如圖一(b)所示。
圖一:
封包遺失之類型。
以論文研究來說,通常會使用數學模型來描述網路的行為,在此當中,隨機統一模型(randomuniformmodel)是常見被用來作為分散式遺失的模型,而Gilbert-Elliott模型(GEmodel)[1,2]則是被用來作為連續性遺失的模型。
在隨機統一模型中,因為資料是以隨機分散的方式遺失,所以使用到的參數是:
平均遺失機率(p),這個參數代表資料在傳輸過程中的平均遺失率。
在GE模型中,如圖二所示,當傳輸通道(channel)處於“好(Good)”的狀態(G),發生封包遺失的機率為PG,當傳輸通道處於“壞(Bad)”的狀態(B),發生封包遺失的機率為PB;PGB代表傳輸通道的狀態從好變成壞的機率,而PBG則正好相反。
在穩態(steadystate)的情形之下,傳輸通道處於“好(Good)”的狀態和“壞(Bad)”的狀態(B)的機率分別為
因此,對GE模型而言,整體的平均封包遺失率為:
(1)
圖二:
Gilbert-Elliott通道模型狀態圖。
[無線網路之傳輸模式:
Multicast與Unicast]
在無線網路中,不同的傳輸模式之下,對於遺失封包的處理方式不同,而這將會造成不同的封包遺失機率。
例如,當封包是藉由群體廣播(Multicast)的方式傳送,如果封包在傳送中發失遺失,則傳送端並不會重新傳送遺失封包,而是直接傳送下一個封包;在這種情形之下,網路使用者所感受到的傳送遺失機率(application-levelpacketlossrate)將會和網路底層(physical-levelpacketlossrate)有相同(p)。
另一方面,如果封包所傳送的方式是單點傳播(Unicast),則網路使用者所感受到的傳送遺失機率將會和底層的不同;因為在此傳送方式之下,發送端會利用重傳機制(Retransmission)來進行遺失封包回復的動作,直到確定該封包已被接收端所接收。
然而,為了避免一直重傳遺失封包而造成嚴重的端對端傳輸延遲(End-to-Enddelay),必須設定封包最大傳送次數(Maximumtransmissiontime),當同一個封包被傳送的次數到達該最大值時,傳送端即會將此封包捨棄不傳,以避免造成後續封包之嚴重延遲現象。
也就是因為有了重傳的機制,使得傳送遺失機率可以降低。
假設每個封包最大傳送次數為N,且MAC層的傳送遺失機率為p,則封包被接收端所正確接收到的機率為:
相對的,接收端的應用層所感受到的傳送遺失機率將會是
(2)
[NS2中無線遺失模型]
在原本的NS2無線網路架構中,封包從傳送端送出,若是沒有發生碰撞且接送端在接送訊號允許的範圍內,則接收端一定可以成功地收到封包。
在此假設下,是沒有考慮傳輸過程封包發生錯誤的情形,所以筆者修改了mac目錄下的wireless-phy.cc(圖三),加上了隨機統一模型與連續性遺失模型,用來模擬封包從傳送端到接收端的傳輸過程中可能發生的錯誤情形。
這邊要請讀者特別留意,由於傳輸遺失模型只有實作在接收端,所以若是屬於雙向傳輸(如TCP)的話,也要在傳送端加上無線遺失模型。
當筆者在設計此無線遺失模型時,提供了一組參數,讓使用者可以在TCL中設定想要的封包遺失率,這組參數分別為PGG、PBB、PG、PB、LOSS_MODEL,當使用者想要使用隨機統一模型時,只要把想要的封包移失率指定給PG,其他的參數值設為零即可;若是想要使用GE模型時,把LOSS_MODEL設為1,而其他參數就看使用者的設定(PGG,PBB,PGB,PBG的關係如下:
PGG=1-PGB;PBB=1-PBG)。
圖三在NS2中實作無線傳輸遺失模型
實驗步驟
在這個實驗中,會有一個有線網路節點,傳送CBR封包,透過基地台傳送資料到無線網路節點。
當在無線網路傳輸CBR封包時,可使用unicast傳送或者是multicast,而傳輸過程中,所發生的封包遺失模型,可使用隨機統一模型或者是GE模型,其相關的參數設定請參考下面的操作過程。
TCL程式碼。
(book/lab18/lab18.tcl)
#網路的拓樸
#有線網路節點--->(基地台)---->無線網路節點
#設定模擬結束時間
setopt(stop)250
#設定basestation的數目
setopt(num_FA)1
#讀取使用者設定的參數
procgetopt{argcargv}{
globalopt
lappendoptlistnn
for{seti0}{$i<$argc}{incri}{
setopt($i)[lindex$argv$i]
}
}
getopt$argc$argv
setpGG$opt(0)
setpBB$opt
(1)
setpG$opt
(2)
setpB$opt(3)
setloss_model$opt(4)
#comm_type是用來設定當封包進入無線網路時,要用unicast還是multicast傳送
#0:
multicast,1:
unicast
setcomm_type$opt(5)
#產生一個模擬的物件
setns_[newSimulator]
#設定最多重傳次數
Mac/802_11setLongRetryLimit_4
#若模擬的環境,是單純的有線網路,或無線網路,定址的方是使用flat即可(default設定)
#但是若包含了有線網路和無線網路,則就需要使用hierarchialaddressing的方式定址
$ns_node-config-addressTypehierarchical
#設定有兩個domain(第一個domain是有線網路,第二個是無線網路)
AddrParamssetdomain_num_2
#每個domain各有一個cluster(每一個domain只包含一個子網路)
lappendcluster_num11
AddrParamssetcluster_num_$cluster_num
#而在第一個domain,其第一個cluster中,只有一個有線網路節點
#而在地二個domain,其第一個cluster中,會有兩個無線網路節點,基地台算無線節點
lappendeilastlevel12
AddrParamssetnodes_num_$eilastlevel
#設定記錄檔,把模擬過程都記錄下來
settracefd[opentest.trw]
$ns_trace-all$tracefd
#設定mobilehost的個數
setopt(nnn)1
#拓樸的範圍為100mx100m
settopo[newTopography]
$topoload_flatgrid100100
#creategod
#create-god要設定基地台個數+mobilehost個數
setgod_[create-god[expr$opt(nnn)+$opt(num_FA)]]
#有線節點的位址
#因為此節點是屬於第一個domain,第一個cluster中的第一個節點,
#所以位址為0.0.0(從0開始算起)
setW(0)[$ns_node0.0.0]
#createchannel
setchan_[newChannel/WirelessChannel]
#設定節點參數
$ns_node-config-mobileIPON\
-adhocRoutingNOAH\
-llTypeLL\
-macTypeMac/802_11\
-ifqTypeQueue/DropTail/PriQueue\
-ifqLen2000\
-antTypeAntenna/OmniAntenna\
-propTypePropagation/TwoRayGround\
-phyTypePhy/WirelessPhy\
-channel$chan_\
-topoInstance$topo\
-wiredRoutingON\
-agentTraceON\
-routerTraceON\
-macTraceON
#設定基地台節點
#基地台是屬於第二個domain,第一個cluster中的第一個節點
#所以其位址為1.0.0(從0開始)
setHA[$ns_node1.0.0]
#setHAnetif_[$HAsetnetif_(0)]
#$HAnetif_set-error-level$pGG$pBB$pG$pB$loss_model
#設定mobilehost的參數
#不需要wiredrouting,所以把此功能off
$ns_node-config-wiredRoutingOFF
#Mobilehost是屬於第二個domain,第一個cluster中的第二個節點
#所以其位址為1.0.1(從0開始)
setMH(0)[$ns_node1.0.1]
#設定MH(0)的physicallayer存取點
setMHnetif_(0)[$MH(0)setnetif_(0)]
#在接收端的Physicallayer設定packeterrorrate和packeterrormodel
$MHnetif_(0)set-error-level$pGG$pBB$pG$pB$loss_model
#把此mobilehost跟前面的基地台做連結
[$MH(0)setregagent_]sethome_agent_[AddrParamsaddr2id[$HAnode-addr]]
#設定基地台的位置在(100.0,100.0)
$HAsetX_100.0
$HAsetY_100.0
$HAsetZ_0.0
#設定mobilehost的位置在(80.0,80.0)
$MH(0)setX_80.0
$MH(0)setY_80.0
$MH(0)setZ_0.0
#在有線節點和基地台之間建立一條連線
$ns_duplex-link$W(0)$HA10Mb10msDropTail
$ns_at$opt(stop).1"$MH(0)reset";
$ns_at$opt(stop).0001"$W(0)reset"
#建立一個CBR的應用程式(wirednode--->basestation)
setudp0[newAgent/mUDP]
$udp0set_filenamesd
$ns_attach-agent$W(0)$udp0
$udp0setpacketSize_1000
setcbr0[newApplication/Traffic/CBR]
$cbr0attach-agent$udp0
$cbr0setrate_500kb
$cbr0setpacketSize_1000
setnull0[newAgent/mUdpSink]
$null0set_filenamerd
$MH(0)attach$null03
#當基地台收到cbr封包時,可以根據使用者設定以unicast或multicast
#轉送封包到mobilehost
setforwarder_[$HAsetforwarder_]
puts[$forwarder_port]
$ns_connect$udp0$forwarder_
$forwarder_dst-addr[AddrParamsaddr2id[$MH(0)node-addr]]
$forwarder_comm-type$comm_type
#在2.4秒時,開始送出cbr封包
$ns_at2.4"$cbr0start"
#在200.0秒時,停止傳送
$ns_at200.0"$cbr0stop"
$ns_at$opt(stop).0002"stop"
$ns_at$opt(stop).0003"$ns_halt"
#設定一個stop的程序
procstop{}{
globalns_tracefd
#關閉記錄檔
close$tracefd
}
#執行模擬
$ns_run
情境一:
使用隨機統一模型(PG=0.1,loss_model=0)和multicast傳送(comm_type=0)
執行方法
$nslab18.tcl000.1000
結果說明:
模擬結束後,會產生一個傳送記錄檔sd和一個接收記錄檔rd,從sd檔案中我們可以得知共有12351個封包被送出,從rd檔案中我們可以得知共有11124個封包被接收,所以封包遺失率為(12351-11124)/12351=0.099,這個值跟所設定的網路底層封包遺失率0.1很接近,這也同時驗證了當封包只有multicast傳送時,網路使用者所感受到的傳送遺失機率將會和網路底層有相同的封包遺失機率。
情境二:
使用隨機統一模型(PG=0.4,loss_model=0)和unicast傳送(comm_type=1)
執行方法
$nslab18.tcl000.4001
結果說明:
模擬結束後,會產生一個傳送記錄檔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)
執行方法
$nslab18.tcl0.960.940.0010.0510
結果說明:
擬結束後,會產生一個傳送記錄檔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很接近。
習題
如果將”最大傳送次數(N)”修改為2,當MAC層的遺失機率(p)為0.05、0.1、…、0.5,則應用層所觀察到的封包遺失率為多少?
參考資料
[1]J.P.Ebert,A.Willig,AGilbert-ElliotBitErrorModelandtheEfficientUseinPacketLevelSimulation,TechnicalRepoert,TKN-99-002,TechnicalUniversityofBerlin,March1999.
[2]H.S.Wand,N.Moayeri.Finitestatemorkovchannel–ausefulmodelforradiocommunicationchannel.IEEETransactiononVehicularTechnology,44
(1):
163-171,February1995.