Kiến trúc tổng quát của NS2
Hình 3.3 bên dưới là kiến trúc tổng quát của NS2. Trong kiến trúc này, người sử dụng (không phải là người phát triển) đứng ở vị trí góc dưới bên trái, thiết kế và chạy các mô phỏng trong TCL sử dụng các đối tượng mô phỏng trong thư viện OTCL. Bộ lập lịch các sự kiện và hầu hết các thành phần của mạng được triển khai trên C++ và
có thể sử dụng qua OTCL thông qua liên kết OTCL được triển khai sử dụng TCLCL. Tất cả các thành phần trên tạo nên bộ mô phỏng NS2 – bộ thông dịch TCL mở rộng với các thư viện mô phỏng.
Hình 3.3: Kiến trúc tổng quát của NS2 . .
3.4.4. Lập trình mô phỏng bằng NS2 a. Khởi tạo và kết thúc mô phỏng a. Khởi tạo và kết thúc mô phỏng
- Một mô phỏng bắt đầu được khởi tạo bằng câu lệnh:
Set ns [new Simulator] #khai báo biến ns mới
- Để có các file đầu ra với dữ liệu mô phỏng (file bám vết) hay các file sử dụng cho hiển thị (file nam) thì chúng ta cần sử dụng câu lệnh:
# Mở file bám vết có tên là “out.tr” với con trỏ là “tracefile”
Set tracefile [Open out.tr w] $ns trace-all $tracefile1
# Mở file hiển thị Nam có tên là “out.nam” với con trỏ là “namfile”
Set namfile [Open out.nam w] $ns namtrace-all $namfile
- Các câu lệnh trace-all và namtrace-all có thể dẫn đến việc tạo ra các file có kích thước lớn với dữ liệu dư thừa. Trong nhiều trường hợp, các file dữ liệu đầu ra này chỉ cần lưu lại một tham số cụ thể
Ví dụ 1:
# Bám vết trong hàng đợi của liên kết giữa 2 nút n0 và n1
$ns trace-queue $n0 $n1 $ns namtrace-queue $n0 $n1
- Kết thúc chương trình được thực hiện bằng một thủ tục “finish” # Định nghĩa thủ tục “finish”
Proc finish {} {
Global ns tracefile namefile # Sử dụng biến ngoài thủ tục
$ns flush-trace # Các vết được lưu vào file tương ứng
Close $tracefile Close $namefile