NS là bộ mô phỏng hướng sự kiện viết bằng C++, với một trình thông dịch OTcl (Object Oriented Tool Command Language) giao tiếp với người sử dụng. Để giảm thời gian xử lý gói tin và thời gian xử lý sự kiện, bộ lập lịch sự kiện và các đối tượng mạng cơ bản trong đường truyền dữ liệu được viết và dịch bằng C++. Những đối tượng được biên dịch này sẽ được kết nối tới bộ thông dịch OTcl qua trình liên kết OTcl. Trình liên kết này sẽ tạo ra các đối tượng OTcl tương ứng với mỗi đối tượng trong C++. Các hàm và biến trong đối tượng C++ chuyển thành các hàm và biến trong đối tượng OTcl tương ứng. Do đó, việc điều khiển các đối tượng C++ có thể được thực hiện trong ngôn ngữ mô phỏng OTcl. Các lớp trong C++ được tổ chức dưới dạng cây phân cấp, và tạo ra tương ứng trong OTcl. Hai cây phân cấp này có mối quan hệ chặt chẽ với nhau, với một lớp trong cây phân cấp thông dịch OTcl thì cũng có một lớp tương ứng trong cây phân cấp biên dịch. Đỉnh của cây phân cấp OTcl là TclObject. Người sử dụng tạo ra những đối tượng mô phỏng mới thông qua trình thông dịch OTcl, những đối tượng này được thiết lập tự động thông qua các phương thức được định nghĩa trong lớp TclClass. Chúng ta có thể thay đổi các tham số cho các đối tượng mô phỏng thông qua các phương thức được định nghĩa trong lớp TclObject.
NS sử dụng hai ngôn ngữ là vì hai lý do. Thứ nhất, các giao thức mô phỏng yêu cầu một ngôn ngữ lập trình hệ thống có thể làm việc hiệu quả với các thao tác trên byte, các header của gói tin và cài đặt các giải thuật thực hiện trên các tệp dữ liệu lớn. Với nhiệm vụ này thì tốc độ xử lý là quan trọng, còn thời gian thay đổi chương trình và thực hiện mô phỏng ít quan trọng hơn. Thứ hai, phần lớn công việc nghiên cứu về mạng là thay đổi các tham số mô phỏng, thực hiện cấu hình mạng, hoặc thăm dò nhanh một số trường hợp được cho là có khả năng. Trong trường hợp này, thời gian lặp đi lặp lại quan trọng hơn. C++ chạy nhanh hơn nhưng khi thay đổi thì chậm hơn, nên C++ thích hợp cho việc cài đặt chi tiết các giao thức và các đối tượng mạng. OTcl chạy chậm hơn nhưng có thể thay đổi rất nhanh, thích hợp cho việc cấu hình mô phỏng.
Quy trình thực hiện mô phỏng từ góc nhìn ngƣời dùng:
Hình 3.2 Tổng quan về NS từ góc nhìn của người sử dụng
Từ góc nhìn của người dùng, NS là bộ thông dịch script OTcl chứa bộ lập lịch các sự kiện mô phỏng, thư viện đối tượng các thành phần mạng, thư viện mô-đun thiết lập mạng. Để mô phỏng với NS, người nghiên cứu phải viết kịch bản bằng ngôn ngữ OTcl được gọi là chương trình mô phỏng hay kịch bản mô phỏng. Chương trình mô phỏng sẽ khởi tạo bộ lập lịch các sự kiện, thiết lập cấu hình mạng mô phỏng sử dụng các đối tượng mạng và các hàm thiết lập mạng trong thư viện, lập lịch cho các nguồn lưu lượng bắt đầu và kết thúc truyền tin…
Khi mô phỏng kết thúc, NS sinh ra một hay nhiều tệp tin kết quả dưới dạng văn bản chứa chi tiết dữ liệu mô phỏng. Dữ liệu sinh ra trong quá trình thực hiện mô phỏng được sử dụng để phân tích, đánh giá hệ thống mạng, hoặc làm input cho một công cụ hiển thị thông tin mô phỏng như NAM (Network Animator). NAM phân tích dữ liệu và cho thấy thông tin một cách trực quan về thông lượng, các gói bị mất trên mỗi đường truyền, topo mạng dưới dạng đồ họa, ….
Để phân tích, đánh giá được các tham số hiệu suất cần thiết từ các thông tin mà NS kết xuất ra tệp tin vết, người nghiên cứu thường phải dùng thêm một số công cụ dùng để vẽ đồ thị (như XGRAPH, gnuplot,...) và công cụ để tổng hợp các dữ liệu trong các tệp tin vết. Tất nhiên, người nghiên cứu hoàn toàn có thể tự viết lấy các đoạn mã (script) hoặc chương trình để phân tích kết quả theo yêu cầu của mình. Các ngôn ngữ Awk, PERL, hoặc Tcl thường được sử dụng để làm việc này. Nhiều nhà nghiên cứu đã chia sẻ một số kịch bản mô phỏng cũng như kịch bản xử lý kết quả tệp tin vết cho cộng đồng người sử dụng NS. Đây cũng chính là lợi thế cho người mới nghiên cứu mô phỏng mạng sử dụng bộ mô phỏng NS.
Cấu trúc thƣ mục của NS:
Trong thư mục ns-allinone, có thư mục ns-2 chứa tất cả các thành phần cài đặt của bộ mô phỏng (ở dạng C++ hoặc OTcl), các kịch bản kiểm tra (test), và các ví dụ mô phỏng có sẵn. Bên trong thư mục ns-2, thư mục tcl chứa các chương trình mã lệnh OTcl, hầu hết mã nguồn C++ dùng để cài đặt các lớp đối tượng như lịch trình sự kiện, các thành phần mạng.