Chương trình mơ phỏng OMNet++

Một phần của tài liệu Giao thức định tuyến LEACH trong WSN (Trang 41 - 46)

OMNeT++ (Objective Modular Network Testbed in C++) là một ứng dụng cung cấp môi trường mô phỏng sự kiện rời rạc. Đây là một chương trình hướng đối tượng và có mã nguồn mở. Ứng dụng chủ yếu của OMNeT++ là cung cấp cho người sử dụng môi trường để thực hiện mô phỏng các mạng viễn thơng, tuy nhiên, do tính phổ cập và cấu trúc linh hoạt, nó cịn được sử dụng trong rất nhiều lĩnh vực khác như mô phỏng các hệ thống công nghệ thông tin phức tạp, các loại mạng kiểu hàng đợi hay các kiến trúc phần cứng… [11]

Hình 3.1. Giao diện OMNeT++

Bản thân OMNeT++ không phải là một chương trình mơ phỏng cho bất cứ một ứng dụng cụ thể nào, nhưng hơn thế, nó cung cấp một cấu trúc mơ phỏng và các công cụ để người sử dụng viết ra các ứng dụng mô phỏng. Một trong những đặc điểm cơ bản của cấu trúc đó là kiến trúc phân cấp của các đơn vị mô phỏng. Mỗi module được lập trình bằng ngơn ngữ C++, sau đó được kết nối với nhau thành một cấu trúc lớn hơn nhờ sử dụng ngôn ngữ bậc cao (NED). Đồng thời, OMNeT++ hỗ trợ giao diện đồ họa mở rộng và do cấu trúc phân cấp nên phần nhân mô phỏng cũng như các module rất dễ dàng được nhúng vào các ứng dụng khác.

Mặc dù bản thân OMNeT++ khơng phải là một chương trình mơ phỏng mạng nhưng hiện nay, nó đang ngày càng được sử dụng rộng rãi như là một công cụ mô phỏng mạng trong công nghệ truyền thông cũng như trong các lĩnh vực khác. OMNeT++ có thể sử dụng để giải quyết các vấn đề sau:

 Mơ hình hóa các mạng truyền thơng vơ tuyến và hữu tuyến.  Mô phỏng giao thức.

 Mô phỏng các mạng kiểu hàng đợi.

 Mô phỏng các hệ thống phần cứng phân tán và các đơn vị xử lý trung tâm song song.

 Thử nghiệm các kiến trúc phần cứng.

 Đánh giá hiệu năng của các hệ thống phần mềm phức tạp.

3.1.2.1. Khái niệm mơ hình

Một mơ hình trong OMNeT++ bao gồm các module lồng nhau có cấu trúc phân cấp. Mức độ phân cấp của các module là không giới hạn, điều này cho phép người sử dụng có thể biểu diễn cấu trúc logic của các hệ thống trong thực tế bằng mộtcấu trúc mơ hình. Các module có thể truyền thơng với nhau thơng qua việc trao đổi bản tin (message). Bản tin này có thể có cấu trúc phức tạp tuỳ ý. Module có thể gửi bản tin này theo hai cách, một là gửi trực tiếp tới địa chỉ nhận, hai là gửi đi theo một đường dẫn được định sẵn, thông qua cổng và các kết nối.

Các module có thể có các tham số của riêng nó. Những tham số này có thể được sử dụng để chỉnh sửa các thuộc tính của module và để biểu diễn cho topology của mơ hình. Module ở mức thấp nhất trong cấu trúc phân cấp đóng gói các thuộc tính. Module này được coi là các module đơn giản, chúng được lập trình bằng ngơn ngữ C+ +, sử dụng lớp thư viện mơ phỏng.

3.1.2.2. Kiến trúc phân cấp của mơ hình

Như đã trình bày ở trên, mơ hình trong OMNeT++ bao gồm nhiều module, các module này có thể truyền thơng với nhau thông qua trao đổi các bản tin. Module đơn vị được gọi là module đơn giản (simple module), chúng được viết bằng ngôn ngữ C++, sử dụng các lớp thư viện mơ phỏng. Module đơn giản có thể được ghép vào module phức (compound module) tạo thành các module lơng nhau có cấu trúc phân cấp, trong đó, mức độ phân cấp của module phức là không giới hạn. Module mức cao nhất trong cấu trúc phân cấp được gọi là module hệ thống. Chính cấu trúc phân cấp của OMNeT+ + cho phép người sử dụng có thể dễ dàng biểu diễn một cấu trúc logic của hệ thống trong thực tế bằng một mơ hình.

Hình 3.2. Module đơn giản và module phức

Một module đơn giản điển hình, gửi bản tin thơng qua các cổng, nhưng nó cũng có thể gửi các bản tin một cách trực tiếp tới module đích. Cổng là giao diện đầu vào và đầu ra của một module, trong đó: bản tin được gửi thơng qua cổng đầu ra và nhận thông qua cổng đầu vào. Một cổng đầu vào và một cổng đầu ra có thể được nối với nhau bằng một kết nối, kết nối này chỉ được tạo ra trong cùng một cấp trong phân cấp module hoặc giữa các module phức với nhau.

3.1.2.3. Kiểu module

Cả module phức và module đơn giản đều thuộc kiểu module. Trong khi khai báo mơ hình, người sử dụng phải định nghĩa kiểu module; xác định xem nó là thành phần của module phức nào. Cuối cùng, người lập trình phải tạo một module hệ thống như là một đối tượng cụ thể của kiểu module đã định nghĩa trước đó, tất cả các module của mạng đều là module con (hoặc là con của module con) của module hệ thống.

Khi một kiểu module được sử dụng như một khối dựng sẵn, thì người dùng hồn tồn có thể xác định nó là module đơn giản hoặc module phức. Thuộc tính này cho phép người sử dụng có thể chia một module đơn giản thành nhiều module đơn giản và sau đó nhúng vào một module phức, hoặc ngược lại, có thể kết hợp chức năng của một module phức vào một module đơn giản duy nhất mà không làm thay đổi điểu module đã được định nghĩa.

Hình 3.3. Mơ hình phân cấp của module và kênh

Kiểu module có thể được lưu trong một file riêng, điều đó có nghĩa là người sử dụng có thể nhóm nhiều kiểu module để tạo ra một thư viện thành phần.

3.1.2.4. Bản tin, cổng và kết nối

Các module truyền thông với nhau bằng cách gửi bản tin. Do mơ hình phân cấp, bản tin được truyền qua hàng loạt các kết nối, trong đó, chúng chỉ được bắt đầu và kết thúc tại một module đơn giản. Với mỗi một ứng dụng mơ phỏng cụ thể, bản tin có thể đóng vai trị là khung hoặc gói tin trong mạng máy tính, u cầu xử lý hay luồng lưu lượng trong các mạng kiểu xếp hàng hoặc các thực thể di động khác. Người dùng có thể tùy ý xây dựng cấu trúc của bản tin phù hợp với yêu cầu sử dụng của mình. Module đơn giản gửi bản tin trực tiếp hoặc theo đường được định nghĩa trước thông qua cổng các kết nối.

Thời gian mô phỏng cục bộ của một module tăng lên khi nó nhận một bản tin. Bản tin này có thể đến từ một module khác hoặc từ chính nó (self-message là loại bản tin được dùng để thực hiện định thời).

Cổng là giao diện đầu vào và đầu ra của một module, các bản tin được gửi đi thông qua cổng đầu ra và nhận qua cổng đầu vào.

Kết nối được tạo ra giữa những module cùng cấp trong cấu trúc module phân cấp với nhau hoặc giữa các module phức, giữa cổng tương ứng của hai module con hoặc một cổng của module con với một cổng của module phức.

Hình 3.4: Kết nối trong OMNeT++

3.1.2.5. Truyền gói tin

Khi một gói tin được gửi ra từ một cổng, nó sẽ phải đi qua hàng loạt kết nối cho đến khi nó tới module đích. Chúng ta gọi chuỗi kết nối đó là một đường kết nối. Một vài kết nối trên đường có thể có một kênh liên kết riêng, nhưng trên một đường, chỉ có một kênh là cho phép truyền theo chu kỳ do nhân mô phỏng quy định. Kênh này được gọi là kênh truyền tải.

Một gói tin chỉ được truyền khi kênh truyền tải rỗi. Điều đó có nghĩa là sau mỗi một lần truyền gói tin, module gửi sẽ phải chờ cho tới khi q trình truyền hồn thành nếu muốn tiếp tục gửi gói tin khác.

Người lập trình có thể trỏ tới kênh truyền tài bằng cách sử dụng lệnh

getTranmissionChannel() tại cổng ra. Lệnh isBusy() và getTransmissionFinishTime()

để biết kênh có đang rỗi khơng và bao giờ thì q trình truyền gói tin kết thúc.

Hình 3.5: Mơ hình truyền gói tin trong OMNeT++

Ngồi ra, một kênh có ba tham số đặc trưng rất thuận tiện cho các mơ hình mơ phỏng mạng thơng tin. Ba tham số này bao gồm:

 Độ trễ đường truyền (s): là tổng thời gian đến của gói tin bị trễ đi khi truyền qua kênh

 Tỉ số lỗi bit (số lỗi/bit): là xác suất các bit bị truyền sai. Do đó xác suất để một gói tin độ dài n bit truyền đi chính xác là:

P(gói tin gửi đi được nhận chính xác) = (1 - ber)n

Trong đó ber là tỉ số lỗi bit và n là số bit của gói tin. Tỉ số lỗi bit ảnh hưởng đến q trình truyền gói tin qua kênh. Các gói tin truyền đi đều có một cờ lỗi, cờ này sẽ được thiết lập khi việc truyền gói có lỗi.

 Tỉ số dữ liệu (bit/s): được sử dụng để tính thời gian để truyền một gói tin. Khi tỉ số này được sử dụng, q trình gửi gói tin đi sẽ tương ứng với việc truyền bit đầu tiên và gói tin được tính là đến nơi sau khi bên nhận đã nhận được bit cuối cùng.

Một phần của tài liệu Giao thức định tuyến LEACH trong WSN (Trang 41 - 46)

Tải bản đầy đủ (DOCX)

(61 trang)
w