Tải bản đầy đủ (.docx) (41 trang)

MÔ PHỎNG MẠNG DÙNG NS2

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 (707.52 KB, 41 trang )

Chương 1. MÔ PHỎNG MẠNG DÙNG NS2
1.1 Công cụ mô phỏng NS2
1.1.1 Tổng quan về NS2
NS2- Network Simulator Version 2: là phần mền 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. Được sử dụng rất phổ biến trong các nghiên cứu khoa học về mạng ( rất hữu
ích cho việc mô phỏng mạng diện rộng WAN và mạng local LAN.
Mục đích của NS-2 là tạo ra một môi trường giả lập cho việc nghiên cứu, kiểm tra,
thiết kế các giao thức, các kiến trúc mới, so sánh các giao thức và tạo ra các mô hình
mạng phức tạp.
Phiên bản thứ nhất của NS được phát triển vào năm 1995 và phiên bản thứ hai ra
đời năm 1996. NS-2 là phần mền mã nguồn mở có thể chạy được trong môi trường
Linux và Window.
1.1.2 Kiến trúc của NS2
NS thực thi các giao thức mạng như giao thức điều khiển truyền tải (TCP) và
thức gói thường dùng (UDP), các dịch vụ nguồn lưu lượng như giao thức truyền tập tin
(FTP), tốc độ bit cố định (CBR) và tốc độ bit thay đổi (VBR).
Các kỹ thuật quản lý hàng đợi như Vào trước Ra trước (Drop Tail), Dò sớm ngẫu
nhiên (RED) và CBQ, các thuật toán định tuyến như Dijkstra…NS cũng thực thi
multicasting và vài giao thức lớp Điều khiển truy cập đường truyền (MAC) đối với mô
phỏng LAN.
Hình 2. Mô hình đơn giản của NS
1
1
Otcl Kịch bản OTcl
Simulation Program Chương trình Mô phỏng
OTcl Bộ biên dịch Tcl mở rộng hướng đối tượng
NS Simulation Library Thư viện mô phỏng NS
Event Scheduler Objects Các đối tượng Bộ lập lịch sự kiện
Network Component Objects: Các đối tượng Thành phần mạng
Network Setup Helping Modules: Các modun Trợ giúp Thiết lập mạng


Plumbling Modules Các modun Plumbling
Simulation Results Các kết quả Mô phỏng
Analysis Phân tích
NAM Network Animator Minh họa Mạng NAM
NS-2 bao gồm:
 Các đối tượng Bộ lập lịch sự kiện
 Các đối tượng Thành phần mạng
 Các modun trợ giúp thiết lập mạng (modun Plumbing)
Để sử dụng NS-2, user lập trình bằng ngôn ngữ kịch bản OTcl. User có thể thêm
các mã nguồn Otcl vào NS-2 bằng cách viết các lớp đối tượng mới trong OTcl. Những
lớp này khi đó sẽ được biên dịch cùng với mã nguồn gốc.
Kịch bản OTcl có thể thực hiện những việc sau:
 Khởi tạo Bộ lập lịch sự kiện
 Thiết lập Mô hình mạng dùng các đối tượng Thành phần mạng
 Báo cho nguồn traffic khi nào bắt đầu truyền và ngưng truyền packet trong Bộ
lập lịch sự kiện.
Bộ lập lịch sự kiện trong NS2 thực hiện những việc sau:
 Tổ chức bộ định thời mô phỏng
 Hủy các sự kiện trong hàng đợi sự kiện
 Triệu gọi các Thành phần mạng trong mô phỏng
Phụ thuộc vào mục đích của User đối với kịch bản mô phỏng OTcl mà kết quả mô
phỏng có thể được lưu trữ như file trace.
 File name trace ( file.nam) được dùng cho công cụ Minh họa mạng Nam
2
2
 File Trace (file.tr) được dùng cho công cụ Lần vết và Giám sát Mô phỏng
XGRAPH hay TRACEGRAPH
Hình 2. Luồng các sự kiện cho file Tcl chạy trong Nam
Trong mô phỏng mạng dùng NS2 ta sử dụng:
 NAM Visual Simulation: Mô phỏng ảo NAM

 Tracing and Monitoring Simulation: Mô phỏng lần vết và Giám sát
Tcl
OTclOTcl
TclCLTclCL
ns-2
E
v
e
n
t

S
c
h
e
d
u
l
e
r
Network
Components
E
v
e
n
t

S
c

h
e
d
u
l
e
r
Network
Components
C/C++
Hình 2. Kiến trúc của NS-2
Hình trên biểu diễn kiến trúc của NS-2. User có thể tưởng tượng mình đang đứng
ở góc trái dưới, thiết kế và chạy các mô phỏng trong Tcl. Tcl dùng các đối tượng mô
phỏng trong OTcl. Các đối tượng Bộ lập lịch sự kiện và các đối tượng thành phần mạng
thực thi bằng C++ và sẵn có cho OTcl qua một liên kết OTcl. Liên kết OTcl này được
thực thi dùng TclCL. Tất cả đã làm nên NS, bộ biên dịch Tcl mở rộng hướng đối tượng
và các thư viện mô phỏng mạng.
 NS sử dụng hai ngôn ngữ lập trình: Ngôn ngữ kịch bản OTcl và ngôn ngữ lập
trình hệ thống C++.
3
3
 NS là tầng biên dịch Tcl để chạy các kịch bản Tcl
 Bằng cách sử dụng C++/OTcl, bộ mô phỏng mạng phải hoàn toàn là hướng đối
tượng
Hình 2. TclCL hoạt động như liên kết giữa A và B
TclCL là ngôn ngữ được sử dụng để cung cấp liên kết giữa C++ và OTcl. Các
kịch bản Tcl/OTcl được viết để thiết lập và cấu hình topology của mạng. TclCL cung
cấp liên kết giữa phân cấp lớp, khởi tạo đối tượng, nối kết biến và gửi lệnh.
NS phải sử dụng đến 2 ngôn ngữ vì Bộ mô phỏng cần thực hiện hai việc khác
nhau:

 Việc 1: Các mô phỏng cho các giao thức yêu cầu một ngôn ngữ lập trình hệ
thống có thể tính toán hiệu quả các byte, các tiêu đề packet và các thuật toán
thực thi đang chạy trên một tập dữ liệu lớn. Với tác vụ này, run-time speed (tốc
độ thời gian chạy thực) là quan trọng trong khi turn – around time ( thời gian
thay đổi) thì ít quan trọng hơn. Turn- around time bao gồm thời gian chạy mô
phỏng, thời gian tìm lỗi, thời gian sửa lỗi, thời gian biên dịch lại và thời gian
chạy lại.
 Việc 2: Khi nghiên cứu mạng thì rất cần quan tâm đến các tham số và cấu hình
có thay đổi nhưng không đáng kể, hay quan tâm đến các scenario ( tình huống)
cần khám phá thật nhanh chóng. Trong tác vụ này thì iteration time ( thời gian
lặp lại, tức là thời gian thay đổi mô hình và chạy lại) là quan trọng hơn. Vì cấu
hình chỉ chạy một lần lúc bắt đầu mô phỏng nên run-time trong tác vụ này rõ
ràng kém quan trọng hơn.
Vì thế mà dùng C++ để:
 Mô phỏng giao thức chi tiết theo yêu cầu ngôn ngữ lập trình hệ thống
Thao tác trên byte, xử lý gói, thực thi thuật toán
Tốc độ thời gian thực là quan trọng nhất
4
4
 Thực hiện bất kỳ việc gì mà cần phải xử lý từng packet của một luồng
 Thay đổi hành vi của lớp C++ đang tồn tại theo những hướng đã không được
lường trước.
Dùng OTcl để:
 Mô phỏng những thông số hay cấu hình thay đổi
 Cấu hình, thiết lập những gì chỉ làm 1 lần
 Thực hiện những cái ta muốn bằng cách thao tác trên các đối tượng C++ đang
tồn tại
1.1.3 Đặc điểm của NS-2
NS-2 thực thi những tính năng sau:
 Các kỹ thuật quản lý hàng đợi Router như DropTail, RED, CBQ

 Multicasting
 Mô phỏng mạng không dây
 Hành vi nguồn traffic –www, CBR, VBR
 Các agent truyền tải - UDP, TCP
 Định tuyến
 Luồng Packet
 Mô hình mạng
 Các ứng dụng – Telnet, FTP, Ping
 Các Packet tracing trên tất cả các link và trên các link xác định
Lợi ích của NS-2:
 Khả năng kiểm tra tính ổn định của các giao thức mạng đang tồn tại
 Khả năng đánh giá các giao thức mạng mới trước khi đưa vào sử dụng
 Khả năng thực thi những mô hình mạng lớn mà gần như ta không thể thực thi
được trong thực tế.
 Khả năng mô phỏng nhiều loại mạng khác nhau
1.1.4 Giới thiệu phần mền Nam dùng kết hợp với NS-2
Các tính năng của Nam
 Cung cấp trình diễn ảo cho mạng đã được tạo
 Có thể thi hành trực tiếp từ kịch bản Tcl
5
5
 Nam có giao diện đồ họa bắt mắt của CD player với các điểu khiển bao gồm
play, stop, fast forward, rw, pause …
 Biểu diễn thông tin như số packet trên từng link
 Cung cấp giao diện rê và thả cho việc tạo ra các topoloty
Hình 2. Giao diện đồ hoạ Nam
Các chức năng của Nam trong giao diện đồ họa người dùng
 Cửa sổ Nam Console: Sau khi khởi động Nam, cửa sổ Nam console xuất hiện.
Trong cửa sổ Nam Console có hai menu chính‘File’và ‘Help’.
Trong menu File có:

6
6
New: Tạo mới một topology ns dùng chương trình soạn thảo Nam
Open: Mở các file trace đã tồn tại (mở cửa sổ minh họa Nam)
WinList: Mở cửa sổ liệt kê tên của tất cả các file trace đang mở
Quit: Thoát khỏi Nam
Trong menu Help: Các trợ giúp đơn giản, xem phiên bản, thông tin về bản
quyền.
 Cửa sổ minh họa Nam: Khi một file trace được tải vào Nam (File/Open) thì cửa
sổ minh họa Nam xuất hiện. Giao diện chính có Menu File, Views, Analysis
7
7
Hình 2. Cửa sổ Nam console
Hình 2. Cửa sổ minh họa Nam
1.2 Sử dụng OTCL SCRIPT để viết các kịch bản mô
phỏng mạng trong NS-2
1.2.1 Tổng quan về OTCL SCRIPT
NS là trình biên dịch OTcl với các thư viện đối tượng mô phỏng mạng. Ví dụ sau
giúp chúng ta tiếp cận với Otcl.
Chạy ví dụ này bằng cách gõ lệnh “ns ns-simple.tcl”.
8
8
Hình 2. Topology mạng đơn giản và kịch bản mô phỏng
Mạng trên gồm 4 node (n0, n1, n2, n3). Duplex-link (liên kết truyền dữ liệu hai
chiều diễn ra đồng thời) giữa node n0 và n2, n1 và n2 có bandwith= 2Mbps,
delay=10ms. Duplex-link giữa n2 và n3 có bandwidth=1.7Mbps, và delay=20ms. Các
node dùng hàng đợi DropTail, maxsize=10.
Agent “tcp” gắn với n0 và agent “sink” gắn với n3. Agent “tcp” có thể tạo packet
với maxsize=1 Kbyte. Agent tcp “sink” tạo và gửi packet dạng ACK cho sender (sender
là agent gửi packet đi) và giải phóng packet nhận được. Agent “udp” gắn với n1 sẽ kết

nối với agent “null” gắn với n3. Agent “null” chỉ giải phóng packet đã nhận được. Bộ
khởi tạo lưu lượng “ftp” và “cbr” tương ứng được gắn vào agent “tcp” và “udp”. “cbr”
được cấu hình để tạo ra packet 1 Kbyte tại tốc độ 1 Mbps. “cbr” được thiết lập cho start
bắt đầu tại thời điểm 0.1 giây và kết thúc tại thời điểm 4.5 giây, “ ftp” bắt đầu lúc 1.0
giây và kết thúc lúc 4.0 giây.
#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 out.nam w]
9
9
$ns namtrace-all $nf
#Define a 'finish' procedure
proc finish {} {
global ns nf
$ns flush-trace
#Close the NAM trace file
close $nf
#Execute NAM on the trace file
exec nam out.nam &
exit 0
}
#Create four nodes
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]

#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
10
10
#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
$cbr set packet_size_ 1000
11
11
$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
Kết quả của kịch bản trên
12
12
Hình 2. Minh họa NAM cho kịch bản OTcl

Đầu tiên là quá trình thiết lập mạng cơ bản. NS Script bắt đầu bằng việc tạo ra một
instance cho đối tượng Simulator ( đối tượng mô phỏng).
 set ns [new Simulator] :
Tạo instance của Simulator, gán vào biến ns. Dòng này sẽ thực hiện lệnh
 Khởi tạo định dạng packet
 Tạo bộ lập lịch ( mặc định là Calender scheduler – Bộ lập lịch thời gian).
Đối tượng “ Simulator” có các hàm thành viên thực hiện những việc sau
 Tạo đối tượng ghép như các node và các link.
Connect (nối) các đối tượng thành phần mạng đã được tạo lại với nhau ( ví dụ
hàm attach-agent).
Gán giá trị cho các tham số cho các đối tượng thành phần mạng ( thường là
cho các đối tượng ghép).
 Tạo các connection giữa các agent ( ví dụ tạo connection giữa “tcp” và “sink”)
 Xác định tuyến tùy chọn trình diễn Nam.
Hầu hết các hàm thành viên dùng cho mục đích thiết lập mô phỏng ( được đề cập
đến như các hàm plumbing) và cho mục địch lập lịch. Tuy nhiên cũng có những hàm
13
13
cho việc trình diễn bằng Nam. Các thực thi cho các hàm thành viên của đối tượng
“Simulator” được định vị trong file “ns-2/tcl/lib.ns-lib.tcl”
 $ns color fid color:
Gán màu các packet cho luồng có mã nhận dạng luồng
fid. Hàm thành viên này của đối tượng Simulator được dùng
cho việc trình diễn NAM, và không có tác dụng gì trên mô
phỏng thực tế.
 $ns namtrace-all file-descriptor:
Hàm thành viên này yêu cầu mô phỏng lưu lại các dấu
vết mô phỏng vào trong định dạng đầu vào cho NAM. Đồng
thời có thể cung cấp tên file mà trace ( dấu vết) sẽ được
ghi vào bằng lệnh $ns flush-trace tương tự, hàm thành viên trace-all dùng lưu

trace theo định tuyến dạng chung.
 proc finish{}:
Hàm được gọi sau khi mô phỏng đã kết thúc. Trong hàm này các tiến trình post-
simulation ( mô phỏng thông báo được xác định).
 set n0 [$ns node]:
Hàm thành viên Node khởi tạo một node. Node trong NS là đối tượng ghép bao
gồm address (địa chỉ) và port classifiers (bộ phân loại cổng). User có thể tạo node bằng
cách tạo riêng đối tượng address và port classifier và nối chúng lại với nhau. Tuy nhiên
các hàm thành viên của đối tượng Simulator đã thực hiện việc này rất đơn giản. Xem
file “C:\cygwin\usr\local\ns-allinone-2.29.3\ns-allinone-2.29\ns-2.29\tcl\lib\ ns-node.tcl”
để viết Simulator tạo node như thế nào.
 $ns duplex-link node1 node2 bandwidth delay queue-type:
Tạo 2 simplex link (liên kết đơn) với bandwidth và delay xác định tuyến, nối hai
node xác định lại với nhau. Trong NS, hàng đợi đầu ra của node được thực thi như một
phần của link, vì vậy user nên xác định luôn queue-type khi khởi tạo link. Giống như
node, link là đối tượng ghép, user có thể tạo và nối các link với các node. Mã nguồn link
được tìm trong file ““C:\cygwin\usr\local\ns-allinone-2.29.3\ns-allinone-2.29\ns-
2.29\tcl\lib\ ns-lib.tcl” và “C:\cygwin\usr\local\ns-allinone-2.29.3\ns-allinone-2.29\ns-
2.29\tcl\lib\ ns-link.tcl”
 $ns queue-limit node1 node2 number:
Xác định giới hạn hàng đợi của hai simplex link kết nối node1 và node2 với nhau.
 $ns duplex-link-op $n0 $n2 orient right-down:
Dùng cho Nam
Quá trình tiếp theo là thiết lập các agent như FTP, CBR, connect các agent với các
node và connect các nguồn traffic với các agent.
 set tcp [new Agent/TCP]:
14
14
Lệnh tạo ra một agent TCP và đây cũng là cách để tạo ra bất kỳ agent hay nguồn
traffic nào. Các agent và các nguồn traffic chứa trong các đối tượng cơ bản thực (không

phải trong đối tượng kép), hầu như được thực thi trong C++ và được liên kết đến OTcl.
Vì vậy, không có hàm thành viên nào của một đối tượng Simulator xác định là có thể
tạo ra instance của các đối tượng này. Để tạo ra được Agent và nguồn lưu lượng thì user
cần phải biết tên lớp của các đối tượng này ( Agent/TCP, Agent/TCPSink,
Application/FTP …). Xem thêm trong file “C:\cygwin\usr\local\ns-allinone-2.29.3\ns-
allinone-2.29\ns-2.29\tcl\lib\ ns-default.tcl”. File này chứa các thiết lập giá trị tham số
cấu hình mặc định cho các đối tượng mạng sẵn có.
 $ns attach-agent node agent:
Hàm thành viên attach-agent gắn agent vào node. Hàm này sẽ gọi hàm thành viên
attach của một node xác định tuyến, để gắn agent vào node đó. Vì vậy, user có thể làm
tương tự, như $n0 attach $tcp chẳng hạn. Ngoài ra, một agent có thể dùng hàm attach
của nó để gắn một nguồn traffic vào chính nó.
 $ns connect agent1 agent2:
Hàm thiết lập liên kết luận lý giữa hai agent, bằng cách thiết lập địa chỉ đích đến
mạng của nhau và cặp địa chỉ cổng.
Bây giờ giả sử rằng tất cả cấu hình mạng đã được thực hiện. Tiếp theo là ghi kịch
bản mô phỏng. Đối tượng Simulator hiện có nhiều hàm thành viên lập lịch.
 $ns at time “string”:
Hàm này yêu cầu scheduler (bộ lập lịch) lập lịch cho “string” thực thi vào thời
gian time. Trong NS, thực tế thì nguồn traffic không truyền dữ liệu thật, nhưng nó lại
thông báo cho agent phía dưới rằng nó có dữ liệu cần truyền. Khi đó agent sẽ tạo ra
packet để truyền dữ liệu ấy đi.
Cuối cùng là chạy mô phỏng bằng lệnh $ns run.
1.2.2 Khởi tạo Node
Trong NS có hai loại node:
 Node unicast có một address classifier ( bộ phân loại địa chỉ) làm nhiệm vụ định
tuyến tuyến unicast và một port classifier ( bộ phân loại cổng).
 Node multicast có thêm một classifier (bộ phân loại) làm nhiệm vụ phân loại
các packet multicast với các packet unicast
Trong NS, các node unicast là node mặc định. Để tạo node multicast user phải

thông báo tường minh trong kịch bản OTcl đầu vào rằng tất cả các node sẽ được tạo ra
là node multicast, ngay sau khi user tạo ra đối tượng lập lịch
15
15
Hình 2. Node unicast và node multicast
Đối tượng mô phỏng node được dùng để khởi tạo một node. Hai node được tạo
với điều khiển n0,n1
 set n0 [$ns node]
 set n1 [$ns node]
Thiết lậ màu cho node bằng lệnh:
 $n0 color <colour>
1.2.3 Khởi tạo link
Tạo link một chiều giữa 2 node bằng lệnh:
 $ns simplex-link $n0 $n1 <bandwidth> <delay> <queue_type>
Và link hai chiều giữa hai node bằng lệnh:
 $ns duplex-link $n0 $n1 <bandwidth> <delay> <queue_type>
Giá trị bandwidth và delay tương ứng có thể là 1Mb và 10ms. NS2 hỗ trợ nhiều
giá trị queue_type như RED, Drop Tail…
Hình 2. Biểu diễn link giữa 2 node
16
16

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×