NS2 là một công cụ mô phỏng mã nguồn mở với mục tiêu dùng cho nghiên cứu và hỗ trợ đáng kể trong việc mô phỏng định tuyến, và các giao thức liên quan đến IP, chẳng hạn: TCP, UDP, SCTP, RTP, …, trên dây cáp và tín hiệu sóng. NS2 được phát triển bởi Viện Khoa học thông tin (ISI) tại các trường đại học thuộc nam California (USC).
NS là một bộ mô phỏng hướng đối tượng, được viết bằng ngôn ngữ C++, với “trình thông dịch” OTcL như là lớp vỏ (Frontend). Bộ mô phỏng này hỗ trợ một nhánh lớp trong C++ (Còn gọi là nhánh đã được biên dịch “compiled
hierarchy”) và một nhánh lớp tương tự như trình thông dịch OtcL (gọi là nhánh được thông dịch “interpreted hierarchy”). Hai hệ thống này có mối tương quan mật thiết; nhìn từ phía người sử dụng thì đây là mối tương quan một – một giữa một lớp ở nhánh thông dịch và một lớp ở nhánh biên dịch. Phần gốc của nhánh này là lớp TcLObject. Người dùng tạo các đối tượng của bô mô phỏng mới thông qua bộ thông dịch; các đối tượng này được tạo sẵn bên trong trình thông dịch, và cũng được phản ảnh bởi một đối tượng tương ứng trong nhánh biên dịch. Nhánh lớp đã được thông dịch sẽ được thành lập một cách tự động thông qua các phương pháp được định nghĩa trong lớp TcLClass. Các đối tượng đã được tạo sẵn phản ánh thông qua các phương pháp được định nghĩa trong lớp TcLObject. Có các nhánh khác trong mã C++ và đoạn mã Otcl; những nhánh khác không được phản ánh trong TcLObject.
Hình 3.1 – Giao diện tương tác NS2 giữa OTcl và C++.
Có thể thấy, một kịch bản Tcl viết cho mô phỏng tương tác với các lớp Otcl, trong nội bộ tạo ra một thư từ các đối tượng C++ thông qua liên kết OTcl. Lập lịch biểu tác tổ chức sự kiện và các thành phần cơ bản mạng của đường dẫn dữ liệu được thực hiện và biên dịch trong và được tạo sẵn cho thế giới bên ngoài thông qua các đối tượng OTcl tương ứng của họ thông qua mối liên kết OTcl. Do đó các phương pháp kiểm soát và các lớp biến của đối tượng C++ hiện nay có thể truy cập thông qua các chức năng thành viên và các biến tương ứng của đối tượng OTcl.
TCL Script
NS2
C++ Object oTcl Object