Giới thiệu chung về OMNeT++

Một phần của tài liệu Nghiên cứu và mô phỏng giao thức định tuyến flooding trong WSN (Trang 70)

5.1.1. Tổng quan về OMNeT++ 5.1.1.1. OMNeT++ là gỡ?

OMNeT++ là viết tắt của cụm từ Objective Modular Network Testbed in C++. OMNeT++ là một ứng dụng cung cấp cho người sử dụng mụi trường để tiến hành mụ phỏng hoạt động của mạng. Mục đớch chớnh của ứng dụng là mụ phỏng hoạt động của mạng thụng tin, tuy nhiờn do tớnh phổ cập và linh hoạt của nú, OMNeT++ cũn được sử dụng trong nhiều lĩnh vực khỏc như mụ phỏng cỏc hệ thống thụng tin phức tạp, cỏc mạng kiểu hàng đợi (queing networks) hay cỏc hệ thống đa xử lý và cỏc hệ thống phần cứng phõn tỏn khỏc(multiprocessors and other distributed hardware systems),hoặc đỏnh giỏ kiến truc của phần cứng(validating or hardware architectures)…

5.1.1.2.Cỏc thành phần chớnh của OMNeT++

Trong OMNeT++ cú cỏc thành phần chớnh sau:

 Thư viện phần nhõn mụ phỏng (simulation kernel).

 Trỡnh biờn dịch cho ngụn ngữ mụ tả tỡnh trạng (topology description language) – NED (nedc).

 Trỡnh biờn tập đồ họa (graphical network editor) cho cỏc file NED (GNED).

 Giao diện đồ họa thực hiện mụ phỏng, cỏc liờn kết bờn trong cỏc file thực hiện mụ phỏng (Tkenv).

 Giao diện dũng thực hiện mụ phỏng (Cmdenv).

 Cụng cụ (giao diện đồ họa) vẽ đồ thị kết quả vector ở đầu ra (Plove).

 Cụng cụ (giao diện đồ họa) mụ tả kết quả vụ hướng ở đầu ra (Scalars).

Lờ Th Thanh Huyn 10A-ĐTVT-VH

 Cỏc tiện ớch khỏc.

 Cỏc tài liệu hướng dẫn, cỏc vớ dụ mụ phỏng…

5.1.1.3. Ứng dụng

OMNeT++ là một cụng cụ mụ phỏng cỏc hoạt động mạng bằng cỏc module được thiết kế hướng đối tượng. OMNeT++ thường được sử dụng trong cỏc ứng dụng chủ yếu như:

 Mụ hỡnh hoạt động của cỏc mạng thụng tin

 Mụ hỡnh giao thức

 Mụ hỡnh húa cỏc mạng kiểu hàng đợi

 Mụ hỡnh húa cỏc hệ thống đa bộ vi xử lý (multiprocessor) hoặc cỏc hệ thống phần cứng theo cỏc mụ hỡnh phõn tỏn khỏc (distributed hardware systems)

 Đỏnh giỏ kiến trỳc phần cứng

 Đỏnh giỏ hiệu quả hoạt động của cỏc hệ thống phức tạp…

5.1.1.4. Mụ hỡnh trong OMNeT++

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. Độ sõu của cỏc module lồng nhau 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ỏc cấu trỳc logic của cỏc hệ thống trong thực tế bằng cỏc cấu trỳc mụ hỡnh. Cỏc module trao đổi thụng tin với nhau thụng qua việc gửi cỏc message. Cỏc message này cú thể cú cấu trỳc phức tạp tựy ý. Cỏc module cú thể gửi cỏc message 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ỏc cổng và cỏc kết nối.

Cỏc module cú thể cú cỏc tham số của riờng nú. Cỏc 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.

Cỏc 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. Cỏc module này được coi là cỏc module đơn giản, và chỳng được lập trỡnh trong ngụn ngữ C++ bằng cỏch sử dụng cỏc thư viện mụ phỏng.

Một mụ hỡnh trong OMNeT++ chứa cỏc module lồng nhau cú cấu trỳc phõn cấp, trao đổi thụng tin với nhau bằng cỏch gửi cỏc message. Mỗi mụ hỡnh này thường biểu diễn cho một hệ thống mạng. Module mức cao nhất trong cấu trỳc phõn cấp được gọi

Lờ Th Thanh Huyn 10A-ĐTVT-VH

là module hệ thống. Module này cú thể chứa cỏc module con, cỏc module con cũng cú thể chứa cỏc module con của riờng nú. Độ sõu phõn cấp đối với cỏc module là khụng giới hạn, điều này 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 một hệ thống trong thực tế bằng cấu trỳc phõn cấp của OMNeT++.

Cấu trỳc của mụ hỡnh cú thể được mụ tả bằng ngụn ngữ NED của OMNeT++

Hỡnh 5.1. Cỏc module đơn giản và kết hợp

Cỏc module cú thể chứa nhiều module con và được gọi là module kết hợp. Cỏc module đơn giản là cỏc module cú cấp thấp nhất trong cấu trỳc phõn cấp. Cỏc module đơn giản chứa cỏc thuật toỏn của mụ hỡnh. Người sử dụng triển khai cỏc module đơn giản bằng ngụn ngữ C++, sử dụng cỏc thư viện mụ phỏng của OMNeT++.

Cỏc module trao đổi thụng tin bằng việc gửi cỏc message. Trong thực tế, message cú dạng khung (frame) hoặc là cỏc gúi tin (packet) được truyền đi trong mạng. Cỏc message cú thể cú cấu trỳc phức tạp tựy ý. Cỏc module đơn giản cú thể gửi cỏc message đi một cỏch trực tiếp đến vị trớ nhận hoặc gửi đi theo một đường dẫn định sẵn thụng qua cỏc cổng (gates) và cỏc liờn kết (links).

Cỏc cổng (gates) là cỏc cổng vào, ra của cỏc module. Message được gửi đi qua cỏc cổng ra và được nhận vào thụng qua cỏc cổng vào.

Mỗi kết nối (connection) hay cũn gọi là liờn kết (link) được tạo bờn trong một mức đơn trong cấu trỳc phõn cấp của cỏc module: bờn trong một module kết hợp, một kết nối cú thể được tạo ra giữa cỏc cổng tương ứng của hai module con, hoặc giữa cổng của module con với cổng của module kết hợp.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Tương ứng với cấu trỳc phõn cấp của một mụ hỡnh, cỏc message thường di chuyển qua một loạt cỏc kết nối với điểm bắt đầu và kết thỳc là cỏc module đơn giản. Tập cỏc kết nối đi từ một module đơn giản và đến một module đơn giản được gọi là route.

5.1.2. Sử dụng OMNeT++

5.1.2.1. Xõy dựng và chạy thử cỏc mụ hỡnh mụ phỏng

a. Một mụ hỡnh OMNeT++ bao gồm những phần sau

● Ngụn ngữ mụ tả topology – NED (file cú phần mở rộng .ned): mụ tả cấu trỳc của module với cỏc tham số, cỏc cổng… Cỏc file.ned cú thể được viết bằng bất kỳ bộ soạn thảo hoặc bất kỳ bộ soạn thảo hoặc sử dụng chương trỡnh GNED cú trong OMNeT++

● Định nghĩa cấu trỳc của cỏc message (cỏc file cú phần mở rộng .msg): Người sử dụng cú thể định nghĩa rất nhiều kiểu message và thờm cỏc trường dữ liệu cho chỳng. Chương trỡnh dịch opp_msgc của OMNeT++ sẽ dịch những định nghĩa này sang cỏc lớp C++ đầy đủ ( cỏc file này cú phần mở rộng là _m.cc và _m.h)

● Mó nguồn của cỏc module đơn giản. Đõy là cỏc file C++ với phần mở rộng là .h hoặc .cc.Cỏc file này sẽ quyết định cỏch thức hoạt động của cỏc module đơn giản.

b. Hệ thống mụ phỏng cung cấp cho ta cỏc thành phần sau

● Phần nhõn mụ phỏng. Phần này chứa code để quản lý quỏ trỡnh mụ phỏng và cỏc thư viện lớp mụ phỏng. Nú được viết bằng C++, được biờn dịch và được đặt cựng dạng với cỏc file thư viện (cỏc file cú phần mở rộng là .a hoặc .lib).

● Giao diện người sử dụng. Giao diện này được sử dụng khi thực hiện quỏ trỡnh mụ phỏng, tạo sự dễ dàng cho quỏ trỡnh sửa lỗi, biểu diễn (demonstration) hoặc khi thực hiện mụ phỏng theo từng khối (batch execution of simulations). Bản OMNet++ 4.0 cung cấp cho người dựng một giao diện IDE tớch hợp tất cả cỏc cụng cụ(GNED,Plove,scalars,trỡnh soạn thảo C++) giỳp cho việc xõy dựng chương mụ phỏng được dễ dàng.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.3. Giao diện người dựng của OMNet++ 4.0. c. Thực hiện mụ phỏng và phõn tớch kết quả

Cỏc chương trỡnh thực hiện mụ phỏng (the simulation executable) là cỏc chương trỡnh độc lập, tức là nú cú thể chạy trờn cỏc mỏy khỏc khụng cài đặt OMNeT++ hay cỏc file mụ hỡnh tương ứng. Khi chương trỡnh khởi động, nú bắt đầu đọc file cấu hỡnh (thụng thường là file omnetpp.ini). File này chứa cỏc thiết lập để điều khiển nhiều quỏ trỡnh mụ phỏng, trong trường hợp đơn giản nhất là cỏc quỏ trỡnh mụ phỏng này sẽ được thực hiện lần lượt bởi một chương trỡnh mụ phỏng (simulation program).

Đầu ra của quỏ trỡnh mụ phỏng là cỏc file dữ liệu. Cỏc file này cú thể là cỏc file vector, cỏc file vụ hướng hoặc cỏc file của người sử dụng. OMNeT++ cung cấp một cụng cụ đồ họa Plove để xem và vẽ ra nội dung của cỏc file vector. Tuy nhiờn chỳng ta cũng nờn hiểu rằng khú mà cú thể xử lý đầy đủ cỏc file kết quả mà chỉ dựng riờng OMNeT++; cỏc file này đều là cỏc file cú định dạng để cú thể đọc được bởi cỏc gúi xử lý toỏn học của cỏc chương trỡnh như Matlab hay Octave, hoặc cú thể được đưa vào tớnh của cỏc chương trỡnh như OpenOffice Calc, Gnumeric hay Microsoft

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Excel. Tất cả cỏc chương trỡnh này đều cú chức năng chuyờn dụng trong việc phõn tớch số húa, vẽ biểu diễn (visualization) vượt qua khả năng của OMNeT++.

Cỏc file vụ hướng cũng cú thể được biểu diễn bằng cỏc cụng cụ Scalar. Nú cú thể vẽ được cỏc biểu đồ, cỏc đồ thị dựa vào tập hợp cỏc tọa độ (x,y) và cú thể xuất dữ liệu vào clipboard để cú thể sử dụng trong cỏc chương trỡnh khỏc nhằm đưa những phõn tớch chi tiết hơn.

d. Giao diện người sử dụng

Mục đớch chớnh của giao diện người sử dụng là che những phần phức tạp bờn trong cấu trỳc của cỏc mụ hỡnh đối với người sử dụng, dễ dàng điều khiển quỏ trỡnh mụ phỏng, và cho phộp người sử dụng cú khả năng thay đổi cỏc biến hay cỏc đối tượng bờn trong của mụ hỡnh. Điều này là rất quan trọng đối với pha phỏt triển và sửa lỗi trong dự ỏn. Giao diện đồ họa cũng cú thể được sử dụng để trỡnh diễn hoạt động của mụ hỡnh.

Cựng một mụ hỡnh người sử dụng cú thể trờn nhiều giao diện khỏc nhau mà khụng cần phải thay đổi gỡ trong cỏc file mụ hỡnh. Người sử dụng cú thể kiểm thử và sửa lỗi rất dễ dàng qua giao diện đồ họa, cuối cựng cú thể chạy nú dựa trờn một giao diện đơn giản và nhanh chúng cú hỗ trợ thực hiện theo khối (batch execution).

e. Cỏc thư viện thành phần

Cỏc kiểu module cú thể được lưu tại những vị trớ độc lập với chỗ mà chỳng thực sự được sử dụng. Đặc điểm này cung cấp cho người sử dụng khả nhúm cỏc kiểu module lại với nhau và tạo ta cỏc thư viện thành phần.

f. Cỏc chương trỡnh mụ phỏng độc lập

Cỏc chương trỡnh thực hiện quỏ trỡnh mụ phỏng cú thể được lưu lại nhiều lần, khụng phụ thuộc vào cỏc mụ hỡnh, sử dụng cựng một thiết lập cho cỏc module đơn giản. Người sử dụng cú thể chỉ ra trong file cấu hỡnh mụ hỡnh nào sẽ được chạy. Điều này tạo khả năng cho người sử dụng cú thể xõy dựng những chương trỡnh thực hiện lớn bao gồm nhiều quỏ trỡnh mụ phỏng, và phõn phối nú như một cụng cụ mụ phỏng độc lập. Khả năng linh hoạt của ngụn ngữ mụ tả topology cũng hỗ trợ cho hướng tiếp cận này.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

5.1.2.2 Chạy cỏc ứng dụng trong OMNeT++

Như đó trỡnh bày ở phần mở đầu, một hệ thống mạng mụ phỏng trong OMNeT++ gồm cỏc thành phần sau:

● Cỏc file.ned mụ tả topo mạng.

● Cỏc file cú phần mở rộng .msg chứa khai bỏo cỏc message.

● Cỏc file C++ (cú phần mở rộng là .cc trong UNIX,LINUX hoặc .cpp trong Windows).

 Quỏ trỡnh xõy dựng một chương trỡnh mụ phỏng.

● Đầu tiờn dịch cỏc file Message thành C++ (cú phần mở rộng là _m.cc và _m.h) sử dụng message compiler (opp_msgc).

● Tiếp theo cỏc file này kết hợp và liờn kết với cỏc file mó nguồn C++(cú phần mở rộng .cc và .h),thư viện lừi của chương trỡnh mụ phỏng,thư viện của giao diện người dựng.

● Quỏ trỡnh tiếp tục bằng việc kết hợp với file mụ tả topo mạng (cú phần mở rụng .ned) và file cấu hỡnh ( cú phần mở rộng .ini) để chạy chương trỡnh mụ phỏng. Quỏ trỡnh mụ phỏng sẽ tạo ra cỏc file chứa kết quả mụ phỏng (cỏc file cú phần mở rộng là .vec .sca .sna).

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.4. Lược đồ xõy dựng và chạy một chương trỡnh mụ phỏng OMNeT++

File *.ned là cỏc file mụ tả topo mạng cũng như cấu trỳc của cỏc modul, nú sự dụng ngụn ngữ NED (Nework Description ), là ngụn ngữ chuyờn biệt dựng riờng cho OmNet++. Sự phỏt triển tiếp theo của NED là GNED (Graphic NED) làm cho việc mụ tả topo mạng được trực quan hơn bằng cỏch dựng cỏc cụng cụ đồ hoạ để mụ tả.

Cỏc file xử lý của cỏc simple moduls là phần cốt lừi khi viết chương trỡnh mụ phỏng và được viết bằng ngụn ngữ C++ bằng cỏch kế thừa cỏc lớp cú sẵn của OmNet++, người viết triển khai cỏc hoạt động của mạng như định tuyến, xử lớ gúi tin đến và đi, xỏc định hành vi của cỏc simple modul được mụ tả trong *.ned khi cú sự kiện xảy ra với nú…

Thư viện lừi của chương trỡnh mụ phỏng được cung cấp bởi OmNet++, nú bao gồm rất nhiều cỏc lớp và cỏc hàm cú sẵn phục vụ cho chương trỡnh mụ phỏng như cỏc lớp cSimplemodul, cMessage..., cỏc hàm ngẫu nhiờn… Thư viện giao diện người dựng cung cấp giao diện cho chương trỡnh mụ phỏng. OmNet++ với cỏc phiờn bản

Lờ Th Thanh Huyn 10A-ĐTVT-VH

gần đõy sử dụng hai kiểu giao diện là giao diện dũng lệnh cmd (command) và giao diện đồ hoạ dựa trờn tcl/tk. Giao diện đồ hoạ rất trực quan nờn được ưa dựng hơn. Sau khi dịch và liờn kết ta được một chương trỡnh mụ phỏng dựa trờn nền OmNet++.

File omnetpp.ini để khởi động cỏc giỏ trị cần thiết. Omnetpp.ini do người lập trỡnh viết, nú rất quan trọng để chạy một chương trỡnh mụ phỏng với cỏc tham số được thay đổi để cú được kết quả thống kờ mong muốn.

Cuối cựng là cỏc file kết quả bao gồm file *.vec là cỏc file vector, nú là cỏc biến thay đổi theo thời gian trong quỏ trỡnh mụ phỏng, giỏ trị của biến và thời gian tương ứng được lưu vào file này. Trong quỏ trỡnh viết code sẽ xỏc định biến nào được lưu. File *.sna phục vụ cho quỏ trỡnh sửa lỗi. File *.sca (scalar file) lưu cỏc giỏ trị thống kờ cú được sau khi kết thỳc mụ phỏng, vớ dụ như số cuộc gọi đó thực hiện số cuộc gọi bị từ chối… Để xử lớ kết quả thống kờ đạt được, ta cú thể viết một chương trỡnh nhỏ hoặc sử dụng cỏc cụng cụ cú sẵn. OmNet++ cung cấp chương trỡnh Plove để vẽ cỏc file *.vec, cũn đối với cỏc file *.sca ta cú thể dựng một chương trỡnh tớnh toỏn bất kỡ.

5.2 Kết quả mụ phỏng giao thức định tuyến FLOODING sử dụng OMNeT++ 4.0

Mụ hỡnh mạng đưa ra gồm 16 node, giả sử ban đầu node[0] cú dữ liệu sẽ tiến hành gửi bản tin cMessageFLOOD đến tất cả cỏc node hàng xúm của nú đú là node[1], node[3], node[15]. Khi mà node nào cú dữ liệu thỡ node đú sẽ từ màu trắng chuyển sang màu đỏ thẫm, mụ tả như hỡnh 5.5 và 5.6

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.6. Node[0] gửi bản tin cMessageFLOOD đến node[15].

Tiếp tục node[0] sẽ gửi bản tin cũn lại cho node[1] và khi đú thỡ cả 3 node: node[1], node[15] và node[3] và đều chuyển thành màu đỏ thẫm để chứng tỏ rằng 3 node này đang cú dữ liệu. Sau khi node[1] nhận được dữ liệu từ node[0] thỡ nú lại tiếp tục gửi bản tin cMessageFLOOD đến cỏc node lõn cận của nú kể cả node[0], mụ tả như hỡnh 5.7 và 5.8

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.8. Node[1] gửi bản tin cMessageFLOOD đến node[15].

Tiếp tục node[1] gửi bản tin cũn lại cho node[0]. Sau đú, node[3] cũng tiến hành gửi bản tin cMessageFLOOD đến tất cả cỏc node lõn cận của nú bao gồm : node[0], node[1], node[15], node[6] và node[7], mụ tả như hỡnh 5.9, hỡnh 5.10, hỡnh 5.11, hỡnh 5.12, hỡnh 5.13.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.10. Node[3] gửi bản tin cMessageFLOOD đến node[1].

Hỡnh 5.11. Node[3] gửi bản tin cMessageFLOOD đến Node[6].

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.13. Node[3] gửi bản tin cMessageFLOOD đến node[15].

Đõy là hỡnh ảnh sau khi node[3] gửi bản tin cMessageFLOOD đến tất cả cỏc node lõn cận của nú. Do đú, cỏc node cú dữ liệu lỳc này sẽ là cỏc node cú màu đỏ thẫm, mụ tả như hỡnh 5.14.

Hỡnh 5.14. Mụ tả cỏc node cú dữ liệu sau khi node[3] gửi xong dữ liệu

Quỏ trỡnh vẫn tiếp tục diễn ra như vậy cho đến khi tất cả cỏc node đều cú dữ liệu và đều chuyển sang màu đỏ thẫm, mụ tả như hỡnh 5.15.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

Hỡnh 5.15. Quỏ trỡnh gửi dữ liệu của node[9] cho node[7].

Sau khi mà tất cả cỏc node đều cú dữ liệu, tiếp tục quỏ trỡnh truyền dữ liệu vũng 2, và cỏc node cú dữ liệu sẽ chuyển sang màu đỏ tươi, mụ tả như hỡnh 5.16.

Lờ Th Thanh Huyn 10A-ĐTVT-VH

KẾT LUẬN CHUNG

Một phần của tài liệu Nghiên cứu và mô phỏng giao thức định tuyến flooding trong WSN (Trang 70)