NS-2 là một phần mềm mô phỏng mạng điều khiển sự kiện riêng rẽ hƣớng đối tƣợng, đƣợc viết bằng hai ngôn ngữ là ngôn ngữ lập trình hệ thống C++ và ngôn ngữ kịch bản hƣớng đối tƣợng OTcl. Để có đƣợc hiệu suất cao, NS tách biệt việc xử
TCL file File.tcl NS NAM Visual Simulation Tracing and Monitoring Simulation Out.nam Out.tr
lý và điều khiển dữ liệu. Để giảm thời gian xử lý gói và các sự kiện (không phải thời gian mô phỏng), bộ lập lịch các sự kiện và các thành phần đối tƣợng mạng cơ bản trong phần dữ liệu đƣợc viết và biên dịch sử dụng trình biên dịch C++. Các đối tƣợng đƣợc biên dịch này có thể đƣợc sử dụng bằng trình thông dịch OTcl qua một mối liên kết OTCL, mối liên kết tạo lên sự phù hợp giữa đối tƣợng OTcl cho mỗi đối tƣợng C++ và tạo nên các chức năng, các tham số cấu hình bởi đối tƣợng C++ tƣơng ứng với các hàm thành phần và các biến thành phần của đối tƣợng OTclL. Theo cách đó, các đối tƣợng điều khiển của C++ đƣợc trao cho OTcl. Nó cũng có thể thêm các hàm thành phần và các biến vào C++ đã đƣợc liên kết với đối tƣợng OTcl. Các đối tƣợng trong C++ không cần đƣợc điều khiển trong mô phỏng hoặc đƣợc sử dụng bên trong bởi đối tƣợng khác không đƣợc liên kết tới OTcl. Cũng nhƣ vậy, một đối tƣợng (không phải phần dữ liệu) có thể đƣợc triển khai hoàn toàn bằng OTcl. Đây là lý do để hệ mô phỏng NS-2 đạt hiệu quả. [2][9][15]
NS 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ệ tƣơng đồng 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 và tƣơng đồng trong C++ và Otcl
Hình 4.3: Sự tƣơng đồng giữa C++ và OTcl
Lý do để NS sử dụng hai ngôn ngữ lập trình là do hệ mô phỏng phải thực hiện hai dạng yêu cầu xử lý khác nhau. Một mặt, việc mô phỏng chi tiết các giao thức đòi hỏi một ngôn ngữ lập trình hệ thống có khả năng thao tác hiệu quả với các byte,
C++ OTcl
packet header, và thực hiện những giải thuật với tập dữ liệu lớn. Với những công việc dạng này, tốc độ của thực hiện khi chạy rất quan trọng, và thời gian xử lý quay vòng (chạy mô phỏng, tìm lỗi, gỡ lỗi, dịch lại, chạy lại) kém quan trọng hơn. Mặt khác, khi nghiên cứu mạng, rất cần nhanh chóng thay đổi tham số hay cấu hình, hoặc đƣa ra nhiều kịch bản hoạt động khác nhau. Trong những trƣờng hợp nhƣ vậy, thời gian quay vòng (thay đổi mô hình và chạy lại) quan trọng hơn thời gian cấu hình ban đầu và thời gian chạy. NS thỏa mãn cả hai yêu cầu này với C++ và Otcl. C++ chạy nhanh nhƣng lại chậm khi cần có thay đổi, rất phù hợp cho việc triển khai chi tiết các giao thức. Otcl chạy chậm hơn nhiều, song lại có khả năng thay đổi rất nhanh (và có tính tƣơng tác tốt), có thể thỏa mãn tốt nhu cầu cấu hình hệ thống mô phỏng. NS sử dụng Tclcl (tcl – c linkage) nhƣ một lớp keo gắn kết các đối tƣợng và biến trong hai ngôn ngữ. 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:
Bộ lập lịch sự kiện Tctcl OTcl Tcl NS-2 T hƣ v iê ̣n c ác th àn h p hầ n m ạn g Hình 4.4: Kiến trúc của NS
Sơ đồ kiến trúc của NS thể hiện kiến trúc NS, trong hình 4.4 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. Event Scheduler và hầu hết các đối tƣợng Network Component đề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 đơn giản của NS 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 file text 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 đồ họa (Network Animator: NAM). Hình dƣới đây sẽ mô tả sự hoạt động của NS thông cua 3 mức (hình 4.5), nhƣ chúng ta thấy có mức kịch bản mô phỏng, mức kịch bản Tcl 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 kịch bản của NS để gọi các hàm của C++ ở mức dƣới cùng
Hình 4.5: Sự hoạt động của NS
Trong môi trƣờng Linux hình 4.6 biểu diễn kiến trúc thƣ mục NS2 và NAM. NS2 và NAM đều là các thƣ mục con của ns-allinone-2.xx. NS2 bao gồm các thực thi mô phỏng (bằng mã C++ và mã Otcl), các kịch bản Otcl kiểm tra tính hiệu lực và các kịch bản Otcl minh họa [9][15]
Hình 4.6: Tổ chức thƣ mục NS2
Để chạy một chƣơng trình mô phỏng NS2, theo tổ chức thƣ mục trong hình trên cần chuyển vào thƣ mục NS-2.33, gọi chƣơng trình bằng lệnh ns <tênfile.tcl>