Tải bản đầy đủ
- 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.

- 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.

Tải bản đầy đủ

Hình 3.3: 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++.
- 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 3.4: TclCL hoạt động như liên kết giữa A và B

53

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:
+ 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.
+ 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.
- 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.

54

3.1.2. Đặ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.
3.1.3. Các thành phần cấu hình mạng trong NS-2
 Lớp Simulator
Trong bộ công cụ giả lập NS-2, lớp quan trọng nhất là lớp Simulator. Nó
cung cấp các thủ tục, giao tiếp để tạo, quản lý topology và lưu giữ các tham số
cấu hình của các thành phần trong topology. Thông thường, các kịch bản giả lập
thường bắt đầu bằng việc tạo một thể nghiệm của lớp Simulator để điều khiển và
thực hiện việc giả lập, sau đó gọi các phương thức để tạo các node, topo và cấu
hình cho các node, các liên kết, ứng dụng….
 Khởi tạo đối tượng Simulator
Cú pháp để khởi tạo một đối tượng Simulator như sau:
set ten_doi_tuong [new Simulator]
Ví dụ: set ns_ [new Simulator]
55

Sau khi khởi tạo đối tượng thì thủ tục khởi tạo sẽ thực hiện các công việc:
+

Khởi

tạo

định

dạng

của

gói

dữ

liệu

(gọi

hàm

create_packetformat).
+ Tạo một bộ lập lịch (scheduler), mặc định là calendar scheduler.
+ Tạo một “null agent” . null agent được tạo bằng cú pháp:
set nullAgent_ [new Agent/Null]
3.1.3.3. Các bộ lập lịch và các sự kiện
Hiện tại NS-2 cung cấp bốn bộ lập lịch cho công cụ giả lập:
+ List scheduler.
+ Heap Scheduler.
+ Calendar scheduler.
+ Real time scheduler.
Quy trình làm việc của bộ lập lịch như sau:
Bộ lập lịch các sự kiện sẽ chọn sự kiện kế tiếp gần nhất trong bộ lập lịch để
thực thi, sau khi thực thi xong sẽ trở về để thực thi sự kiện kế tiếp. Đơn vị thời
gian dùng trong bộ lập lịch được tính bằng giây. Hiện tại, bộ công cụ giả lập chỉ
sử dụng tiến trình đơn, tức là tại một thời điểm chỉ có một sự kiện được xử lý.
Nếu có nhiều sự kiện trong bộ lập lịch thì sự kiện nào vào trước sẽ được xử lý
trước. Trong mỗi kịch bản giả lập chỉ được sử dụng một bộ lập lịch.
- Bộ lập lịch List Scheduler: (lớp Scheduler/List) được cài đăt dựa trên cấu
trúc dữ liệu danh sách liên kết đơn. Bộ lập lịch này dùng thời gian để phân biệt
thứ tự các sự kiện vì vậy khi thêm hoặc xóa một sự kiện cần phải tìm kiếm cả
danh sách để chọn một entry thích hợp. Khi chọn sự kiện kế tiếp để thực thi thì
cần phải dời các sự kiện còn lại lên một vị trí.
- Bộ lập lịch Heap Scheduler: (lớp Scheduler/Heap) dùng cấu trúc dữ liệu
Heap để cài đặt. Cấu trúc dữ liệu này cao cấp hơn so với danh sách liên kết vì lưu
trữ được nhiều sự kiện hơn.Độ phức tạp của các thao tác thêm, xóa bằng O(log
n) tương ứng với n sự kiện.

56

- Bộ lập lịch Calendar Scheduler: (lớp Scheduler/Calendar) sử dụng cấu
trúc dữ liệu tương tự như lịch tính dương lịch, mà các sự kiện cùng ngày, tháng
của các năm khác nhau có thể được lưu trữ trong cùng một ngày.
Bộ lập lịch thời gian thực Real-Time Scheduler: (lớp Scheduler/ RealTime)
đồng bộ thực thi các sự kiện trong thời gian thực. Bộ lập lịch này vẫn đang trong
giai đoạn phát triển.
Định nghĩa Cấu trúc Heap: Heap là cây nhị phân gần đầy được cài đặt bằng
mảng một chiều với các node trên heap có nội dung nhỏ hơn hoặc bằng nội dung
của các node cha. Heap này còn được gọi là heap giảm (descending heap). Heap
tăng (ascending heap) thì ngược lại: Các node trên heap có nội dung lớn hơn
hoặc bằng nội dung của node cha.

Hình 3.5: Cấu trúc Heap giảm
Cấu trúc heap giảm được cài đặt bằng cây nhị phân và mảng một chiều.
Các phương thức khác:
Lớp Simulator còn cung cấp thêm một số phương thức cho việc cài đặt
các thông số cho việc giả lập.
- Các phương thức này bao gồm ba loại:
+ Các phương thức tạo, quản lý các node, topo và các liên kết.
+ Các phương thức thực hiện việc ghi nhận kết quả của quá trình
giả lập.
+ Các phương thức trợ giúp tương tác với bộ lập lịch.
- Các phương thức bao gồm:

57

+ Simulator instproc now: Trả về thời gian hiện tại.
+ Simulator instproc at args: Thực thi sự kiện ở thời điểm cụ thể.
+ Simulator instproc cancel args: Hủy bỏ việc thực thi sự kiện.
+ Simulator instproc run args: Bắt đầu khởi động bộ lập lịch.
+ Simulator instproc halt: Dừng bộ lập lịch.
+ Simulator instproc flush-trace: flush all trace object write
buffers.
+ Simulator instproc create-trace type files src dst: Tạo đối tượng
trace.
+ Simulator instproc create_packetformat: Thiết lập định dạng gói
dữ liệu.
Tạo Node: Để tạo một node trong Tcl ta dùng cú pháp:
set ns_ [new Simulator]
$ns node
Một node trong NS chứa ít nhất các thành phần sau:
+ Địa chỉ hoặc số ID, giá trị này khởi tạo bằng 0, và tuần tự tăng 1 đơn vị
khi có một node mới được tạo ra.
+ Danh sách các node láng giềng của nó (neighbor_).
+ Danh sách các Agent (agent_).
+ Loại node (nodetype_).
+ Module định tuyến của node.
Cấu hình cho MobileNode: Cấu hình cho node chủ yếu tập trung vào
Wireless.
Bao gồm các thông số sau: Loại cấu trúc địa chỉ sử dụng là địa chỉ đẳng
cấp hay phân cấp, định nghĩa các thành phần mạng cho mobilenode; Địa chỉ
MAC, loại Antenna, sóng truyền, lựa chọn giao thức định tuyến, định nghĩa mô
hình năng lượng, …
set topo [new Topography]
$ns_ node-config -addressingType hierarchical \
-Ad-hocRouting AODV \

58

-llType LL \
-macType MAC/802_11 \
-ifqType Queue/DropTail/PriQueue \
-ifqLen 50 \
-antType Antenna/OmniAntenna \
-propType Propagation/TwoRayGround \
-phyType Phy/WirelessPhy \
-topologyInstance $topo \
-channel Channel/WirelessChannel \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF
Giá trị mặc định của các tham số trên là NULL, ngoại trừ addressingType
có giá trị mặc định là flat.
Cấu hình cho Base-Station Node: Cấu hình cho Base-Station Node
tương tự như cấu hình của WirelessNode tuy nhiên, Base-Station có khả năng
định tuyến đến mạng có dây trong khi MobileNode thì không có khả năng đó. Do
đó, để cấu hình cho Base-Station Node, ta thêm thuộc tính:
$ns_ node-config –wiredRouting ON
Tạo liên kết cho các Node: Trong NS-2 có hai loại liên kết các
node:
+ Liên kết đơn công.
+ Liên kết song công.
Liên kết đơn công là loại liên kết theo kiểu point-to-point giữa hai node mà
chỉ có một node truyền và một node nhận. Lớp tương ứng trong OTcl của liên kết
đơn công là lớp SimpleLink. Cú pháp của liên kết đơn công giữa hai node:
set ns_ [new Simulator]
$ns_ simplex-link < queue_type>

59

Câu lệnh trên tạo ra một liên kết từ node0 đến node1 với một giá trị băng
thông bandwidth, thời gian trễ giữa hai lần truyền delay và liên kết sử dụng loại
hàng đợi queue_type. Loại hàng đợi đã được đề cập ở trên.
Liên kết song công cũng là liên kết point-to-point giữa hai node nhưng mỗi
node đều có khả năng vừa truyền và vừa nhận, tức liên kết song công là hai liên
kết đơn công. Cú pháp cũng tương tự như liên kết đơn công:
set ns_ [new Simulator]
$ns_duplex-link
3.1.4. Ứng dụng trong NS-2
 Lớp Application
Ứng dụng trong NS-2 được xây dựng bởi lớp Application được cài đặt trong
phần nhân của NS-2. Các phương thức lớp Application:
Lớp Application cung cấp một số phương thức cơ bản cho quá trình hoạt
động của một ứng dụng: send(), recv(), resume(), start(), stop(), một con trỏ trỏ
đến giao thức ở tầng vận tải bên dưới mà nó kết nối.
 Mạng không dây trong NS-2
Thành phần quan trọng nhất trong mô hình mạng không dây là MobileNode.
Trong C++, lớp MobileNode được kế thừa từ lớp cha là lớp Node. Do đó,
MobileNode có đầy đủ các đặc điểm của đối tượng Node, thêm vào đó là các đặc
tính của Wireless như khả năng di chuyển tự do trong phạm vi của topology, có
khả năng truyền và nhận tín hiệu vô tuyến.
Điểm khác nhau quan trọng giữa Node và MobileNode là MobileNode
không dùng khái niệm Link (liên kết có dây) để liên kết với các Node hay các
MobileNode khác.Mà thay vào đó là MobileNode sử dụng sóng vô tuyến để liên
kết với các MobileNode khác.
Lớp Mobile được cài đặt trong cả C++ và OTcl: Các cài đặt phức tạp như
việc di chuyển của MobileNode, việc cập nhật lại vị trí, duy trì cấu trúc mạng,…
được viết bằng C++. Trong khi đó, việc cấu hình các thành phần trong
MobileNode như địa chỉ Mac, Channel, Antenna,… được cài đặt trong OTcl.

60

Tạo mô hình mạng không dây trong NS-2: Một MobileNode bao
gồm các thành phần: Link Layer, Interface Queue, ARP, địa chỉ MAC, mô hình
truyền của sóng vô tuyến, Card mạng, kênh truyền. Ngoài ra, còn có các thành
phần khác: Kiểu Antenna, loại giao thức định tuyến.
Do đó, để tạo một mô hình mạng không dây, ta cần cấu hình cho
MobileNode:
set val(chan)

Channel/WirelessChannel

set val(prop)

Propagation/TwoRayGround

set val(ant)

Antenna/OmniAntenna

set val(ll)

LL

set val(ifq)

Queue/DropTail/PriQueue

set val(ifqlen)

50

set val(netif)

Phy/WirelessPhy

set val(mac)

Mac/802_11 ;#MAC type

set val(Ad-hocRouting)
set val(x)

500

set val(y)

500

DSDV

set topo [new Topography]

set ns_ [new Simulator]

$ns_ node-config -Ad-hocRouting $val(Ad-hocRouting)\
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $opt(ifqlen) \
-antType $opt(ant) \
-propInstance [new $opt(prop)] \
-phyType $opt(netif) \
-channel [new $opt(chan)] \

61

-topoInstance $topo \
-wiredRouting OFF \
-agentTrace ON \
-routerTrace OFF \
-macTrace OFF
Tiếp theo, tạo một mô hình mạng không dây với năm MobileNode theo cú
pháp:
set val(nn) 5
for { set j 0 } { $j < $val(nn)} {incr j} {
set node_($j) [ $ns_ node ]
$node_($i) random-motion 0 ;# disable random motion
}
 Tạo kịch bản chuyển động cho các Node
Các MobileNode được thiết kế để chuyển động ba chiều ( X, Y, Z). Tuy
nhiên, trong công cụ giả lập mạng này, thì chiều Z không được sử dụng ( Z=0),
nên các MobileNode chỉ chuyển động theo hai chiều X, Y.
Trong NS-2, có hai phương pháp để tạo sự chuyển động cho các
MobileNode:
+ Khởi tạo vị trí ban đầu cho các MobileNode và khai báo địa chỉ đích mà
các MobileNode di chuyển tới một cách tường minh.
+ Thiết lập cho các MobileNode di chuyển ngẫu nhiên.
Phương pháp thứ nhất
$node set X_
$node set Y_
$node set Z_
$ns at $time $node setdest
Chú thích:
Ban đầu, ta khởi tạo vị trí bắt đầu cho node với tọa độ (x1, y1, 0). Sau đó,
tại thời điểm “$time” giây, node sẽ bắt đầu di chuyển từ vị trí khởi tạo(x1, y1, 0)
đến vị trí đích (tọa độ ( x2, y2, 0)) với vận tốc speed.

62

Phương pháp thứ hai
$node start
Chú thích:
MobileNode khởi tạo ngẫu nhiên cho vị trí ban đầu, vị trí đích và tốc độ di
chuyển.
3.1.5. Các Agent chính trong NS2
 UDP Agent
UDP agent được cài đặt bên node gửi dữ liệu và cũng có thể được cài đặt
bên node nhận. Agent này là agent không hướng kết nối, tức là không có cơ chế
để phát hiện gói tin bị mất khi truyền, và truyền lại gói tin khi bị mất. Nó chỉ
thích hợp cho những ứng dụng không đòi hỏi độ chính xác cao, và chấp nhận
chịu sự mất mát dữ liệu.
Các cú pháp thông dụng dùng để thiết lập UDP agent trong NS-2:
+ Tạo một thể nghiệm của đối tượng UDP agent:
set udp0 [new Agent/UDP]
+ Kết nối agent UDP cho node:
$ns_ attach-agent
+ Cài đặt ứng dụng cho agent:
$traffic-gen attach-agent
Để cài đặt ứng dụng CBR cho agent udp1, ta có cú pháp:
set cbr1 [new Application/Traffic/CBR]
$cbr1 attach-agent $udp1
+ Tạo một kết nối giữa hai agent:
$ns_ connect
+ Các thông số thiết lập chi tiết cho agent UDP:
$udp set packetSize_
$udp set dst_addr_

$udp set dst_port_
$udp set class_
$udp set ttl_
63