Mô hình không dây chủ yếu bao gồm nút di động (MobileNode) ở lõi, với các đặc điểm hỗ trợ mở rộng cho phép mô phỏng các mạng MANET đa chặng, mạng không dây…Đối tượng MobileNode là một đối tượng tách biệt. Lớp MobileNode được thừa kế từ lớp cha Node trong C++. Do đó lớp MobileNode là đối tượng Node cơ bản với các chức năng thêm vào của nút không dây và di động như khả năng di chuyển
trong hình trạng mạng cho trước, khả năng nhận và truyền các tín hiệu tới và từ kênh không dây. Trong mục này chúng ta sẽ mô tả các thành phần bên trong của
MobileNode bao gồm các kĩ thuật định tuyến của nó, việc tạo ngăn xếp mạng cho phép truy cập kênh trong MobileNode, mô tả ngắn gọn của mỗi thành phần ngăn xếp, hỗ trợ dò vết và tạo ra các ngữ cảnh di chuyển/lưu lượng cho mô phỏng không dây.
4.3.1.1. Nút di động [9]
Nút di động (MobileNode) là một đối tượng ns Node cơ bản với các chức năng mở rộng như sự di chuyển, khả năng truyền và nhận trên kênh mà cho phép nó có thể sử dụng để tạo sự di động trong các môi trường mô phỏng không dây. Các đặc điểm di động bao gồm việc di chuyển nút, các cập nhật vị trí định kì, bảo đảm đường biên của hình trạng 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ư bộ phân loại, dmux, LL, Mac, Channel…) lại được thực thi trong OTcl. Các hàm và thủ tục được mô tả dưới đây có thể tìm thấy trong
~ns/common/mobilenode.{cc,h}, ~ns/tcl/lib/ns-mobilenode.tcl,
~ns/tcl/mobility/dsdv.tcl, ~ns/tcl/mobility/dsr.tcl và ~ns/tcl/mobili-ty/tora.tcl. Các kịch bản ví dụ có thể tìm thấy trong ~ns/tcl/ex/wireless-test.tcl và ~ns/tcl/ex/wireless.tcl.
Trong ví dụ đầu tiên tại [9] sử dụng cấu hình mạng nhỏ gồm 3 nút, ví dụ thứ hai chạy trên cấu hình mạng 50 nút. Các kịch bản này có thể được chạy đơn giản bằng cách gõ
$ns tcl/ex/wireless.tcl (hoặc /wireless-test.tcl)
Bốn giao thức định tuyến mạng được hỗ trợ hiện thời trong NS2 bao gồm AODV, DSDV, DSR và TORA. Chú ý rằng API cho việc tạo các nút di động phụ thuộc vào giao thức định tuyến được sử dụng, ví dụ như:
set mnode [$opt (rp) –create-mobile-node $id]
trong đó $opt(rp) định nghĩa “aodv”, “dsdv”, “dsr”, “tora” và id là chỉ số cho nút di động. Hiện nay NS2 hỗ trợ API mới được mô tả như sau:
$ns_ node-config -adhocRouting $opt(adhocRouting) -llType $opt(ll)
-macType $opt(mac) -ifqType $opt(ifq) -ifqLen $opt(ifqlen) -antType $opt(ant)
-propInstance [new $opt(prop)] -phyType $opt(netif)
-channel [new $opt(chan)] -topoInstance $topo
-wiredRouting OFF -agentTrace ON -routerTrace OFF -macTrace OFF
API ở trên cấu hình cho nút di động với tất cả các giá trị của giao thức định tuyến MANET như ngăn xếp mạng, cấu trúc mạng, mô hình kênh truyền. Tiếp đến chúng ta tạo các nút di động như sau:
for { set j 0 } { $j < $opt(nn)} {incr j} { set node_($j) [ $ns_ node ]
$node_($i) random-motion 0 ;# disable random
motion }
Thủ tục trên tạo ra các đối tượng nút di động, tạo tác tử định tuyến mạng MANET, tạo ngăn xếp mạng bao gồm lớp liên kết, hàng đợi, lớp MAC và giao diện mạng với ăng ten, sử dụng mô hình truyền thông được định nghĩa, kết nối các thành phần và kết nối ngăn xếp vào kênh. Nút di động bây giờ được mô tả như lược đồ trong hình 16.
Hình 16. Lược đồ nút di động theo chuẩn mở rộng không dây của CMU monarch.
Hình 17. Lược đồ SRNode theo chuẩn mở rộng không dây của CMU monarch.
Cấu trúc của nút di động được sử dụng cho giao thức định tuyến DSR khá khác so với nút di động được mô tả ở trên. Lớp SRNode được thừa kế từ lớp MobileNode.
SRNode không sử dụng địa chỉ đa hợp hoặc phân tách và tất cả các gói tin nhận được bởi nút được điều khiển tới tác tử định tuyến DSR mặc định. Mô hình lược đồ cho
SRNodeđược chỉ ra trong hình 17.
4.3.1.2. Tạo sự di chuyển cho nút
Nút di động được thiết kế để di chuyển trong cấu hình mạng không gian ba chiều. Tuy nhiên, cho đến nay chiều thứ ba (Z) không được sử dụng. Vì thế nút di động được giả thuyết rằng di chuyển trong mặt phẳng với giá trị Z được gán bằng 0. Nút di động sẽ có tọa độ X, Y, Z(0). Có hai kĩ thuật để tạo sự di chuyển cho các nút di động. Trong phương pháp đầu tiên, vị trí ban đầu của nút và đích đến sau đó của nó có thể được thiết lập tường minh.
Vị trí ban đầu và đích đến sau đó cho nút di động có thể được thiết lập bằng cách sử dụng API như sau:
$node set Y_ <y1> $node set Z_ <z1>
$ns at $time $node setdest <x2> <y2> <speed>
Tại giây $time, nút sẽ bắt đầu di chuyển từ vị trí khởi tạo của nó là (x1,y1) hướng tới đích (x2,y2) với tốc độ định trước.
Một ví dụ về tệp ngữ cảnh di chuyển sử dụng API ở trên có thể tìm thấy trong
~ns/tclmobility/scene/scen-670x670-50-600-20-0 của bộ mô phỏng NS2. Ở đây 600x700 định nghĩa bề dài và rộng của diện tích mô phỏng với 50 nút di chuyển, tốc độ lớn nhất là 20m/s và thời gian tạm dừng trung bình 600s. Các tệp mô tả sự di chuyển của các nút này có thể được tạo ra bằng cách sử dụng bộ tạo ngữ cảnh của CMU có thể tìm thấy trong ~ns/indep-utlils/cmu-scene-gen/setdest của bộ mô phỏng NS2.
Phương pháp thứ hai thực thi sự di chuyển ngẫu nhiên của nút như sau: $mobilenode start
Với phương pháp này ban đầu nút di động có vị trí ngẫu nhiên và sau đó có các cập nhật để thay đổi hướng và tốc độ của nút. Các giá trị đích đến và tốc độ được tạo theo cách ngẫu nhiên. Các di chuyển của nút di động được thực thi trong C++.
Bất luận việc sử dụng phương pháp nào để tạo ra sự di chuyển cho nút thì hình trạng của các nút di động cần phải được định nghĩa. Nó nên được định nghĩa trước khi tạo ra các nút di động. Thông thường hình trạng phẳng được tạo ra bằng cách xác định độ dài và rộng của hình trạng mạng như sau:
set topo [new Topography]
$topo load_flatgrid $opt(x) $opt(y) Trong đó $opt(x) và $opt(y) là các biên trong mô phỏng.