差异式服务网络.docx
《差异式服务网络.docx》由会员分享,可在线阅读,更多相关《差异式服务网络.docx(28页珍藏版)》请在冰豆网上搜索。
差异式服务网络
實驗十七差異式服務網路(DifferentiatedServiceNetwork)
實驗目的
學習不同資料流調節器(TrafficConditioner)的運作機制,以瞭解在差異式服務網路(DiffServ)中的確保服務(AssuredForwardingService)如何達到端點到端點的品質保證。
背景知識
隨著多媒體應用程式如隨選視訊(VOD,videoondemand)、網路電話(VOIP,voiceoverip)、網路會議(ConferencingoverIP)等等的發展,這使得目前網際網路所採用的盡力服務(best-effortservice)不能再滿足這些多媒體應用程式的需求,所以IETF(InternetEngineeringTaskForce)就針對網路服務品質(NetworkQualityofService)提出了兩種服務的的模型---整合式服務(IntServ,IntegratedService)網路模型和差異式服務(DiffServ,DifferentiatedService)網路模型。
但是整合式服務網路模型有複雜度(complexity)高和擴充性(scalability)等問題,因此差異式服務網路模型獲得研究學者們較多的注意。
差異式服務網路架構的精神在於它設法簡化核心路由器(corerouter)的複雜度,盡量將複雜的允入控制(admissioncontrol)交由頻寬管理者(BB,bandwidthbroker)負責,封包辨識工作(packetclassification)交由邊境路由器(ER,edgerouter)負責,並且採用比較粗略的以類別區分網路品質保證(per-classQoS),所以差異式服務網路架構就比整合式服務網路架構能提供較高的可擴充性。
目前差異式服務網路架構定義了兩種服務的形態---EF(ExpeditedForwarding)服務和AF(AssuredForwarding)服務。
EF主要是提供低延遲(lowdelay)、低延遲抖動(lowjitter)、和低封包遺失率(lowlossrate)的服務;而AF則是提供更有彈性的服務,因此AF只有對吞吐量(throughput)有所要求,對於延遲(delay)或延遲抖動(jitter)沒有嚴格的要求。
AF的運作方式是當客戶端的資料流(traffic)進入到差異式服務網路領域(DiffServdomain)的邊境路由器時,邊境路由器會根據服務協議(SLA,servicelevelagreement)去量測客戶資料流的速率是否超過規範,若是符合規範,就會在DSCP欄位(DiffServCodePoint,或稱為DSbyte,重新定義過的IPToS欄位)標記上較低的封包丟棄機率(dropprobability)值;但若是量測出來的速率超過規範,就會標記上較高的封包丟棄機率值。
因此當網路發生擁塞時,具有較高的封包丟棄機率值的封包就會比具有較低的封包丟棄機率值的封包被核心路由器中的佇列管理機制所丟棄,所以AF就是希望藉著有效的控制具有較低封包丟棄機率值的封包流進核心路由器中,以達到最低吞吐量(minimumthroughput)的保證。
而實現把不同封包丟棄機率丟棄的佇列管理方式最常用的就是WRED(WeightedRandomEarlyDetection)。
WRED整合了RED佇列管理和封包優先權的概念,這樣在處理網路擁塞情況發生時,能提供較高規格的服務給較高優先權(封包丟棄機率值較低)的封包,當佇列的長度越來越長的時候,WRED就會開始隨機選擇較低優先權(封包丟棄機率值較高)的封包丟棄,佇列長度越長,丟棄的機會也就越高,若網路擁塞沒有改善,最後連較高優先權的封包也會被開始隨機丟棄。
接下來將介紹一些在AF服務中常來量測使用者資料是否符合規範的演算法,這些演算法可以區分為兩種類型,一種是以量測資料流平均速率的演算法,常見的是TSW3CM(TimeSlidingWindowThreeColorMarker);另一種是以令牌桶(tokenbucket)為量測方法的演算法,常見的是SRTCM(SingleRateThreeColorMarker)和TRTCM(TwoRateThreeColorMarker)。
●TSWTCM
在TSWTCM(圖一)中包含了兩個部份,一個是速率估計器(rateestimator)(圖二),另一個是封包丟棄機率值標註器(packetmarker)(圖三)。
圖一.TSWTCM架構圖
一開始的時候:
AVG_INTERVAL=aconstant;
avg-rate=CTR;
t-front=0;
每當一有封包到達的時候,速率估計器就會去更新它的變數:
Bytes_in_win=avg-rate*AVG_INTERVAL;
New_bytes=Bytes_in_win+pkt_size;
avg-rate=New_bytes/(now-t-front+AVG_INTERVAL);
t-front=now;
其中:
now=目前到達封包的時間
pkt_size=目前到達封包的大小,單位為byte
avg-rate=量測出來的平均到達速率
AVG_INTERVAL=所保持歷史記錄的時間窗(timewindow)
圖二.以TimeSlidingWindow方式量測資料速率的方法
若量測的速率小於或等於CIR(CommittedInfomationRate)時
if(avg-rate<=CIR)
標註封包為綠色
若量測的速率大於CIR,但卻小於或等於PIR(PeakInformationRate)時
elseif(avg-rate<=PIR)AND(avg-rate>CIR)
calculateP0=
以機率P0標註封包為黃色
以機率(1-P0)標註封包為綠色
else
calculateP1=
calculateP2=
以機率P1標註封包為紅色
以機率P2標註封包為黃色
以機率(1-P1-P2)標註封包為綠色
endif
圖三.TSWTCM封包標註演算法
●SRTCM
在SRTCM(圖四)中共有兩個令牌桶,一個是令牌桶C,其桶子大小為CBS,另一個是令牌桶E,其桶子大小為EBS。
當一個封包進入到SRTCM時,SRTCM就會去檢查令牌桶C中的令牌,若是令牌桶C中的令牌數量大於封包的大小,則此封包將會被標註成綠色的封包(最低的封包丟棄機率值),同時,令牌桶C中的令牌數量將會減去封包的大小。
若是SRTCM發現令牌桶C中的令牌數量小於此封包的大小,但令牌桶E中的令牌數量大於此封包的大小,則此封包將會被標註成黃色的封包(中間的封包丟棄機率值)。
同時令牌桶E中的令牌數量將會減去封包的大小。
其它情況時,此封包將會被標註成紅色的封包(最高的封包丟棄機率值)。
圖四.SRTCM架構圖
●TRTCM
在TRTCM(圖五)中共有兩個令牌桶,一個是令牌桶C,其桶子大小為CBS,另一個是令牌桶P,其桶子大小為PBS。
當一個封包進入到TRTCM時,TRTCM就會去檢查令牌桶P中的令牌,若是令牌桶P中的令牌數量小於封包的大小,則此封包將會被標註成紅色的封包(最高的封包丟棄機率值);若是TRTCM發現令牌桶P中的令牌數量大於此封包的大小,但令牌桶C中的令牌數量大於此封包的大小,則此封包將會被標註成黃色的封包(中間的封包丟棄機率值)。
同時令牌桶P中的令牌數量將會減去封包的大小。
其它情況時,此封包將會被標註成綠色的封包(最低的封包丟棄機率值),同時令牌桶C和令牌桶P中的令牌數量將會減去此封包的大小。
圖五.TRTCM架構圖
圖五.TSWTCM架構圖
實驗步驟
●模擬的網路架構圖
在這個模擬的網路架構中,e1和e2是邊境路由器,在此我們設定TSWTCM、SRTCM、和TRTCM來量測使用者資料是否符合規範,core是核心路由器。
另外,這三個路由器所採用的佇列管理機制是WRED(WeightedRandomEarlyDetection),包含了三個虛擬佇列(virtualqueue),用來記錄三種不同封包丟棄機率值的封包佇列長度,但實際上只有一個佇列(physicalqueue),這個實際的佇列是真正用來暫時存放封包用的,而這三個虛擬佇列設定不同的臨界值(threshold)和封包丟棄機率,使具有紅色標註的封包能在發生佇列長度在超過臨界值時優先丟棄,接著是黃色標註的封包,最後才是綠色標註的封包。
●TCL程式碼---TSWTCM。
(book/lab17/TSW3CM.tcl)
#原作者:
JeremyEthridge,
#原創作日期:
June15-July5,1999.
#註解:
ADS-REDscriptthatusesCBRtrafficagentsandtheTSW3CMPolicer.
#產生一個模擬的物件
setns[newSimulator]
#開啟一個tracefile,用來記錄封包傳送的過程
setnd[opentsw3cm.trw]
$nstrace-all$nd
#設定TSWTCM的參數,在NS2中TSWTCM名稱是TSW3CM
#設定第一個分組的CIR為1500000bps,PIR為3000000bps
#設定第二個分組的CIR為1000000bps,PIR為2000000bps
#設定第一個分組的CBR的傳送速率為4000000bps,第二組的為4000000bps
setcir01500000
setpir03000000
setrate04000000
setcir11000000
setpir12000000
setrate14000000
#模擬時間為85秒,每個傳送的CBR的封包大小為1000byte
settestTime85.0
setpacketSize1000
#設定網路模擬架構
sets1[$nsnode]
sets2[$nsnode]
sete1[$nsnode]
setcore[$nsnode]
sete2[$nsnode]
setdest[$nsnode]
$nsduplex-link$s1$e110Mb5msDropTail
$nsduplex-link$s2$e110Mb5msDropTail
#指定e1為邊境路由器,core為核心路由器
$nssimplex-link$e1$core10Mb5msdsRED/edge
$nssimplex-link$core$e110Mb5msdsRED/core
#指定e2為邊境路由器
$nssimplex-link$core$e25Mb5msdsRED/core
$nssimplex-link$e2$core5Mb5msdsRED/edge
$nsduplex-link$e2$dest10Mb5msDropTail
#設定在nam中節點的位置關係圖
$nsduplex-link-op$s1$e1orientdown-right
$nsduplex-link-op$s2$e1orientup-right
$nsduplex-link-op$e1$coreorientright
$nsduplex-link-op$core$e2orientright
$nsduplex-link-op$e2$destorientright
#設定佇列名稱
setqE1C[[$nslink$e1$core]queue]
setqE2C[[$nslink$e2$core]queue]
setqCE1[[$nslink$core$e1]queue]
setqCE2[[$nslink$core$e2]queue]
#設定e1到core的參數
$qE1CmeanPktSize$packetSize
#設定一個physicalqueue
$qE1CsetnumQueues_1
#設定三個virtualqueue
$qE1CsetNumPrec3
#設定從s1到dest為第一個分組,採用TSW3CM
#並把符合標準的封包標成綠色(10)
$qE1CaddPolicyEntry[$s1id][$destid]TSW3CM10$cir0$pir0
#設定從s2到dest為第二個分組,採用TSW3CM
#並把符合標準的封包標成綠色(10)
$qE1CaddPolicyEntry[$s2id][$destid]TSW3CM10$cir1$pir1
#把不符合標準的封包標註成黃色(11)和紅色(12)
$qE1CaddPolicerEntryTSW3CM101112
#把綠色(10)的封包放到第一個實際佇列中(0)的第一個虛擬佇列(0)
$qE1CaddPHBEntry1000
#把黃色(11)的封包放到第一個實際佇列中(0)的第二個虛擬佇列
(1)
$qE1CaddPHBEntry1101
#把紅色(12)的封包放到第一個實際佇列中(0)的第三個虛擬佇列
(2)
$qE1CaddPHBEntry1202
#設定第一個實際佇列中(0)的第一個虛擬佇列(0)的RED參數
#{min,max,maxdropprobability}={20packets,40packets,0.02}
$qE1CconfigQ0020400.02
#設定第一個實際佇列中(0)的第二個虛擬佇列
(1)的RED參數為{10,20,0.1}
$qE1CconfigQ0110200.10
#設定第一個實際佇列中(0)的第二個虛擬佇列
(2)的RED參數為{5,10,0.20}
$qE1CconfigQ025100.20
#設定e2到core的參數
$qE2CmeanPktSize$packetSize
$qE2CsetnumQueues_1
$qE2CsetNumPrec3
$qE2CaddPolicyEntry[$destid][$s1id]TSW3CM10$cir0$pir0
$qE2CaddPolicyEntry[$destid][$s2id]TSW3CM10$cir1$pir1
$qE2CaddPolicerEntryTSW3CM101112
$qE2CaddPHBEntry1000
$qE2CaddPHBEntry1101
$qE2CaddPHBEntry1202
$qE2CconfigQ0020400.02
$qE2CconfigQ0110200.10
$qE2CconfigQ025100.20
#設定core到e1的參數
$qCE1meanPktSize$packetSize
$qCE1setnumQueues_1
$qCE1setNumPrec3
$qCE1addPHBEntry1000
$qCE1addPHBEntry1101
$qCE1addPHBEntry1202
$qCE1configQ0020400.02
$qCE1configQ0110200.10
$qCE1configQ025100.20
#設定core到e2的參數
$qCE2meanPktSize$packetSize
$qCE2setnumQueues_1
$qCE2setNumPrec3
$qCE2addPHBEntry1000
$qCE2addPHBEntry1101
$qCE2addPHBEntry1202
$qCE2configQ0020400.02
$qCE2configQ0110200.10
$qCE2configQ025100.20
#設定s1到dest的CBR參數
setudp0[newAgent/UDP]
$nsattach-agent$s1$udp0
setcbr0[newApplication/Traffic/CBR]
$cbr0attach-agent$udp0
$udp0setclass_1
$cbr0setpacket_size_$packetSize
$udp0setpacketSize_$packetSize
$cbr0setrate_$rate0
setnull0[newAgent/Null]
$nsattach-agent$dest$null0
$nsconnect$udp0$null0
#設定s2到dest的CBR參數
setudp1[newAgent/UDP]
$nsattach-agent$s2$udp1
setcbr1[newApplication/Traffic/CBR]
$cbr1attach-agent$udp1
$udp1setclass_2
$cbr1setpacket_size_$packetSize
$udp1setpacketSize_$packetSize
$cbr1setrate_$rate1
setnull1[newAgent/Null]
$nsattach-agent$dest$null1
$nsconnect$udp1$null1
#定義一個結束的程序
procfinish{}{
globalnsnd
$nsflush-trace
close$nd
exit0
}
#顯示在e1的SLA
$qE1CprintPolicyTable
$qE1CprintPolicerTable
$nsat0.0"$cbr0start"
$nsat0.0"$cbr1start"
$nsat$testTime"$cbr0stop"
$nsat$testTime"$cbr1stop"
$nsat[expr$testTime+1.0]"finish"
$nsrun
●TCL程式碼---SRTCM。
(book/lab17/SRTCM.tcl)
#原作者:
JeremyEthridge,
#原創作日期:
June15-July5,1999.
#註解:
ADS-REDscriptthatusesCBRtrafficagentsandtheSRTCMPolicer.
#產生一個模擬的物件
setns[newSimulator]
#開啟一個tracefile,用來記錄封包傳送的過程
setnd[opensrtcm.trw]
$nstrace-all$nd
#設定第一個分組的CIR為1500000bps,CBR為2000bytes,EBS為3000bytes
#設定第二個分組的CIR為1000000bps,CBR為1000bytes,EBS為2000bytes
#設定第一個分組的CBR的傳送速率為4000000bps,第二組的為4000000bps
setcir01500000
setcbs02000
setebs03000
setrate04000000
setcir11000000
setcbs11000
setebs12000
setrate14000000
#模擬時間為85秒,每個傳送的CBR的封包大小為1000byte
settestTime85.0
setpacketSize1000
#設定網路模擬架構
sets1[$nsnode]
sets2[$nsnode]
sete1[$nsnode]
setcore[$nsnode]
sete2[$nsnode]
setdest[$nsnode]
$nsduplex-link$s1$e110Mb5msDropTail
$nsduplex-link$s2$e110Mb5msDropTail
#指定e1為邊境路由器,core為核心路由器
$nssimplex-link$e1$core10Mb5msdsRED/edge
$nssimplex-link$core$e110Mb5msdsRED/core
#指定e2為邊境路由器
$nssimplex-link$core$e25Mb5msdsRED/core
$nssimplex-link$e2$core5Mb5msdsRED/edge
$nsduplex-link$e2$dest10Mb5msDropTail
#設定在nam中節點的位置關係圖
$nsduplex-link-op$s1$e1orientdown-right
$nsduplex-link-op$s2$e1orientup-right
$nsduplex-link-op$e1$coreorientright
$nsduplex-link-op$core$e2orientright
$nsduplex-link-op$e2$destorientright
#設定佇列名稱
setqE1C[[$nslink$e1$core]queue]
setqE2C[[$nslink$e2$core]queue]
setqCE1[[$nslink$core$e1]queue]
setqCE2[[$nslink$core$e2]queue]
#設定e1到core的參數
$qE1CmeanPktSize$packetSize
#設定一個physicalqueue
$qE1CsetnumQueues_1
#設定三個virtualqueue
$qE1CsetNumPrec3
#設定從s1到dest為第一個分組,採用SRTCM
#並把符合標準的封包標成綠色(10)
$qE1CaddPolicyEntry[$s1id][$destid]srTCM10$cir0$cbs0$ebs0
#設定從s2到dest為第二個分組,採用SRTCM
#並把符合標準的封包標成綠色(10)
$qE1CaddPolicyEntry[$s2id][$destid]srTCM10$cir1$cbs1$ebs1
#把不