TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA
ĐIỆN TỬ
VIỄN
THÔNG
B
ÁO
CÁO
MÔ HÌNH
HÓA VÀ MÔ
PHỎNG
Đ
Ề
T
À
I
THỰC HÀNH MÔ
PHỎNG VÀ PHÂN
TÍCH MÔ
HÌNH
MẠNG
1
TRÊN
NS-2
GVHD: TS.LÊ ANH
NGỌC
Lớp: Đ8-ĐTVT1
Sinh viên thực hiện:
Trương Quốc Đạt
MSV: 1381510009
2
MỤC LỤC
LỜI MỞ ĐẦU.....................................................................................3
I.
CHUẨN BỊ VÀ CÀI ĐẶT PHẦN MỀM ................................4
II. TẠO KỊCH BẢN VÀ CHẠY MÔ PHỎNG.............................7
III. PHÂN TÍCH..............................................................................12
1.
Delay......................................................................................................13
2.
3.
Throughput.............................................................................................17
Nhận xét.................................................................................................19
IV.
ĐÁNH GIÁ KẾT QUẢ..........................................................20
3
LỜI MỞ ĐẦU
Ngày nay, lĩnh vực mạng và di động có sự bùng nổ rất lớn về cả số lượng và
chất lượng. Đi kèm với điều đó, chúng ta phải liên tục nâng cấp cơ sở hạ tầng hiện
có cũng như xây dựng những mô hình mạng mới.
Hiện nay, khi chúng ta nghiên cứu một dự án chúng ta phải thực hiện nó rồi
từ kết quả thu được chúng ta mới nhận xét, đánh giá để từ đó đưa ra những chỉnh
sửa, cải tiến để tối ưu chúng. Tuy nhiên, không phải dự án nào cũng có thể thực
hiện dễ dàng do nhiều yếu tố như chi phí, cơ sở hạ tầng… . Ngoài ra,việc thực hiện
đi thực hiện lại các phương án để tìm ra phương án tốt nhất cũng không diễn trong
thời gian ngắn, nó có thể mất vài tuần hoặc lâu hơn. Mặt khác, khi chúng ta nghiên
cứu, thiết kế một mô hình mạng cũng rất tốn kém và mất nhiều thời gian để có
được một mô hình với kết quả như mong muốn.
Từ những khó khăn trên, việc xây dựng các các mô hình và mô phỏng chúng
là một điều tất yếu. Nó có thể khắc phục những nhược điểm về thời gian, chí phí,
thu thập dữ liệu… so với hệ thống thực. Chúng ra có thể dễ dàng thực hiện lại
nhiều lần, thay đổi các yếu tố và đánh giá, so sánh những thay đổi đó một cách dễ
dàng để từ đó đưa ra các giải pháp hợp lý.
Dưới sự hướng dẫn của giảng viên T.s Lê Anh Ngọc, sau đây là những kiến
thức em đã tích lũy được sau khi kết thúc môn học: Mô hình hóa và mô phỏng.
4
I.
CHUẨN BỊ VÀ CÀI ĐẶT PHẦN MỀM
Để thực hiện mô hình hóa và mô phỏng, em sử dụng phần mềm NS-2. NS-2
là phần mềm mô phỏng mạng điều khiển sự kiện riêng rẽ hướng đối tượng, được
phát triển tại UC Berkely, viết bằng ngôn ngữ C++ và OTcl. NS rất hữu ích cho
việc mô phỏng mạng diện rộng (WAN) và mạng local (LAN). NS-2 là phần mềm
mã nguồn mở chạy trên nền tảng *nix. Để NA-2 có thể chạy trên nền tảng Window
thì chúng ta phải sử dụng một phần mềm tạo môi trường Linux, ở đây tôi sử dụng
phần mềm Cygwin trên hệ điều hành Windown 7.
Trước tiên, chúng ta cần cài đặt Cygwin và NS-2. Đây là những file cần thiết
để cài đặt.
Hình 1.1 Các file cần thiết để cài đặt NS-2
5
Đây là giao diện của môi trường Cygwin
Hình 1.2. Giao diện của Cygwin
Tiếp theo, chúng ta cài đặt NS-2. Sau khi cài đặt xong, vào thư mục home trong
thư mục cài đặt, ta sẽ thấy 2 thư mục, một là Noureddine, đây là thư mục lưu trữ ns-2, hai
là thư mục mà em đặt tên là Dat, đây là thư mục mà con trỏ đầu tiên của Cygwin trỏ tới,
nơi chúng ta sẽ lưu trữ các kịch bản mô phỏng.
Hình 1.3. Cây thư mục chứa NS-2 và kịch bản lưu trữ
6
Khi mở cửa sổ XWin Server như hình vẽ ở trên thì con nhắc của nó là $, nếu cài
đặt s-2 thành công thì khi ta gõ ns vào thì con nhắc sẽ chuyển thành % như sau:
Hình 1.4. Giao diện cửa sổ Xwin sever
Sau khi có được kết quả như vậy là chúng ta đã cài đặt thành công và sẵn sàng
thực hiện mô phỏng. Để có thể thiết kế một mô hình thì chúng ta có thể thực hiện
ngay trên cửa sổ xterm của Xwin Server, tuy nhiên làm như vậy sẽ rất dễ bị nhần
lẫn và khó chỉnh sửa, cho nên tốt hơn chúng ta nên soạn thảo kịch bản đó ra một
file có đuôi là .tcl rồi thực hiện chạy trên ns-2 thông qua cau lệnh ns file_name.
7
II.
TẠO KỊCH BẢN VÀ CHẠY MÔ PHỎNG
Tạo kịch bản theo ví dụ trong chương 4 sách giáo trình. Sử dụng chương trình
soạn thảo Notepad và ngôn ngữ Tcl để viết kịch bản mô phỏng.
Sau đây là các bước tạo một kịch bản mô phỏng NAM(cụ thể là ví dụ OTcl
trong giáo trình:
Bước 1: Sử dụng Notepad và ngôn ngữ Tcl để xây dựng kịch bản mô phỏng.
nội dung kịch bản như sau:
#Create a simulator object
set ns [new Simulator]
#Define different colors for data flows (for NAM)
$ns color 1 Blue
$ns color 2 Red
#Open the NAM trace file
set nf [open quoc_dat.nam w]
$ns namtrace-all $nf
set nt [open quoc_dat.tr w]
$ns trace-all $nt
#Define a 'finish' procedure
proc finish {} {
global ns nf nt
$ns flush-trace
#Close the NAM trace file
close $nf
close $nt
#Execute NAM on the trace file
exec nam quoc_dat.nam &
exit 0
}
#Create four nodes
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
8
#Create links between the nodes
$ns duplex-link $n0 $n2 2Mb 10ms DropTail
$ns duplex-link $n1 $n2 2Mb 10ms DropTail
$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail
#Set Queue Size of link (n2-n3) to 10
$ns queue-limit $n2 $n3 10
#Give node position (for NAM)
$ns duplex-link-op $n0 $n2 orient right-down
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right
#Monitor the queue for link (n2-n3). (for NAM)
$ns duplex-link-op $n2 $n3 queuePos 0.5
#Setup a TCP connection
set tcp [new Agent/TCP]
$tcp set class_ 2
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
$tcp set fid_ 1
#Setup a FTP over TCP connection
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP
#Setup a UDP connection
set udp [new Agent/UDP]
$ns attach-agent $n1 $udp
set null [new Agent/Null]
$ns attach-agent $n3 $null
$ns connect $udp $null
$udp set fid_ 2
#Setup a CBR over UDP connection
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set type_ CBR
9
$cbr set packet_size_ 1000
$cbr set rate_ 1mb
$cbr set random_ false
#Schedule events for the CBR and FTP agents
$ns at 0.1 "$cbr start"
$ns at 1.0 "$ftp start"
$ns at 4.0 "$ftp stop"
$ns at 4.5 "$cbr stop"
#Detach tcp and sink agents (not really necessary)
$ns at 4.5 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n3 $sink"
#Call the finish procedure after 5 seconds of simulation time
$ns at 5.0 "finish"
#Print CBR packet size and interval
puts "CBR packet size = [$cbr set packet_size_]"
puts "CBR interval = [$cbr set interval_]"
#Run the simulation
$ns run
10
Bước 2: Lưu file dưới tên: quoc_dat.tcl ở thư mục sau:
Hình 2.1. File lưu kịch bản
Bước 3: Chạy mô phỏng kịch bản, ta được Ta được file mô phỏng , ta thu
được quả như hình sau:
Hình 2.2. Kết quả mô phỏng
11
Sau khi chạy mô phỏng, ở File home, ta thu được 2 file: quoc_dat.tr và
quoc_dat.nam. Đây là kết quả được lưu lại sau khi chạy kịch bản.
Hình 2.3. File lưu kết quả sau khi chạy mô phỏng
Đó là toàn bộ quá trình để xây dựng, mô phỏng và kết quả thu được khi ta mô
phỏng một kịch bản.
12
III. PHÂN TÍCH KẾT QUẢ
Sử dụng ngôn ngữ AWK để phân tích hiệu quả trong việc truyền dữ liệu. Hai
thông số đáng quan tâm nhất là Delay (độ trễ của các gói tin) và Through put (tốc
độ nhận dữ liệu tại nơi gói tin đến) để đánh giá chất lượng đường truyền , ngoài ra
còn có Packet loss, fitter..
Khi phân tích chúng ta cần chú ý đến các thông số sau:
Độ trễ trung bình (Delay)
Là khoảng thời gian trung bình truyền 1 gói tin từ node nguồn đến khi node
đích nhận được gói tin đó, đơn vị là s.
Chúng ta cần quan tâm đến độ trễ trung bình theo từng luồng
Tốc độ nhận tin (Throughput)
Là khả năng truyền tin từ nguồn đến đích trong một đơn vị thời gian, đơn bị là
bps.
Một sự kiện được mô tả trong file trace có cấu trúc như sau:
13
1. DELAY (Độ trễ trung bình)
Với việc phân tích độ trễ cho mô hình, do mỗi gói có độ trễ khác nhau nên ta
cần tính tổng tích lũy độ trễ của tất cả các gói, với độ trễ trung bình thì ta lấy tổng
tích lũy độ trễ chia cho tổng số gói tin. Để lấy được độ trễ từ file trace, ta lấy thời
điểm gói tin đến node đích trừ đi thời điểm gói tin đó được gửi đi từ node nguồn.
Để tính độ trễ cho từng luồng, chúng ta cần lọc ra các sự kiện với điều kiện về 12
luồng. Ví dụ ta muốn tính độ trễ của một gói tin có id là 1 của luồng 1 đi từ node 0
đến node 3 thì ta cần lấy ra thời gian xảy ra sự kiện gửi và nhận của gói tin có id là
1 với các điều kiện là sự kiện xảy ra là “+” và “r”, luồng là 1, fromnode là 0 và
tonode là 3. Để biết được số gói tin bị mất thì tương ứng với sự kiện “d”.
Nội dung của chương trình như sau:
BEGIN{
for(i in time_sent_1){
time_sent_1[i] = 0
}
for(i in time_recv_1){
time_recv_1[i] = 0
}
for(i in time_sent_2){
time_sent_2[i] = 0
}
for(i in time_recv_2){
time_recv_2[i] = 0
}
delay_1 = 0
delay_tb_1 = 0
tong_goi_1 = 0
mat_goi_1 = 0
14
delay_2 = 0
delay_tb_2 = 0
tong_goi_2 = 0
mat_goi_2 = 0
delay = 0
delay_tb = 0
tong_goi = 0
mat_goi = 0
}
{
event = $1
time = $2
from_node = $3
to_node = $4
fid = $8
id_pkt = $12
if( event == "+" && fid == 1 && from_node == 0){
time_sent_1[id_pkt] = time
}
if( event == "r" && fid == 1 && to_node == 3){
time_recv_1[id_pkt] = time
tong_goi_1 ++
}
if( event =="d" && fid == 1){
mat_goi_1 ++
15
}
if( event == "+" && fid == 2 && from_node == 1){
time_sent_2[id_pkt] = time
}
if( event == "r" && fid == 2 && to_node == 3){
time_recv_2[id_pkt] = time
tong_goi_2 ++
}
if( event =="d" && fid == 2){
mat_goi_2 ++
}
}
END{
for(i in time_recv_1){
delay_1 += time_recv_1[i] - time_sent_1[i]
}
for(i in time_recv_2){
delay_2 += time_recv_2[i] - time_sent_2[i]
}
delay = delay_1 + delay_2
tong_goi = tong_goi_1 + tong_goi_2
delay_tb = delay / tong_goi
mat_goi = mat_goi_1 + mat_goi_2
printf("------------- Toan bo qua trinh mo phong ---------------\n")
printf("Tong delay: %g s \n", delay)
printf("Tong so goi: %g \n", tong_goi)
printf("Delay trung binh: %g ms/goi \n", delay_tb*1000)
16
printf("So goi mat: %g \n", mat_goi)
delay_tb_1 = delay_1 / tong_goi_1
printf("------------- Luong 1 ---------------\n")
printf("Tong delay: %g s \n", delay_1)
printf("Tong so goi: %g \n", tong_goi_1)
printf("Delay trung binh: %g ms/goi \n", delay_tb_1*1000)
printf("So goi mat: %g \n", mat_goi_1)
delay_tb_2 = delay_2 / tong_goi_2
printf("------------- Luong 2 ---------------\n")
printf("Tong delay: %g s \n", delay_2)
printf("Tong so goi: %g \n", tong_goi_2)
printf("Delay trung binh: %g ms/goi \n", delay_tb_2*1000)
printf("So goi mat: %g \n", mat_goi_2)
}
Chạy chương trình trên Xwin Sever, ta thu được bảng kết quả delay như sau:
Kết
Hình 3.1.
quả delay
17
2. THROUGHPUT (Tốc độ nhận tin).
Với việc phân tích Throughput, do mỗi gói tin có size khác nhau nên ta cần tính
tổng tích lũy khối lượng tin truyền được. Để tính Throughput cho từng luồng, ta
cần tính dữ liệu truyền được của luồng 1, sau đó chia cho thời gian hoạt động của
luồng 1, tương tự với luồng 2.
Nội dung của chương trình như sau:
BEGIN{
data = 0
throughput =
time = 4.4
data_1 = 0
throughput_1 = 0
time_1 = 3
data_2 = 0
throughput_2 = 0
time_2 = 4.4
}{
event = $1
to_node = $4
fid = $8
size_pkt = $6
if(event == "r" && fid == 1 && to_node == 3){
data_1 += size_pkt
}
if(event == "r" && fid == 2 && to_node == 3){
data_2 += size_pkt
}
}
18
END{
data = data_1 + data_2
throughput = data / time
printf("____ Toan bo qua trinh mo phong ____\n")
printf("Tong du lieu truyen duoc: %g Mb \n", data * 8 /1000000)
printf("Throughput = %g Mbps \n", throughput * 8 / 1000000)
throughput_1 = data_1 / time_1
printf("______ Luong 1 _____\n")
printf("Tong du lieu truyen duoc: %g Mb \n", data_1 * 8 /1000000)
printf("Throughput = %g Mbps \n", throughput_1 * 8 / 1000000)
throughput_2 = data_2 / time_2
printf("_______ Luong 2 ______\n")
printf("Tong du lieu truyen duoc: %g Mb \n", data_2 * 8 /1000000)
printf("Throughput = %g Mbps \n", throughput_2 * 8 / 1000000)
}
19
Chạy trên Xwin Sever, ta thu được kết quả:
Hình 3.2. Kết quả thông số throughput
3. NHẬN XÉT
Delay và throughput phụ thuộc vào nhiều yếu tố như băng thông đường truyền,
trễ truyền, hàng đợi,… Vậy khi ta thay đổi một trong các thông số này thì chúng sẽ
biến đổi như thế nào? Ở đây ta thay đổi băng thông của liên kết 2-3, khi đó ta được
sự thay đổi như sau:
20
- Xem thêm -