TCP和UDP模型实验Word格式.docx
- 文档编号:21815984
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:30
- 大小:379.15KB
TCP和UDP模型实验Word格式.docx
《TCP和UDP模型实验Word格式.docx》由会员分享,可在线阅读,更多相关《TCP和UDP模型实验Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
另外,在s2到d之間有一條固定的傳輸速率的連線(ConstantBitRate,CBR),CBR應用程式是架構在UDP之上,因此必需在s2使用UDPagent來產生”udp”用來發送UDP封包,在d上使用Nullagent來產生”sink”以接收由s2傳送過來的UDP封包,然後再把接收的封包釋放。
CBR的傳送速度為1Mbps,每一個封包大小為1Kbytes。
CBR是在0.1秒開始傳送,在4.5秒結束傳輸;
FTP是在1.0秒開始傳送,4.0秒結束傳輸。
●TCL程式碼。
(book/lab3/lab3.tcl)
#產生一個模擬的物件
#針對不同的資料流定義不同的顏色,這是要給NAM用的
$nscolor1Blue
$nscolor2Red
#開啟一個NAM記錄檔
setnf[openout.namw]
$nsnamtrace-all$nf
#開啟一個模擬過程記錄檔,用來記錄封包傳送的過程
setnd[openout.trw]
$nstrace-all$nd
#定義一個結束的程序
globalnsnfnd
$nsflush-trace
close$nf
close$nd
#以背景執行的方式去執行NAM
execnamout.nam&
#產生傳輸節點,s1的id為0,s2的id為1
sets1[$nsnode]
sets2[$nsnode]
#產生路由器節點,r的id為2
setr[$nsnode]
#產生資料接收節點,d的id為3
setd[$nsnode]
#s1-r的鏈路具有2Mbps的頻寬,10ms的傳遞延遲時間,DropTail的佇列管理方式
#s2-r的鏈路具有2Mbps的頻寬,10ms的傳遞延遲時間,DropTail的佇列管理方式
#r-d的鏈路具有1.7Mbps的頻寬,20ms的傳遞延遲時間,DropTail的佇列管理方式
$nsduplex-link$s1$r2Mb10msDropTail
$nsduplex-link$s2$r2Mb10msDropTail
$nsduplex-link$r$d1.7Mb20msDropTail
#設定r到d之間的QueueLimit為10個封包大小
$nsqueue-limit$r$d10
#設定節點的位置,這是要給NAM用的
$nsduplex-link-op$s1$rorientright-down
$nsduplex-link-op$s2$rorientright-up
$nsduplex-link-op$r$dorientright
#觀測r到d之間queue的變化,這是要給NAM用的
$nsduplex-link-op$r$dqueuePos0.5
#建立一條TCP的連線
settcp[newAgent/TCP]
$nsattach-agent$s1$tcp
setsink[newAgent/TCPSink]
$nsattach-agent$d$sink
$nsconnect$tcp$sink
#在NAM中,TCP的連線會以藍色表示
$tcpsetfid_1
#在TCP連線之上建立FTP應用程式
setftp[newApplication/FTP]
$ftpattach-agent$tcp
$ftpsettype_FTP
#建立一條UDP的連線
setudp[newAgent/UDP]
$nsattach-agent$s2$udp
setnull[newAgent/Null]
$nsattach-agent$d$null
$nsconnect$udp$null
#在NAM中,UDP的連線會以紅色表示
$udpsetfid_2
#在UDP連線之上建立CBR應用程式
setcbr[newApplication/Traffic/CBR]
$cbrattach-agent$udp
$cbrsettype_CBR
#設定傳送封包的大小為1000byte
$cbrsetpacket_size_1000
#設定傳送的速率為1Mbps
$cbrsetrate_1mb
$cbrsetrandom_false
#設定FTP和CBR資料傳送開始和結束時間
$nsat0.1"
$cbrstart"
$nsat1.0"
$ftpstart"
$nsat4.0"
$ftpstop"
$nsat4.5"
$cbrstop"
#結束TCP的連線(不一定需要寫下面的程式碼來實際結束連線)
$nsdetach-agent$s1$tcp;
$nsdetach-agent$d$sink"
#在模擬環境中,5秒後去呼叫finish來結束模擬(這樣要注意模擬環境中
#的5秒並不一定等於實際模擬的時間
#執行模擬
●執行的方法。
($是在cygwin下的提示符號)。
在執行此TCLscript,請先進入繪圖模式。
$startxwin.bat
$nslab3.tcl
●執行的結果。
在與lab3.tcl同一個目錄下會產生一個out.tr(模擬過程記錄檔)和一個out.nam(NAM記錄檔),另外會開啟兩個新視窗,如下圖所示。
●執行NAM,觀察網路模擬的過程。
(請按左上圖中的
)
快速退後退後停止開始快速前進目前動畫撥放時間撥放速度
運行時間的指針S1S2rd佇列狀態
二、分析模擬結果
1.模擬過程記錄檔內容與格式
模擬結束後,除了使用NAM觀看模擬的過程,另外就是要使用模擬過程記錄檔去做一些數值的分析,因此這個記錄檔很重要,所以需要好好的先瞭解這些記錄檔中記錄的格式。
以下是out.tr的部份記錄。
+0.112cbr1000-------21.03.100
-0.112cbr1000-------21.03.100
+0.10812cbr1000-------21.03.111
-0.10812cbr1000-------21.03.111
r0.11412cbr1000-------21.03.100
+0.11423cbr1000-------21.03.100
-0.11423cbr1000-------21.03.100
+0.11612cbr1000-------21.03.122
-0.11612cbr1000-------21.03.122
r0.12212cbr1000-------21.03.111
+0.12223cbr1000-------21.03.111
.......................................................................................................
這個記錄的格式如下:
event
time
from
node
tonode
pkt
type
pktsize
flags
fid
srcaddr
dstaddr
seqnum
pktid
r:
receive(atto_node)
+:
enqueue(atqueue)
-:
dequeue(atqueue)src_addr:
node.port
d:
drop(atqueue)dst_addr:
每一筆記錄的開始都是封包事件發生的原因,若是”r”則表示封包被某個節點所接收;
若是”+”則表示進入了佇列;
若是”-“則表示離開佇列;
若是”d”則表示封包被佇列所丟棄。
接著的第二個欄位表示的是事件發生的時間;
欄位三和欄位四表示事件發生的地點(從fromnode到tonode);
欄位五表示封包的型態;
欄位六是封包的大小,欄位七是封包的旗標標註;
欄位八表示封包是屬於哪一個資料流;
欄位九和欄位十是表示封包的來源端和目的端,這兩個欄位的格式是a.b,a代表節點編號,b表示埠號(portnumber);
欄位十一表示封包的序號;
欄位十二表示封包的id。
以前面模擬過程記錄檔的第一筆為例,意思就是說有一個封包pakcetid為0,資料流id為2,序號為0,長度為1000bytes,型態為CBR,它是從來源端1.0要到目的地3.1,在時間0.1秒的時候,從節點1(s2)進入了節點2(r)的佇列中。
2.awk語言
2.1簡介
awk是一種程式語言,具有一般程式語言常見的功能。
awk語言具有某些特點,如:
使用直譯器(Interpreter)不需先行編譯;
變數無型別之分(Typeless),可使用文字當陣列的註標(AssociativeArray)等,因此,使用awk撰寫程式比起使用其它語言更簡潔便利且節省時間。
另外,awk還具有一些內建功能,使得awk擅於處理具資料列(Record)、欄位(Field)型態的資料;
最後,awk內建有pipe的功能,可將處理中的資料傳送給外部的Shell命令加以處理,再將Shell命令處理後的資料傳回awk程式,這個特點也使得awk程式很容易使用系統資源。
2.2awk是如何運作的
為了便於解釋awk程式架構以及相關的術語,以上面網路模擬過程記錄檔為例加以介紹。
2.2.1名詞定義:
a.資料列:
awk從資料檔上讀取的基本單位,以記錄檔為例,awk讀入的
第一筆資料列為”+0.112cbr1000-------21.03.100”
第二筆資料列為“-0.112cbr1000-------21.03.100”
一般而言,一筆資料列相當於資料檔上的一行資料。
b.欄位(Field):
為資料列上被分隔開的子字串。
以資料列”+0.112cbr1000-------21.03.100”為例,一般而言是以空白字元來分隔相鄰的欄位。
一
二
三
四
五
六
七
八
九
十
十一
十二
+
0.1
1
2
cbr
1000
-------
1.0
3.1
當awk讀入資料列後,會把每個欄位的值存入欄位變數。
欄位變數
意義
$0
為一字串,其內容為目前awk所讀入的資料列.
$1
代表$0上第一個欄位的資料.
$2
代表$0上第二欄個位的資料.
……
2.2.2程式主要結構:
Pattern1{Actions1}
Pattern2{Actions2}
……………………………
Pattern3{Actions3}
一般常用”關係判斷式”來當成Pattern。
例如:
x>3用來判斷變數x是否大於3
x==5用來判斷變數x是否等於5
awk提供c語言常見的關係運算元,如:
>、<、>=、<=、==、!
=等等
Actions是由許多awk指令所構成,而awk的指令與c語言中的指令非常類似。
IO指令:
print、printf()、getline......
流程控制指令
:
if(...){...}else{…}、while(…){…}……
在awk程式的流程中先判斷Pattern的結果,若為真(True),則執行相對應的Actions;
若為假False則不執行相對的Actions。
若是處理的過程中沒有Pattern,awk會無條件的去執行Actions。
2.2.3工作流程:
執行awk時,它會反複進行下列四步驟。
1.自動從指定的資料檔中讀取一筆資料列。
2.自動更新(Update)相關的內建變數之值。
3.逐次執行程式中所有的Pattern{Actions}指令。
4.當執行完程式中所有Pattern{Actions}時,若資料檔中還有未讀取的料,則反覆執行步驟1到步驟4。
awk會自動重覆進行上述的四個步驟,所以使用者不需在程式中寫這個迴圈。
2.3端點到端點的延遲(End-to-EndDelay)。
(book/lab3/measure-delay.awk)
#這是測量CBR封包端點到端點間延遲時間的awk程式
BEGIN{
#程式初始化,設定一變數以記錄目前最高處理封包的ID。
highest_packet_id=0;
{
action=$1;
time=$2;
from=$3;
to=$4;
type=$5;
pktsize=$6;
flow_id=$8;
src=$9;
dst=$10;
seq_no=$11;
packet_id=$12;
#記錄目前最高的packetID
if(packet_id>
highest_packet_id)
highest_packet_id=packet_id;
#記錄封包的傳送時間
if(start_time[packet_id]==0)
start_time[packet_id]=time;
#記錄CBR(flow_id=2)的接收時間
if(flow_id==2&
&
action!
="
d"
){
if(action=="
r"
end_time[packet_id]=time;
}
}else{
#把不是flow_id=2的封包或者是flow_id=2但此封包被drop的時間設為-1
end_time[packet_id]=-1;
}
END{
#當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間
for(packet_id=0;
packet_id<
=highest_packet_id;
packet_id++){
start=start_time[packet_id];
end=end_time[packet_id];
packet_duration=end-start;
#只把接收時間大於傳送時間的記錄列出來
if(start<
end)printf("
%f%f\n"
start,packet_duration);
執行方法。
($為cygwinshell的提示符號)
$awk-fmeasure-delay.awkout.tr
若是要把結果存到檔案,可使用導向的方式,把結果存到cbr_delay檔案中。
$awk-fmeasure-delay.awkout.tr>
cbr_delay
執行結果:
0.1000000.038706
0.1080000.038706
0.1160000.038706
0.1240000.038706
0.1320000.038706
………………………
2.4抖動率(jitter)。
(book/lab3/measure-jitter.awk)
抖動率就是延遲時間變化量(delayvariance),由於網路的流量隨時都在變化,當流量大的時候,許多封包就必需在節點的佇列中等待被傳送,因此每個封包從傳送端到目的地端的時間也就不一定會相同,而這個不同的差異就是所謂的抖動率。
抖動率越大,則表示網路越不穩定。
#這是測量CBR封包jitter的awk程式
#jitter=((recvtime(j)-sendtime(j))-(recvtime(i)-sendtime(i)))/(j-i),其中j>
i
highest_packet_id){
if(start_time[packet_id]==0){
#記錄下包的seq_no
pkt_seqno[packet_id]=seq_no;
#把不是flow_id=2的封包或者是flow_id=2但此封包被丟棄的時間設為-1
#初始化jitter計算所需變量
last_seqno=0;
last_delay=0;
seqno_diff=0;
end){
#得到了delay值(packet_duration)後計算jitter
seqno_diff=pkt_seqno[packet_id]-last_seqno;
delay_diff=packet_duration-last_delay;
if(seqno_diff==0){
jitter=0;
jitter=delay_diff/seqno_diff;
printf("
start,jitter);
last_seqno=pkt_seqno[packet_id];
last_delay=packet_duration;
$awk-fmeasure-jitter.awkout.tr
若是要把結果存到檔案,可使用導向的方式,把結果存到cbr_jitter檔案中。
$awk-fmeasure-jitter.awkout.tr>
cbr_jitter
0.1000000.000000
0.1080000.000000
0.1160000.000000
........
2.5封包遺失率(packetloss)。
(book/lab3/measure-loss.awk)
#這是測量CBR封包遺失率的awk程式
#程式初始化,設定一變數記錄packet被drop的數目
fsDrops=0;
numFs=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP UDP 模型 实验