Tải bản đầy đủ (.pdf) (23 trang)

bài tập lớn môn cơ sở truyền số liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.01 MB, 23 trang )







(

)
















BÀI TẬP LỚN
MÔN CƠ SỞ TRUYỀN SỐ LIỆU





 :TS. Nguyễn Tài Hưng
Nhóm t :
Đào Trọng Hiếu 20091023
Đinh Hữu Quỳnh 2009
Lê Huy Luân 20091692
 : ĐT10 – K54








A. KHÁI QUÁT CHUNG

1.Yêu cầu bài tập lớn

- Tiến trình đến là tiến trình Poisson
- Node 5, 6 ,7 là các node nguồn
- 0, 1, 2 ,3 ,4 là các router
- 8, 9, 10 là các node đích
Trong đó:
Đường đi của node 7 : node 7 -> 0 ->1 -> 2 ->8
Node 7 ->0 ->1 -> 3 ->4 ->10
Đường đi của node 6 : node 6 -> 0 ->1 -> 2 - >10
Đường đi của node 5 : node 5 -> 0 ->1 ->3 -> 4 ->9
Tính các tham số sau trong 2 trường hợp có lỗi và không có lỗi :
- Average delay
- Queue length

Với sác xuất lỗi khung bằng nhau và bằng p, trễ là trễ đầu cuối.
2. Nhóm bài tập lớn
Giảng viên hướng dẫn : TS. Nguyễn Tài Hưng
Thành viên :
1. Đào Trọng Hiếu(Trưởng nhóm).
2. Đinh Hữu Quỳnh.
3. Lê Huy Luân.
2. Phân công công việc:
- 2 tuần đầu tiên cả nhóm tìm hiểu về phần mềm NS2 cũng như tìm hiểu cách
cài đặt và mô phỏng trong NS2.
- Đào Trọng Hiếu:Tìm hiểu và mô phỏng hàng đợi M/M/1 và cách tạo ra tiến
trình đến là tiến trình Poisson,tìm cách in ra các file cần thiết cho quá trình tính
toán.
- Đinh Hữu Quỳnh:Tìm hiểu và mô phỏng phần khung của yêu cầu bài toán.(tạo
nút,tạo nguồn,tạo link liên kết giữa các nút,tạo ra mất gói bằng cách nào…).
- Lê Huy Luân:Tìm hiểu cách tính chiều dài hàng đợi trung bình và trễ truyền
của các gói tin theo lý thuyết.tìm cách tính toán các tham số trên theo mô phỏng
và so sánh kết quả thu được so với lý thuyết.



B. NỘI DUNG
I. Lý Thuyết
1.1 Tiến trình Poisson:
Tiến trình Poisson là tiến trình điểm quan trọng nhất bởi vì vai trò của nó
cũng quan trọng như vai trò của phân bố chuẩn trong phân bố thống kê. Tất cả
những tiến trình điểm ứng dụng khác đều là dạng tổng quát hóa hay dạng sử đổi
của tiến trình Poisson. Tiến trình Poisson mô tả rất nhiều tiến trình trong đời sống
thực tế, do nó có tính ngẫu nhiên.
m ca tin trình Poisson:

Những đặc tính cơ bản của tiến trình Poisson là:
+ Tính dừng
+ Tính độc lập tại mọi thời điểm
+ Tính đều đặn
Hai tính chất sau là tính chất cơ bản, từ đó tiến trình Poisson có cường đọ
phụ thuộc thời gian. Từ các tính chất trên người ta có thể đưa các tính chất khác đủ
để biểu diến tiến trình Poisson, đó là:
+ Biểu diễn số: là số các sự kiện đến trong một khoảng thời gian với độ dài
cố định được phân bố theo tiến trình Poisson.
+ Biểu diễn khoảng thời gian: là các khoảng thời gian 

giữu các sự kiện
lien tiếp nhau được phân bố theo hàm mũ.
Tiến trình đến Poisson sử dụng trong lưu lượng viễ thông của mạng chuyển
mạch gói và mạng máy tính. Thêm vào đó tiến trình Poisson đã được sử dụng để
mô tả các tiến trình nhiễu và để nghiên cứu hiện tượng các hố điện tử xuât hiện
trong chất bán dẫn, và các ứng dụng khác……
Ba vấn đề cơ bản được sủ dụng để định nghĩa tiến trình đến Poisson. Xét
một khoảng thời gian nhỏ  ( với Δt  0) , như hình bên:


Δt
t t+Δt T
Đó là:
+ Xác suất của một tiến trình đến trong khoảng thời gian Δt được định nghĩa
là λΔt + o(Δt), với λΔt <<1 và λ là hằng số tỷ lệ lý thuyết.
+ Xác xuất không có tiến trình đến nào trong khoảng thời gian Δt là 1-
λΔ+o(Δt)
+ Tiến trình đến không có nhớ: một tiến trình đến trong khoảng thời gian Δt
là độc lập với các tiến trình trước đó và các tiến trình tương lai.

Nếu lấy một chu kì T, tìm xác suất p(k) của tiến trình đến trong thời gian T được
cho bởi:

p(k) =





Với k= 0, 1, 2, 3,……… (1)
Nó được gọi là phân bố Poisson. Đây là một phân bố chuẩn





 


và kì
vọng là:
E(k)=





 




Phương sai: 


 




 

 hay:



= E(k) = λT
Tham số λ là hằng số tỷ lệ, được xem là tham số tốc độ: λ=



Phương trình (1) mô tả tốc đọ đến trung bình của tiến trình Poisson. Bình
thường giá trị trung bình E(k) tiến tới không tương đương với λT lớn: 

/E(k) =
1/

 với nghĩa λT lớn, phân bố có quan hệ chặt chẽ với giá trị trung bình λT. Do
đó nếu một thông số( ngẫu nhiên) số các tiến trình đến trong khoảng thời gian T
lớn (lớn theo nghĩa λT >>1, hoặc T >> 1/λ), n/T có thể đánh giá λ. Cũng chú ý là
p(0) = 


, khi λT tang với phân bố đỉnh E(k) = λT, xác suất không có tiến trình
đến trong khoảng thời gian T tiến đến không với e mũ có tiến trình đến nào trong
khoảng thời gian T đến không với e mũ T.

1.2 Hàng đợi M/M/1:
Lược đồ trạng thái:


Tất cả các tốc độ đến đều là λ, μ
λ: Tốc độ của lần đến
μ: Tốc độ của lần đi


 






 




Pn: Xác suất ổn định trạng thái n
P0: Xác suất ổn định trạng thái 0
ρ: Mật độ lưu lượng ρ=




trong trường hợp này số kênh phục vụ bằng 1, chỉ có 1 server
Các công thức tính toán:
+ Xác suất co n khách hang trong hệ thống


= (1-ρ)

; n=1, 2 ……


= (1-)
+ Số lượng trung bình khách hàng trong hệ thống:
L= E(n)=



Phương sai: 


=




Tham số thời gian
+ Thời gian trung bình của 1 khách hang trong hệ thống: W
W=



=


=



+ Thời gian phục vụ trung bình cho một khách hang: 




=


=



+ Thời gian trung bình của khách hàng trong hàng đợi


= W- 

=


-



=




Chiều dài hàng đợi
+ Số lượng trung bình các khách hàng trong hệ thống
L =



+ Số lượng trung bình các job trong server: 




= 1P(n>=1) = 1-P(n=0) = 1-(1-ρ) = ρ
+ Số lượng trung bình của các công việc trong hàng đợi 




= L -

=


 =







II. tính toán theo lý thuyết:
1.1 Tính toán trên lý thuyết các tham số hàng đợi M/M/1.
Giải thiết:
- Tốc độ gói TB đến hàng đợi:
λ = λ1+ λ2+ λ
3=30+31+32=93(packets/s)
- Tải:
ρ = 0.91
- Tốc độ phục vụ trung bình của
server:
μ= λ/ρ = 93/0.91 ≈
102(Packet/s).
1.1.1 Số yêu cầu TB có trong hệ thống
 

  


  
 
1.1.2 Thời gian TB của 1 yêu cầu nằm trong hệ thống
 






 
1.1.3 Thờigian TB của 1 yêu cầu nằm trong hàng đợi







  






  

 
1.1.4 Số yêu cầu TB có trong hàng đợi ( Chiều dài hàng đợi )






  




  
 
1.2 Tính toán trễ đầu cuối đến đầu cuối theo lý thuyết:
Định nghĩa: là khoảng thời gian kể từ lúc gói tin được gửi đi ở nguồn cho đến khi
gói tin nhận được ở đích.
Công thức:
T
delay =
T
trans
+ T
prop
+ T
queue

Trong đó: T
delay
: thời gian trễ đầu cuối đến đầu cuối.
T
trans
: thời gian truyền gói tin trên đường truyền.

T
prop
: thời gian xử lý gói tin ở phía thu.

T
queue

: thời gian gói tin nằm trong hàng đợi.


III. Code
III.1,trường hợp không có lỗi:
#tao 1 doi tuong mo phong
set ns [new Simulator]
#Mo file bam vet
set tf [open out1.tr w]
$ns trace-all $tf
set q1 [open qm01.tr w]
set q2 [open qm12.tr w]
set q3 [open qm13.tr w]
set q4 [open qm34.tr w]
#danh cac mau cho packet
$ns color 1 Red
$ns color 2 Blue
$ns color 3 Green
# NAM trace file
set lambda1 30.0
set lambda2 31.0
set lambda3 32.0
set mu1 33.0
set mu2 34.0
set mu3 35.0
set nf [open out.nam w]
$ns namtrace-all $nf
#tao 5 nut trung gian
set n0 [$ns node]
set n1 [$ns node]

set n2 [$ns node]
set n3 [$ns node]
set n4 [$ns node]
#tao 3 nut nguon
set s0 [$ns node]
set s1 [$ns node]
set s2 [$ns node]
$s0 shape box
$s1 shape box
$s2 shape box
#tao 3 nut nguon
set d0 [$ns node]
set d1 [$ns node]
set d2 [$ns node]
$d0 shape hexagon
$d1 shape hexagon
$d2 shape hexagon
#tao links giua cac nut
set link [$ns duplex-link $s0 $n0 100kb 10ms SFQ]
set link [$ns duplex-link $s1 $n0 100kb 10ms SFQ]
set link [$ns duplex-link $s2 $n0 100kb 10ms SFQ]
set link [$ns duplex-link $n0 $n1 300kb 10ms SFQ]
set link [$ns duplex-link $n1 $n2 200kb 10ms SFQ]
set link [$ns duplex-link $n1 $n3 200kb 10ms SFQ]
set link [$ns duplex-link $n3 $n4 200kb 10ms SFQ]
set link [$ns duplex-link $n2 $d0 100kb 10ms SFQ]
set link [$ns duplex-link $n4 $d1 100kb 10ms SFQ]
set link [$ns duplex-link $n4 $d2 100kb 10ms SFQ]
#giam sat hang doi tren NAM
$ns duplex-link-op $s0 $n0 queuePos 0.5

$ns duplex-link-op $s1 $n0 queuePos 0.5
$ns duplex-link-op $s2 $n0 queuePos 0.5
$ns duplex-link-op $n0 $n1 queuePos 0.5
$ns duplex-link-op $n1 $n2 queuePos 0.5
$ns duplex-link-op $n1 $n3 queuePos 0.5
$ns duplex-link-op $n3 $n4 queuePos 0.5
$ns duplex-link-op $n2 $d0 queuePos 0.5
$ns duplex-link-op $n4 $d2 queuePos 0.5
$ns duplex-link-op $n4 $d1 queuePos 0.5
#monitor cac hang doi de lay du lieu tinh toan
set qmon [$ns monitor-queue $n0 $n1 [open qm01.out w] 1];
[$ns link $n0 $n1] queue-sample-timeout;
set qmon [$ns monitor-queue $n1 $n2 [open qm12.out w] 1];
[$ns link $n1 $n2] queue-sample-timeout;
set qmon [$ns monitor-queue $n1 $n3 [open qm13.out w] 1];
[$ns link $n1 $n3] queue-sample-timeout;
set qmon [$ns monitor-queue $n3 $n4 [open qm34.out w] 1];
[$ns link $n3 $n4] queue-sample-timeout;
set qmon [$ns monitor-queue $n2 $d0 [open qm34.out w] 1];
[$ns link $n2 $d0] queue-sample-timeout;
set qmon [$ns monitor-queue $n4 $d1 [open qm34.out w] 1];
[$ns link $n4 $d1] queue-sample-timeout;
set qmon [$ns monitor-queue $n4 $d2 [open qm34.out w] 1];
[$ns link $n2 $d2] queue-sample-timeout;
#dat cac node vao vi tri(NAM)
$ns duplex-link-op $s0 $n0 orient right-up
$ns duplex-link-op $s1 $n0 orient right
$ns duplex-link-op $s2 $n0 orient right-down
$ns duplex-link-op $n0 $n1 orient right
$ns duplex-link-op $n0 $n1 orient right

$ns duplex-link-op $n0 $n1 orient right
$ns duplex-link-op $n1 $n2 orient right
$ns duplex-link-op $n1 $n3 orient down
$ns duplex-link-op $n3 $n4 orient right
$ns duplex-link-op $n2 $d0 orient right
$ns duplex-link-op $n4 $d1 orient right
$ns duplex-link-op $n4 $d2 orient right-up
# thiết lập kích thước gói và thời gian đến giữa các gói ngẫu nhiên
set InterArrivalTime1 [new RandomVariable/Exponential]
$InterArrivalTime1 set avg_ [expr 1/$lambda1]
set pktSize1 [new RandomVariable/Exponential]
$pktSize1 set avg_ [expr 100000.0/(8*$mu1)]
set InterArrivalTime2 [new RandomVariable/Exponential]
$InterArrivalTime2 set avg_ [expr 1/$lambda2]
set pktSize2 [new RandomVariable/Exponential]
$pktSize2 set avg_ [expr 100000.0/(8*$mu2)]
set InterArrivalTime3 [new RandomVariable/Exponential]
$InterArrivalTime3 set avg_ [expr 1/$lambda3]
set pktSize3 [new RandomVariable/Exponential]
$pktSize3 set avg_ [expr 100000.0/(8*$mu3)]
#Setup a UDP connection
set udp11 [new Agent/UDP]
$ns attach-agent $s0 $udp11
set null11 [new Agent/Null]
$ns attach-agent $d0 $null11
set udp12 [new Agent/UDP]
$ns attach-agent $s0 $udp12
set null12 [new Agent/Null]
$ns attach-agent $d1 $null12
$ns connect $udp11 $null11

$ns connect $udp12 $null12
$udp11 set fid_ 1
$udp12 set fid_ 1
#Setup a UDP connection
set udp2 [new Agent/UDP]
$udp2 set class_ 2
$ns attach-agent $s1 $udp2
set null3 [new Agent/Null]
$ns attach-agent $d1 $null3
$ns connect $udp2 $null3
$udp2 set fid_ 2
#Setup a UDP connection
set udp3 [new Agent/UDP]
$udp3 set class_ 3
$ns attach-agent $s2 $udp3
set null4 [new Agent/Null]
$ns attach-agent $d2 $null4
$ns connect $udp3 $null4
$udp3 set fid_ 3
#tao process 'finish'
proc finish {} {
global ns nf tf q1 q2 q3 q4
$ns flush-trace
#dong file NAM trace
close $nf
close $tf
close $q1
close $q2
close $q3
close $q4

exec nam out.nam &
exec awk -f test.awk qm01.out > qm01.dat
exec awk -f test.awk qm12.out > qm12.dat
exec awk -f test.awk qm13.out > qm13.dat
exec awk -f test.awk qm34.out > qm34.dat
exec awk -f currentdelayS1_R2.awk out1.tr > currentdelayS1_R2.dat
exec awk -f currentdelayS1_R4.awk out1.tr > currentdelayS1_R4.dat
exec awk -f currentdelayS2_R4.awk out1.tr > currentdelayS2_R4.dat
exec awk -f currentdelayS3_R2.awk out1.tr > currentdelayS3_R2.dat
exec awk -f delaye2e.awk currentdelayS1_R2.dat > delaye2eS1_R2.dat
exec awk -f delaye2e.awk currentdelayS1_R4.dat > delaye2eS1_R4.dat
exec awk -f delaye2e.awk currentdelayS2_R4.dat > delaye2eS2_R4.dat
exec awk -f delaye2e.awk currentdelayS3_R2.dat > delaye2eS3_R2.dat
exec xgraph currentdelayS1_R2.dat currentdelayS1_R4.dat currentdelayS2_R4.dat
currentdelayS3_R2.dat -geometry 800x400 -t "Delay" &
exit 0}

###proc sendpacket11 {}
{global ns udp11
InterArrivalTime1 pktSize1
set time [$ns now]
$ns at [expr $time + [$InterArrivalTime1 value]]
"sendpacket11"
set bytes11 [expr round ([$pktSize1 value])]
$udp11 send $bytes11
}
###
proc sendpacket12 {} {
global ns udp12
InterArrivalTime1 pktSize1

set time [$ns now]
$ns at [expr $time + [$InterArrivalTime1 value]]
"sendpacket12"
set bytes12 [expr round ([$pktSize1 value])]
$udp12 send $bytes12
}

###
proc sendpacket2 {} {
global ns udp2
InterArrivalTime2 pktSize2
set time [$ns now]
$ns at [expr $time + [$InterArrivalTime2 value]]
"sendpacket2"
set bytes2 [expr round ([$pktSize2 value])]
$udp2 send $bytes2
}

##
proc sendpacket3 {}
{global ns udp3
InterArrivalTime3 pktSize3
set time [$ns now]
$ns at [expr $time + [$InterArrivalTime3 value]]
"sendpacket3"
set bytes3 [expr round ([$pktSize3 value])]
$udp3 send $bytes3
}
$ns at 0.0001 "sendpacket11"
$ns at 0.0001 "sendpacket12"

$ns at 0.0001 "sendpacket2"
$ns at 0.0001 "sendpacket3"
$ns at 1000.0 "finish"
$ns run
Để chạy ns:mở terminal,chỉ đường dẫn tới file kịch bản(.tcl),sau đó gõ:ns
filename.tcl.
Mô hình mạng:

Quá trình chạy mô phỏng:

Chúng em đã sử dụng câu lệnh giám sát hàng đợi và ghi dữ liệu ra file .out:
set qmon [$ns monitor-queue $n3 $n4 [open qm34.out w] 1];
[$ns link $n3 $n4] queue-sample-timeout;
Câu lệnh này sẽ giám sát hàng đợi giữa n3 và n4 cứ 1s/1 lần giám sát và ghi
ra file qm34.out.file qm34.out là lưu lại tất cả kết quả của hành động giám sát.sau
đo chúng em sử dụng file awk để tính kết quả trung bình của hàng đợi:
BEGIN { FS = " "} {nl++} {s=s+$5} END {print "average:" s/nl}
Kết quả của chiều dài trung bình hàng đợi được lưu tại file delaye2e.dat,vì
trong mô phỏng có 4 hàng đợi nên sẽ có 4 file trung bình hàng đợi của mỗi hàng.
Để tính trễ truyền trung bình của gói tin thuộc 3 nguồn tin,chúng em sử dụng
awk để lọc ra các nguồn tin riêng từ file out1.tr là file bám viết của tất cả các gói
tin trong quá trình mô phỏng:
BEGIN{tg[50000];tn[50000];tt[50000]}
{if ($8 =="1")
{if (($1=="+") && ($3=="0")){
tg[$12] = $2; }
if (($1=="r") && ($4=="4")){
tn[$12] = $2;
tt[$12] = tn[$12]-tg[$12];
print $12 " "tt[$12] }}}

END{}
$8=”1” tức là lọc ra tất cả các hàng trong file out1.tr mà có giá trị trong cột thứ 8 là
bằng 1(chính là f_id của gói tin)
$1=”+”:gói tin đi vào hệ thống mạng.
$3=”0”:đi vào nút 0.
$1=”r” && $4=”4”:gói được nhận tại nút 4.
Như vậy tất cả gói tin mà có f_id là 1 và thời gian đi ra trừ đi thời gian đi
vào sẽ chính là độ trễ của gói tin.tất cả các độ trễ của từng gói tin sẽ được lưu vào
file currentdelay.dat.Sau đó chúng em tiếp tục viết 1 file awk để tính trung bình
của file vừa có được,từ đó chính là trễ truyền trung bình của các luồng gói tin đến
các đích khác nhau.
Kết quả:
Luồng tin S0 đi từ nút 0 tới nút 4: average:0.123496.
Luồng tin S0 đi từ nút 0 tới nút 2: average:0.085448.
Luồng tin S1 đi từ nút 0 tới nút 4: average:0.294241.
Luồng tin S2 đi từ nút 0 tới nút 2: average:0.255364.
Chiều dài hàng đợi trung bình chúng em chỉ tính trên linh từ N0-N1 bởi trên link
này mới thực sự là hàng đợi M/M/1:
File awk tính chiều dài hàng đợi trung bình từ file qm01.out:
BEGIN { FS = " "} {nl++} {s=s+$5} END {print "average:" s/nl}
Average: 11.0937gói tin.
Sai lệch so với lý thuyết cỡ 1 gói tin.
Vẽ xgraph đồ thị trễ truyền của các luồng tin:

III.2,Trường hợp có lỗi:
Kịch bản mô phỏng tương tự như phần không có lỗi tuy nhiên chúng em
chèn thêm module lỗi vào tất cả các link với xác suất lỗi cố định là 0.02 và để mô
phỏng cho việc truyền lại,chúng em sét lamda(tiến trình đến )1 giá trị mới là
lamda1với công thức:lamda1=lamda/(1-0,02):
#Set error model on link s2 to n0

set loss_module [new ErrorModel]
$loss_module set rate _0.02
$loss_module ranvar [new RandomVariable/Uniform]
$loss_module drop-target [new Agent/Null]
$ns lossmodel $loss_module $s2 $n0
Tạo các file tính toán tương tự như trên,chúng em thu được kết quả mô phỏng như
sau:

Đồ thị tương đối giống với trường hợp không có lỗi tuy nhiên trung bình về
độ trễ của các luồng tin đã tăng lên(do mất thời gian truyền lại):
Luồng tin S0 đi từ nút 0 tới nút 4: average:0.124269.
Luồng tin S0 đi từ nút 0 tới nút 2: average:0.0861125.
Luồng tin S1 đi từ nút 0 tới nút 4: average:0.303032.
Luồng tin S2 đi từ nút 0 tới nút 2: average:0.263314.
Chiều dài hàng đợi trung bình:
Average:15.0223 gói tin.




C . KẾT LUẬN
Với những kiến thức được cung cấp về lý thuyết hàng đợi, tiến trình Poisson
kết hợp với kết quả mô phỏng, có thể kết luận có sự tồn tại sai khác giữa lý thuyết
và mô phỏng thực tế, nhưng với một lượng có thể chấp nhận được.
Hoàn thành bài tập lớn này, chúng em xin chân thành cảm ơn sự hướng dẫn
tận tình của TS. Nguyễn Tài Hưng, đã giảng dạy lý thuyết cũng như trả lời các thắc
mắc bài tập lớn nhiệt tình, chu đáo. Hẳn trong bài còn có những điểm chưa được
tối ưu, chúng em rất mong nhận được những nhận xét của thầy để chúng em có thể
hoàn thiện hơn.


×