Hiện nay, các nghiên cứu về mã mạng chủ yếu dựa trên các mô hình và các công cụ phân tích. Tuy nhiên, với sự ra đời của giao thức và các ứng dụng thực tế thì việc mô phỏng mã mạng trong các mạng phức tạp ngày càng trở nên cần thiết.
Mặc dù mã mạng đã được thực hiện trong NS, OPNET và một số công cụ mô phỏng khác cũng có những ưu điểm nhất định, tuy nhiên trong thực tế vẫn chưa có thư
viện mã mạng chuẩn, hướng phát triển nằm thưa giữa các nhóm nghiên cứu khác nhau và không thiết lập được code chung. Những tính năng chung trong một lĩnh vực nghiên cứu đã được xét thậm chí phải xây dựng lại từđầu.
Một nhược điểm quan trọng của các phương pháp này là mô phỏng một mạng phức tạp rất khó khăn.
Một công cụ mô phỏng mã mạng khác là SlimSim và Lava. Mặc dù nó có lợi thế
là ít code, và có khả năng mô phỏng mạng không dây. Tuy nhiên, nhược điểm nó được phát triển từ 1 người nên chỉ thực hiện được các tính năng cơ bản cho các nhu cầu nghiên cứu cụ thể và phải mất thời gian phát triển rất lâu.
Như vậy, NECO như là một bước đầu tiên hướng tới một lõi chung cho mô phỏng mã nguồn mở, hiệu suất cao đối với truyền thông mã mạng. NECO là được viết hoàn toàn bằng Python, cho phép đánh giá mã mạng dựa trên các giao thức.
Đặc điểm chính của nó bao gồm: + Xác định các mô hình mạng. + Các giao thức Network coding.
+ Quan sát hoạt động của mạng cũng như các số liệu thống kê khác.
+ Mô phỏng được viết toàn bộ bằng Python và dễ dàng mở rộng các mô đun.
NECO nhằm mục đích đánh giá mã mạng dựa trên các giao thức. Các khả năng NECo có thểđược chia thành hai nhóm: a, Tính năng thực thi trước và b, phần mở rộng. Cách sử thông thường của NECO ở cả trong chếđộđồ họa và văn bản, có thể bao gồm việc tạo đồ thị, chọn nút đích và nút nguồn, xác định giao thức định tuyến và giao thức mã mạng, hiển thị hoạt động của mạng trong thời gian thực. Sau đó sử dụng giao diện người dùng đồ họa hoặc giao diện text tại thiết bị đầu cuối. Dữ liệu mô phỏng có thể được chiết xuất bằng cách dịch các tập tin thống kê được tạo ra liền mạch.
4.2.1 Tính năng người dùng, giao diện và đầu ra
Các tính năng thực thi trước chính của NECO bao gồm:
- Tạo các đồ thị ngẫu nhiên, chọn các đồ thị theo định dạng chuẩn graphics [29]; - Các giao thức mã mạng và giao thức flooding cơ bản trong một số phiên của giao thức RLNC;
- Các giao thức định tuyến cơ bản, giao thức truyền trực tiếp và flooding.
- Lưu các số liệu thống kê trong file python là Cpickle theo cấu trúc dữ liệu mềm dẻo python hash.
- Một số giao diện người dùng khác.
Có 3 cách để thực hiện mô phỏng trong NECO: giao diện người dùng đồ họa (Graphic User Interface), dòng lệnh (Command line) và file XML để thiết lập các tham số của mô phỏng. Giao diện người dùng đồ họa có thể sử dụng dễ dàng tìm lỗi, hiển thị
các đồ thị và kiểm tra các giao thức như chỉ ra trên hình 4.1.
Giao diện người dùng đồ họa của NECO được chia làm 3 phần. Bên trái là thành phần điều khiển trong đó các tham số của mô phỏng có thểđược thay đổi trước khi thực hiện mô phỏng và đầu ra của mô phỏng được thay đổi khi chạy mô phỏng. Phần mô hình mạng ờ giữa. Biểu đồ bên phải cho thấy sựảnh hưởng của mô hình mạng trong các giao thức mã mạng.
Hình 4.1: Giao diện người dùng đồ họa của NECO [28]
Tùy chọn dòng lệnh cũng đưa ra đầu ra giống như trong shell trên hình 4.1.
Có thể thiết lập các tham số mô phỏng thông qua dạng XML. Có thể thực hiện
được bằng tùy chọn giao diện người dùng đồ họa hoặc tùy chọn dòng lệnh. Ta có thể
lưu các tham số mô phỏng hiện tại tới một file XML mới. File này được tạo theo cấu trúc đơn giản được mô tả trong hình 4.2.
Hình 4.2: Cấu trúc XML để tải và lưu các tham số mô phỏng trong NECO [32].
4.2.2 Phát triển các mô đun mở rộng
NECO được tính toán để có thể mở rộng, cho phép người sử dụng có thể thêm các chức năng bổ sung (Ví dụ như các giao thức mới, các giao thức định tuyến, kiểu nút…) vào bộ mô phỏng mà không cần phải sửa lõi của bộ mô phỏng. Người sử dụng có thể dễ
dàng tạo các lớp tương ứng với phần mở rộng và thêm các thông tin liên quan vào file XML mô tả các chức năng của bộ mô phỏng. Giao diện người dùng đồ họa cũng tự động thay đổi tương ứng.
4.2.3 Các số liệu thống kê
NECO bao gồm các phương pháp để lưu các số liệu thống kê quan trọng, có thể được tìm thấy trong lớp Statistics. Lớp Statistics chứa 2 phương pháp chính:
writeConstant và writeTimeDependent. Phương pháp đầu tiên có thể được sử dụng để
lưu các thông tin không đổi, Ví dụ như các tham số đồ họa không đổi hoặc simulation seeds. Phương pháp thứ 2 được dùng để lưu các biến thay đổi theo thời gian, Ví dụ như
số lượng gói mã mỗi nút nhận được tại mỗi bước mô phỏng.
4.3 Cấu trúc của phần mềm mô phỏng
Phần này trình bày tổng quan về cấu trúc dữ liệu chính của phần mềm mô phỏng.