Thứ Ba, 11 tháng 2, 2014

Bao cao nhom bài tập lớn mô phỏng rada

Các lệnh cơ bản:
1. Tạo biến mới
Để tạo một biến mới ta dùng lệnh set. Có 3 cách dùng lệnh set như sau:
set a 0 : Tạo một biến a và gán cho a giá trị bằng 0.
set b $a: Tạo biến b và gán cho b giá trị bằng giá trị của biến a
set a [] : Tạo biến a và gán cho a giá trị của một hàm ở trong “[]”.
set a [ new Node]: Tạo biến a và thiết lập a là một node. Node là một
đối tượng ở trong NS2
2. Kiểu biến
Chú ý rằng ở trong Tcl cũng như trong NS2 không có kiểu của biến.
Biến là string hay interger phụ thuộc vào giá trị ta gán cho biến. Ví dụ:
set a [expr 1/20] : a có giá trị bằng 0.
set a [expr 1.0/20.0] : a có giá trị chính xác là 0.05
Điều này rất quan trọng trong quá trình lập trình cho NS2.
3. Lệnh puts
Lệnh puts dùng để ghi giá trị ra bên ngoài. Trong NS2 thì lệnh puts sẽ ghi
ra bảng lệnh terminal. Mỗi lần lệnh puts được gọi, nó sẽ tạo ra một dòng
mới. Ngoài ra lệnh puts còn được dùng để ghi các giá trị lên một biến được
dùng để ghi giá trị ra ngoài (trong nam hoặc graph) đã được định nghĩa từ
trước. Ví dụ:
set nf [open out.nam w]n
puts $nf “$a”
4. Lệnh if
Cấu trúc lệnh if cũng giống như trong c++:
if{expression} {
<execute some comands>
} else{
<execute some comand>
}
5. Vòng lặp for
for{ set i 0}{$i < 5} {incr i}{
<execute some comands>
}
6. Chương trình con
Trong Tcl cũng như trong NS2, để chú thích ta sử dụng dấu # ở đầu
dòng. Điều này sẽ làm cho chương trình thoáng, gọn gang hơn, dễ đọc và dễ
sửa sai.
5
Cấu trúc của một chương trình con:
proc test2 { par1, par2, par3…}{
global var1, var2, var3….
<some command>
return $something
}
Chú ý là lệnh return có thể có hoặc không.
1. Phần mềm mô phỏng Nam
Ở đây chúng ta chỉ nói đến một số lệnh cơ bản thường để sử dụng Nam
trong phần mềm mô phỏng mạng NS2. Chú ý rằng nếu chạy trực tiếp
chương trình Nam thì các lệnh có thể sẽ khác đi.
- Tạo file theo dõi hệ thống phục vụ cho việc mô phỏng:
set nf [open out.nam w]
$ns namtrace-all $nf
- Gọi phần mềm mô phỏng Nam. Lệnh này thường được đặt trong
chương trình con “finish”
exec nam out.nam &
Lệnh này sẽ gọi chương trình Nam và chạy nó dựa vào file theo theo
dõi out.nam
- Xác định vị trí các node trong cửa sổ Nam
$ns duplex-link-op $node1 $node2 orient right
Chú ý rằng ở câu lệnh trên right là dùng để chỉ phương hướng. Hoàn
toàn có thể thay right bằng left, right – down, down, left – down, v.v
- Gán màu cho các gói tin khi chạy chương trình mô phỏng
$ns color 1 red # Gán cho các gói tin thuộc luồng 1 màu đỏ
- Gán màu cho node
$node color red # có thể thay red bằng blue, green, yellow……
- Gán hình dạng cho các node
$node shape box
- Gán màu sắc cho đường link
$ns duplex-link-op $node1 $node2 “green”
2. Theo dõi sự kiện
2a. Các lệnh theo dõi cơ bản
Các lệnh cơ bản dùng để theo dõi các sự kiện trên hệ thống:
- Cân bằng cấp phát bộ đệm cho tất cả các file theo dõi:
$ns flush-trace
- Tạo một đối tượng theo dõi:
6
Cấu trúc: create-trace {type filename scr dst}
Ví dụ : $ns create-trace Drop $tf $n0 $n2
- Theo dõi tất cả các sự kiện trên hệ thống:
$ns trace-all $tf
2b. Cấu trúc file trace
Mỗi một lệnh theo dõi trong các lệnh trên sẽ có các cấu trúc đầu ra
khác nhau. Ở đây chúng ta chỉ xét đến cấu trúc file đầu ra của lệnh “trace-
all”. Với các công cụ phân tích file dữ liệu có sẵn như awk, grep, perl,….
Chúng ta có thể có được tất cả các thông tin mong muốn trong quá trình hệ
thống mạng được mô phỏng bằng cách phân tích file “trace-all”.
File trace được tổ chức trong 12 trường như trong hình dưới
1. Trường đầu tiên mô tả loại sự kiện, được cho bởi một trong 4 kí tự r, +,
-, d tương ứng với các trường hợp đã nhận (ở đầu ra của link), đã xếp vào
trong hàng đợi (enqueued), rời khỏi hàng đợi (dequeued), đã bị hủy
(dropped)
2. Trường thứ hai biểu diễn thời gian sự kiện xuất hiện.
3. Thông báo node input của link nơi sự kiện xảy ra.
4. Thông báo node ouput của link nơi sự kiện xảy ra.
5. Loại gói tin ( ví dụ TCP, CBR, tên loại tương ứng với tên của
application mà chúng ta đã đặt, ví dụ trong phần trước thì application TCP
được gọi là “tcp”).
6. Kích cỡ gói tin.
7. Một vài loại cờ. Chúng ta sẽ xét ở phần sau.
8. Flow id (fid) của Ipv6 mà người dùng thiết lập cho mỗi luồng (flow) tại
đầu vào OTcl cript. Ta có thể dùng trường này để phân tích kết quả, cũng
như để thiết lập màu sắc cho các luồng trong mô phỏng NAM.
9. Địa chỉ của nguồn, nơi phát gói tin, được cho dưới dạng “node.port”.
7
10. Địa chỉ của nguồn đích, nơi nhận gói tin, được cho với cùng dạng như
trên.
11. Số chuỗi các gói tin của một lớp giao thức mạng. Mặc dù thành phần
UDP trong mạng thực tế không có số các chuỗi nhưng ns vẫn giữ lại các vết
(track) để phân tích kết quả.
12. Trường cuối cùng ghi chỉ số id của gói tin (unique id of packet).
IV, Nội dung chương trình mô phỏng:
Mở đầu một chương trình mô phỏng luôn luôn là một lệnh tạo một đối tượng
Simulator:
set ns [new Simulator]
-gán màu cho 2 luồng dữ liệu:
$ns color 1 Blue
$ns color 2 Red
-Tạo file lưu cửa sổ tắc nghẽn
set cwnd [open cwnd.tr w]
- Tạo file trace lưu tất cả các thông số về mạng đang xét
set tracefile [open TraceAll.tr w]
$ns trace-all $tracefile

Tiếp theo ta thiết lập file ghi lại các thông tin theo dõi phục vụ cho việc chạy
Nam và các lệnh để tạo ra các node:
set nf [open out.nam w]
$ns namtrace-all $nf
-Tạo 2 file chứa thông tin băng thông:
set f1 [open khathong1.tr w]
set f2 [open khathong2.tr w]
- Xác định phương thức định tuyến cho mạng :
$ns rtproto Session
Tạo các nút:
set s1 [$ns node]
set s2 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
8
set n4 [$ns node]
set d0 [$ns node]
-Tạo liên kết giữa các nút:
$ns duplex-link $s1 $n1 100Mb 10ns DropTail
$ns duplex-link $s2 $n1 100Mb 10ns DropTail
$ns duplex-link $n1 $n2 1.5Mb 10ns DropTail
$ns duplex-link $n1 $n3 20Kb 10ns DropTail
$ns duplex-link $n1 $n4 1.5Mb 10ns DropTail
$ns duplex-link $n2 $n3 1Mb 10ns DropTail
$ns duplex-link $n4 $n3 1.5Mb 10ns DropTail
$ns duplex-link $n3 $d0 100Mb 10ns DropTail
-Giới hạn kích thước hàng đợi giữa các liên kết:
$ns queue-limit $n1 $n2 50
$ns queue-limit $n2 $n3 50
$ns queue-limit $n3 $d0 50
$ns queue-limit $n1 $n4 50
$ns queue-limit $n4 $n3 50
$ns queue-limit $n1 $n3 50
$ns queue-limit $s1 $n1 50
$ns queue-limit $s2 $n1 50
-Xắp sếp vị trí các nút trong NAM
$ns duplex-link-op $s1 $n1 orient right-down
$ns duplex-link-op $s2 $n1 orient right-up
$ns duplex-link-op $n1 $n2 orient right-up
$ns duplex-link-op $n2 $n3 orient right-down
$ns duplex-link-op $n3 $d0 orient right
$ns duplex-link-op $n1 $n4 orient right-down
$ns duplex-link-op $n4 $n3 orient right-up
$ns duplex-link-op $n1 $n3 orient right
-Đặt nhãn cho các nút:
$s1 label " Source 1 "
$s2 label " Source 2"
$d0 label " Destination "
$n1 label " n1"
$n4 label " n2 "
$n3 label " n3"
$n2 label " n4 "
-Đặt kích thước băng thông cho các liên kết:
$ns duplex-link-op $n1 $n2 label "1.5Mb"
$ns duplex-link-op $n2 $n3 label "1.5Mb"
$ns duplex-link-op $n1 $n4 label "1.5Mb"
$ns duplex-link-op $n4 $n3 label "1Mb"
$ns duplex-link-op $n1 $n3 label "20Kb"
-Tạo cost cho các liên kết theo băng thông:
$ns cost $n1 $n2 1
$ns cost $n1 $n3 77
$ns cost $n1 $n4 1
$ns cost $n2 $n3 2
9
$ns cost $n3 $n4 1
- Tạo ra các nguồn lưu lượng :
+ Nguồn lưu lượng tcp và gắn mã luồng 1 cho nguồn lưu lượng này :
set tcp [new Agent/TCP]
$ns attach-agent $s1 $tcp
set sink2 [new Agent/TCPSink/DelAck]
$ns attach-agent $d0 $sink2
$ns connect $tcp $sink2
$tcp set fid_ 1
$tcp set packetSize_ 1400
-Cài đặt ứng dụng FTP cho TCP
set ftp [new Application/FTP]
$ftp attach-agent $tcp
$ftp set type_ FTP
-Thiết lập UDP và kết nối
set udp [new Agent/UDP]
$ns attach-agent $s2 $udp
set sink1 [new Agent/LossMonitor]
$ns attach-agent $d0 $sink1
$ns connect $udp $sink1
$udp set class_ 2
-Cài đặt ứng dụng CBR cho UDP
set cbr [new Application/Traffic/CBR]
$cbr attach-agent $udp
$cbr set type_ CBR
$cbr set packet_size_ 1024
$cbr set rate_ 1Mb
- Thủ tục record với chức năng thu thập số liệu về băng thông và cửa sổ tắc
nghẽn :
proc record {} {
global tcp cwnd sink1 sink2 f1 f2
set ns [Simulator instance]
set time 0.5
#so byte nhan duoc tu moi luong
set bw1 [$sink1 set bytes_]
set bw2 [$sink2 set bytes_]
#cai dat thoi gian hien tai
set now [$ns now]
#tinh toan bang thong va ghi no vao file
puts $f1 "$now [expr $bw1/$time*8/1000000]"
puts $f2 "$now [expr $bw2/$time*8/1000000]"
#Reset gia tri sink
10
$sink1 set bytes_ 0
$sink2 set bytes_ 0

set cwnd0 [$tcp set cwnd_]
set now [$ns now]
puts $cwnd "$now $cwnd0"
$ns at [expr $now+$time] "record"
}
- Thủ tục finish với chức năng ghi dữ liệu ra các file trace, gọi các lệnh mô
phỏng và vẽ đồ thị :
proc finish {} {
global ns nf cwnd f1 f2 tracefile losspacket_1 losspacket_2
$ns flush-trace
#Close the NAM trace file
close $nf
close $tracefile
close $f1
close $f2
close $cwnd
close $losspacket_1
close $losspacket_2
## Luu thong tin mat goi tai node2 cua luong cbr vao file node_2.dat
exec awk -f node_1.awk TraceAll.tr >node_1.dat
exec awk -f node_2.awk TraceAll.tr >node_2.dat
exec nam out.nam &
exec xgraph cwnd.tr -bg white -zg blue -t "Cua so tac nghen" &
exec xgraph khathong1.tr khathong2.tr -bg white -y "Bandwith (Mbps)" -x "Time
(s)" -t "Do thi kha thong" -geometry 800x400 &

exec xgraph node_1.dat node_2.dat -bg white -t "Ti le mat goi cua luong CBR o
node_1 node_2" -x "Time (s)" -y "%" -geometry 800x400 &


exit 0
}
- Sau khi đã xây dựng xong cấu trúc của mạng cũng như các phương thức
thu thập số liệu, ta đặt thời gian cho các sự kiện :
#thiet lap kich ban mo phong
$ns at 0.0 "record"
11
$ns at 0.1 "$ftp start"
$ns at 10.1 "$cbr start"
$ns at 130.0 "$ftp stop"
$ns at 140.0 "$cbr stop"
#goi thu tuc "finish" sau 150s
$ns at 150.0 "finish"
-Chạy mô phỏng
$ns run
V, Kết quả mô phỏng :
1, Mô hình thu được trên NAM :
a, Khi tốc độ luồng udp la 1MB
- Mô hình mô phỏng
mô phỏng trước 10s( dùng công cụ edit cua Nam đễ sắp xếp)
- mô phỏng sau 10.1s:
12
13

b,Khi tốc độ luồng udp1 là 1.5MB
mô phỏng sau 10.1s:

14

Không có nhận xét nào:

Đăng nhận xét