Tải bản đầy đủ
Hình 1.6 Cấu trúc Heap giảm

Hình 1.6 Cấu trúc Heap giảm

Tải bản đầy đủ

+ 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 \
-adhocRouting AODV \
-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 \

23

-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>
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
< class Application: public TclOject {
public:

24

Application();
virtual void send(int nbytes);
virtual void recv(int nbytes);
virtual void resume();
protected:
int command(int argc, const char* const* argv);
virtual void start();
virtual void stop();
Agent *agent_;
int enableRecv_; // call Otcl recv or not
int enableResume_; // call Otcl resume or not
};
1.4.4. Ứng dụng trong NS-2
1.4.4.1. 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.
1.4.4.2. 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. Thay vào đó, MobileNode sử dụng sóng vô tuyến để liên kết
với các MobileNode khác.

25

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.
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)
set val(ll)
set val(ifq)

Antenna/OmniAntenna
LL
Queue/DropTail/PriQueue

set val(ifqlen)

50

set val(netif)

Phy/WirelessPhy

set val(mac)

Mac/802_11 ;#MAC type

set val(adhocRouting)
set val(x)

500

set val(y)

500

DSDV

set topo [new Topography]

set ns_ [new Simulator]

$ns_ node-config -adhocRouting $val(adhocRouting)\
- llType $val(ll) \
- macType $val(mac) \
- ifqType $val(ifq) \
- ifqLen $opt(ifqlen) \
- antType $opt(ant) \

26

- propInstance [new $opt(prop)] \
- phyType $opt(netif) \
- channel [new $opt(chan)] \
- 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
}
Basic Wireless Model in NS2: Mô hình không dây chủ yếu bao gồm
MobileNode ở lõi, với các chức năng hỗ trợ thêm vào để cho phép mô phỏng
mạng ad hoc đa chặng, LAN không dây…
Đối tượng MobileNode là đối tượng chia nhỏ. Lớp MobileNode bắt nguồn
từ lớp Node. Một MobileNode là một đối tượng Node cơ sở thêm vào các chức
năng không dây và di động như khả năng di chuyển trong topo cho trước, khả
năng nhận và truyền tín hiệu đến và từ một kênh không dây. Một điểm khác biệt
chính giữa chúng là một MobileNode không được kết nối bởi các phương tiện
liên kết đến các nút khác hoặc các nút di động khác. Chức năng di động bao gồm
tính di động của nút, cập nhập định kì vị trí, duy trì ranh giới topo mạng… được
thực thi trong C++ trong khi đó các thành phần mạng trong bản thân MobileNode
(như classifiers, dmux , LL, MAC, Channel …) được thực thi trong Otcl.
Chức năng của một nút khi nhận được gói tin là kiểm tra các trường của gói
tin, thông thường là trường địa chỉ đích của nó và đôi khi là địa chỉ nguồn. Dựa vào
giá trị của trường trong gói tin và có thể gửi hoặc xử lý nó ngay tại nút đó.

27

Trong NS, điều này được thực hiện bởi đối tượng đơn giản classifier.
Classifier cung cấp cách để xem gói tin dựa vào một số tiêu chuẩn logic và lấy
một tham chiếu đến một đối tượng mô phỏng khác dựa trên các kết quả phù hợp.
Có nhiều đối tượng classifier, mỗi phần tham chiếu vào phần cụ thể trong gói.
Mỗi classifier bao gồm một bảng mô phỏng đối tượng, được đưa ra bởi một số.
Công việc của classifier là xác định số này kết hợp với gói tin nhận được và gửi
gói đó đến đối tượng được tham chiếu bởi số đó.
Một nút NS chủ yếu là một tập hợp của classifier. Một nút đơn giản nhất
(unicast) bao gồm chỉ một classifier địa chỉ và một classifier cổng. Thành phần
định tuyến là giao thức định tuyến thực thi trong thực tế mô phỏng trong NS2.
Một gói tin vào nút, dựa vào địa chỉ, cổng và trường loại của gói tin, gói tin đó sẽ
được gửi đi đến bộ định tuyến tương ứng. Hình 5.8 thể hiện cấu trúc của một bản
tin unicast
-

Network Stack: Tầng mạng cho một MobileNode bao gồm lớp link (LL),
modun ARP kết nối đến LL, một giao diện hàng đợi (IFq), lớp MAC, giao
diện mạng (netIF), tất cả kết nối đến kênh truyền. Các thành phần mạng được
tao ra cùng nhau trong Otcl.

-

Link Layer: Lớp link mô phỏng lớp kết nối dữ liệu trong tầng mạng. Lớp này
thực thi giao thức như phân mảnh và tập hợp lại gói tin và giao thức kết nối
xác thực. Lớp này cũng phải đặt địa chỉ MAC đích trong header MAC của gói
tin. Trong Trong MobileNode chức năng phân giải địa chỉ từ IP thành MAC
được cung cấp bởi modun ARP. Thông thường đưa tất cả ra ngoài gói tin (vào
kênh), các gói tin được đưa xuống LL bởi thành phần định tuyến. LL đưa gói
tin xuống IFq. Cho tất cả các gói tin vào gói tin (ra ngoài kênh), lớp MAC đưa
gói lên LL mà sau đó dừng lại tại node_entry_ poin

-

Address Resolution Protocol (ARP): Modun này nhận gói tin từ lớp LL. Nếu
ARP có địa chỉ MAC cho IP thì nó sẽ ghi vào header MAC của gói tin. Nếu
không nó sẽ broadcast một yêu cầu ARP và lýu trữ gói tin tạm thời. Có một bộ
ðệm cho gói ðõn mỗi khi không biết ðụa chỉ phần cứng ðích. Bộ ðệm gói này
sẽ bị huỷ nếu gói tin bổ xung gửi ðến ARP của cùng một ðịa chỉ ðích. Mỗi ðịa

28

chỉ phần cứng ðýợc phân giải, ðịa chỉ sẽ ðýợc viết vào trong header của gói tin
và ðýa vào trong Interface Queue
-

Interface Queue: Đó là ưu tiên hàng có ưu tiên cao hơn cho cho các gói tin
định tuyến (qua các gói dữ liệu) và chèn các định tuyến các gói tin ở phần đầu
của hàng đợi. Nó cũng hỗ trợ các hoạt động trên tất cả các bộ lọc các gói tin
trong hàng đợi và loại bỏ những người có chỉ định một địa chỉ đích. Việc giao
hàng được thực hiện bởi các lớp học PriQueue trong NS2. Trong dự án này
các VBR định tuyến các gói tin được đặt vào ưu tiên cao hơn như các giao
thức định tuyến các gói tin.

-

Mac Layer: Lớp này mô phỏng giao thức truy nhập kênh truyền mà được sử
dụng trong môi trường chia sẻ kênh truyền như mạng không dây và mạng
LAN. Đói tượng MAC là hai chiều, khi gửi một gói tin, lớp MAC sẽ thêm
header MAC vào gói tin và gửi nó xuống lớp physical và sau quá trình xử lý
gói tin, nó sẽ được truyền qua lớp link. Trong NS2 hai giao thức sử dụng cho
lớp MAC cho mạng di động là 802.11 và TDMA

-

Network Interfaces: Lớp network interfaces phục vụ như một giao diện phần
cứng mà được sử dụng mởi MobileNode để truy nhập vào kênh. Giao điện
chia sẻ môi trường không dây được thực thi như lớp Phy/WirelessPhy. Giao
diện này phụ thuộc vào sự xung đột và mô hình truyền lan điện từ nhận các
gói tin được truyền bởi các giao diện nút khác đến kênh truyền

-

Changes in NS2: Nhìn chung, tất cả việc triển khai giao thức định truyến trong
NS2 đều bao gồm 3 khối chức năng: tác nhân định tuyến, logic định tuyến (sử
dụng thông tin thu thập được từ tác nhân định tuyến hoặc từ database topo
toàn cầu trong trường hợp định tuyến thực hiện trên tính toán thực tế) và
Classifiers nằm trong một nút (chúng sử dụng bảng tính toán định tuyến để
thực hiện gửi gói tin). Khi thực thi một giao thức định tuyến mới, không cần
thiết phải thực hiên cả 3 khối. Ví dụ, khi thực thi một giao thức định tuyến
trạng thái đường truyền, đơn giản là thực thi tác nhân định tuyến mà trao đổi
thông tin trong loại trạng thái đường truyền, và logic định tuyến mà thực thi

29

thuật toán Dijkstra trên database kết quả topo. Nó có thể sử dụng các
classifiers tương tự nhau như các giao thức định tuyến unicast khác.
1.4.4.3. 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 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.
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.
1.4.5. Các Agent chính trong NS2
1.4.5.1. 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ỉ

30

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_
Tạo một ứng dụng CBR, với các agent UDP:
set ns [new Simulator]
set n0 [$ns node]
set n1 [$ns node]
$ns duplex-link $n0 $n1 5Mb 2ms DropTail
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$udp0 set packetSize_ 536 ;# set MSS to 536 bytes

31

set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
$ns at 1.0 "$cbr0 start"
1.4.5.1. TCP Agent
Trong NS-2, TCP agent được chia làm hai loại:
+ Agent một chiều.
+ Agent hai chiều.
Agent một chiều là những agent chỉ đóng một trong hai vai trò hoặc là bên
gởi hoặc là bên nhận. Trong khi đó, agent hai chiều là agent đóng cả hai vai trò
vừa là bên nhận, vừa là bên gởi. Hiện nay, agent này vẫn đang được phát triển.
Các agent một chiều ở bên gởi (one-way TCP sending agents ) đã cài đặt trong
NS:
+ Agent/TCP.
+ Agent/TCP/Reno.
+ Agent/TCP/Newreno.
+ Agent/TCP/Sack1.
+ Agent/TCP/Vegas.
+ Agent/TCP/Fack.
Các TCP agent một chiều ở bên nhận (one-way TCP receiving agents):
+ Agent/TCPSink.
+ Agent/TCPSink/DelAc
+ Agent/TCPSink/Sack1.
+ Agent/TCPSink/Sack1/DelAck.
TCP agent hai chiều ( two-way TCP agent):
+ Agent/TCP/FullTcp.

32

1.4.6. Ngôn ngữ mô phỏng trong NS2:
1.4.6.1. Giới thiệu
NS2 dùng hai ngôn ngữ bởi vì bộ mô phỏng có hai việc khác nhau cần
thực hiện:
Một mặt, các mô phỏng chi tiết của giao thức yêu cầu một ngôn ngữ lập
tr.nh hệ thống mà hoạt động có hiệu quả tới các byte, packet header, các thuật
toán chạy trên các bộ dữ liệu lớn.Với những tác vụ này, tốc độ chạy thực
(runtime speed) là quan trọng, còn thời gian thay đổi(chạy giả lập, sửa lỗi, biên
dịch lại, chạy lại) là không quan trọng.
Mặt khác, phần lớn mạng nghiên cứu, bao gồm các thông số, cấu hình
khác nhau, hoặc thăm dò nhanh một số hoạt cảnh. Trong những trường hợp này,
thời gian tương tác (chạy lại, thayđổi chế độ) là quan trọng hơn còn cấu hình
chạy một lần, thời gian chạy thực không quan trọng bằng.
NS2 kết hợp tất cả các yêu cầu này với hai ngôn ngữ C++ và OTcl. C++
nhanh khi chạy, nhưng chậm khi thay đổi, phù hợp với việc xử l. chi tiết giao
thức. OTcl chạy chậm nhưng thay đổi nhanh, là l ý tưởng cho cấu hình giả lập.
NS2 thông qua (tclcl) cung cấp “keo” để tạo các đối tượng và các biến xuất hiện
trên cả hai ngôn ngữ.
OTcl dùng để :
+ Cấu hình, setup và “one-time” stuff
+ Làm các công việc mà có thể sử dụng các đối tượng C++ có sẵn.
C++ dùng cho:
+ Làm những công việc yêu cầu phải xử l. các gói tin trong luồng.
+ Nếu đang cần phải thay đổi cách ứng xử của một lớp c++, sẵn có trong
những cách mà không biết trước.
1.4.6.2. Ngôn ngữ TCL
Lớp Tcl: Lớp Tcl đóng gói thể hiện thực (actual instance) của tr.nh thông
dịch OTcl và cung cấp các phương thức để truy cập và giao tiếp với các trình
thông dịch này.

33