4.2.1.1 Giới thiệu chung
NS (Network Simulator) là hệ thống mô phỏng mạng, đặc biệt là các giao thức điều khiển hoạt động của mạng, phát triển tại đại học Berkeley và viện công nghệ thông tin ISI (Information Science Institute), có khả năng mô phỏng nhiều kiểu mạng IP khác nhau. Nó mô phỏng việc thực hiện các giao thức mạng như TCP, UDP, các nguồn dữ liệu FTP, Telnet, Web, CBR và VBR, có cơ chế quản lí hàng đợi router như DropTail, RED và CBR.
NS2 là một bộ mô phỏng sự kiện rời rạc, có thứ tự, người sử dụng có thể thay đổi cấu hình và mở rộng mô hình mạng rất dễ dàng bằng cách lập trình thêm vào một số mô-đun chương trình. NS2 dựa trên hai ngôn ngữ: một bộ mô phỏng hướng đối tượng, được viết bằng C++, và một bộ thông dịch OTcl (phần mở rộng hướng đối tượng của Tcl), được dùng để thực hiện các đoạn mã kịch bản của người dùng.
Một công cụ khác được phát hành cùng với NS là Network Animator (NAM). Công cụ này cung cấp hình ảnh đồ họa về sự chuyển động của các nút trong mạng mô
phỏng và truyền thông giữa chúng. Đây là một công cụ rất có ích để tìm lỗi trong mã nguồn của giao thức.
Trong thí nghiệm mô phỏng của luận văn, chúng tôi sử dụng công cụ NS2 phiên bản NS - 2.34.
4.2.1.2 Mô hình NS2
Dưới góc độ của người dùng, một hệ thống mô phỏng NS2 được mô hình hóa như sau:
Hình 4.1. Mô hình NS2 đơn giản
Từ mô hình trên có thể thấy, NS2 sử dụng ngôn ngữ Otcl với thư viện bao gồm các đối tượng: Bộ lập lịch các sự kiện; thư viện đối tượng các thành phần mạng và các modul thiết lập mạng. Nói cách khác, để sử dụng NS2, ta phải lập trình trên ngôn ngữ Otcl. Để cài đặt và chạy chương trình mô phỏng mạng bằng NS, ta phải viết Script trên ngôn ngữ Otcl, lập lịch cho các sự kiện, thiết lập cấu hình mạng (topo mạng) bằng cách sử dụng các đối tượng thành phần mạng, triệu gọi các hàm thư viện, báo cho các nguồn dữ liệu biết khi nào thì bắt đầu và kết thúc việc truyền gói tin trên mạng. Khi muốn tạo một đối tượng mạng mới, có thể viết mới một đối tượng hoặc bằng cách liên kết các đối tượng mạng đã có sẵn trong thư viện. Việc gắn kết đối tượng tạo nên đối tượng mới chính là điểm mạnh của NS2.
NS2 sử dụng cả ngôn ngữ C++ và ngôn ngữ Otcl. NS2 hỗ trợ cấu trúc lớp kiểu phân cấp trong C++ (được gọi là cấu trúc lớp biên dịch), và một cấu trúc lớp tương tự trong ngôn ngữ Otcl (gọi là cấu trúc lớp thông dịch). Hai cấu trúc lớp phân cấp này có quan hệ chặt chẽ với nhau, dưới góc độ người sử dụng (không phải người lập trình phát triển NS), có tương ứng 1-1 giữa lớp trong cấu trúc lớp biên dịch và lớp trong cấu trúc lớp thông dịch Sơ đồ sau là ví dụ về sự phân cấp trong C++ và Otcl:
Mỗi ngôn ngữ được sử dụng với mục đích riêng. Otcl có thể được sử dụng: - Trong việc cấu hình, cài đặt và các công việc thực hiện “một lần”
- Chỉnh sửa các đối tượng C++ đã có sẵn Và sử dụng C++ cho:
- Khi làm các công việc đòi hỏi xử lý từng gói tin của luồng dữ liệu - Khi phải thay đổi các hành vi của các lớp C++ đã tồn tại
Có thể hình dung tổ chức của NS qua sơ đồ sau:
Hình 4.3. Kiến trúc của NS
Sơ đồ kiến trúc của NS, nói chung có thể coi người dùng như đang đứng ở góc dưới bên trái, thiết kế và chạy hệ mô phỏng bằng ngôn ngữ Tcl và sử dụng các đối tượng Otcl trong thư viện. Bộ lập lịch các sự kiện và hầu hết các đối tượng thành phần mạng đều được viết bằng C++, và có thể triệu gọi từ Otcl thông qua giao tiếp tclcl, cả hệ thống kết hợp lại thành NS.
Sơ đồ mô hình NS đơn giản cũng chỉ ra, khi kết thúc quá trình mô phỏng, ns có thể sinh ra một hay nhiều text file chứa số liệu chi tiết phục vụ cho việc phân tích quá trình mô phỏng, hoặc cũng có thể là đầu vào cho hệ mô phỏng bằng đồ hoạ (Network Animator : NAM).
Hình 4.4 sẽ mô tả sự hoạt động của NS thông cua 3 mức, như chúng ta thấy có mức khung cảnh, mức Script và cuối cùng là ngôn ngữ C++. Tất cả những công việc của NS đều thông qua các Script của NS để gọi các hàm của C++ ở mức dưới cùng.
4.2.1.3 Cấu trúc của tệp bám vết
Dữ liệu ra sau khi mô phỏng với NS-2 thường được lưu trong một tệp, tệp này được gọi là tệp dấu vết (trace file). Tệp dấu vết chứa thông tin về các sự kiện của gói tin xảy ra trong suốt thời gian mô phỏng theo từng tầng: tầng MAC, tầng mạng, tầng giao vận.
Khi bám vết trong một tệp ASCII đầu ra, tệp bám vết có tên mở rộng .tr được tổ chức thành 12 trường. Ý nghĩa của các trường là:
Hình 4.5. Các trường của tệp bám vết
1. Trường đầu tiên là kiểu sự kiện. Được đưa ra bằng một trong 4 biểu tượng r, +, -, d lần lượt tương ứng với nhận (ở đầu ra của kênh truyền), đã xếp vào hàng, đã ra khỏi hàng và bị loại.
2. Đưa ra thời điểm xảy ra sự kiện
3. Đưa ra nút đầu vào của kênh truyền mà sự kiện xảy ra ở đó 4. Đưa ra nút đầu ra của kênh truyền mà sự kiện xảy ra ở đó 5. Đưa ra kiểu gói tin (như CBR hay TCP)
6. Đưa ra kích thước gói tin 7. Một vài cờ
8. Đây là mã nhận dạng luồng (fid) IPv6 mà một người sử dụng có thể đặt cho môic dòng ở tập lệnh Otcl đầu vào.
9. Địa chỉ nguồn đưa ra dưới dạng “node.port” 10. Địa chỉ đích.
11. Số thứ tự gói tin của giao thức lớp mạng. 12. Mã nhận dạng duy nhất của gói tin.
4.2.1.4 Nguồn phát sinh lưu lượng
NS hỗ trợ bốn loại nguồn phát sinh lưu lượng [18]:
1. EXPOO_Traffic: tạo lưu lượng dựa vào một phân phối On/Off theo hàm mũ. Các gói tin được gửi đi với tốc độ xác định trong suốt quãng thời gian on, và không có gói tin nào được gửi trong khoảng thời gian off. Khoảng thời gian on và off được tạo ra theo phân phối hàm mũ. Kích thước các gói tin không thay đổi.
2. POO_Traffic: tạo lưu lượng dựa vào phân phối On/Off Pareto. Loại này tương tự phân phối theo hàm mũ trừ khoảng thời gian on/off được thực hiện theo phân phối pareto.
3. CBR_Traffic: tạo lưu lượng với tốc độ không đổi được định sẵn. Kích thước gói tin là cố định nhưng có thể chọn các giá trị khác nhau. Ngoài ra, một bộ tạo số
ngẫu nhiên có thể được kích hoạt, để thay đổi khoảng thời gian các gói tin khởi hành trong một phạm vi nhất định.
4. TrafficTrace: là nguồn lưu lượng được ghi lại dưới dạng vết của một nguồn lưu lượng đến từ mạng thật.