Giới thiệu về OMNET++
Abstract: Chúng ta đang sống trong thời đại internet, các máy tính được kết nối với nhau tạo thành một mạng lưới. Chúng ta chỉ cần truy cập vào một địa chỉ nào đó, và như thế là 2 máy được kết nối với nhau. Tuy nhiên, đó là tâng application, vậy tầng vật lý sẽ thực hiện như thế nào? Làm thế nào ...
Abstract: Chúng ta đang sống trong thời đại internet, các máy tính được kết nối với nhau tạo thành một mạng lưới. Chúng ta chỉ cần truy cập vào một địa chỉ nào đó, và như thế là 2 máy được kết nối với nhau. Tuy nhiên, đó là tâng application, vậy tầng vật lý sẽ thực hiện như thế nào? Làm thế nào để có thể xác định chất lượng, sự khả thi nếu ta nghĩ ra một thuật toán định tuyến cho mạng? Trong bài viết này, tôi giới thiệu về omnetpp, một công cụ mô phỏng về định tuyến mạng mà tôi đang nghiên cứu trong thời gian gần đây.
I. Giới thiếu về các tầng vật lý OSI
Trong phần này, tôi xin phép trình bày tổng quan về các tầng vật lý OSI đã được học ở đại học, như trường tôi, môn này được gọi là mạng máy máy tính.
Theo wikipedia, thì mô hình OSI được định nghĩa:
Mô hình OSI là một thiết kế dựa vào nguyên lý tầng cấp, lý giải một cách trừu tượng kỹ thuật kết nối truyền thông giữa các máy vi tính và thiết kế giao thức mạng giữa chúng.
Mô hình OSI được chia thành 7 tầng như trong hình
-
Tầng 1: Tầng vật lý (Physical Layer)
Tầng vật lý định nghĩa tất cả các đặc tả về điện và vật lý cho các thiết bị
- Thiết lập hoặc ngắt mạch kết nối điện
- Tham gia vào quy trình mà trong đó các tài nguyên truyền thông được chia sẻ hiệu quả giữa nhiều người dùng.
- Điều chế (modulation), hoặc biến đổi giữa biểu diễn dữ liệu số
-
Tầng 2: Tầng liên kết dữ liệu
Tầng liên kết dữ liệu cung cấp các phương tiện có tính chức năng và quy trình để truyền dữ liệu giữa các thực thể mạng, phát hiện và có thể sửa chữa các lỗi trong tầng vật lý nếu có. Cách đánh địa chỉ mang tính vật lý, nghĩa là địa chỉ (địa chỉ MAC) được mã hóa cứng vào trong các thẻ mạng (network card) khi chúng được sản xuất.
-
Tầng 3: Tầng mạng (Network Layer)
Tầng mạng cung cấp các chức năng và quy trình cho việc truyền các chuỗi dữ liệu có độ dài đa dạng, từ một nguồn tới một đích, thông qua một hoặc nhiều mạng, trong khi vẫn duy trì chất lượng dịch vụ mà tầng giao vận yêu cầu. Tầng mạng thực hiện chức năng định tuyến,.Các thiết bị định tuyến (router) hoạt động tại tầng này — gửi dữ liệu ra khắp mạng mở rộng, làm cho liên mạng trở nên khả thi
-
Tầng giao vận (Transport Layer)
Tầng giao vận cung cấp dịch vụ chuyên dụng chuyển dữ liệu giữa các người dùng tại đầu cuối, nhờ đó các tầng trên không phải quan tâm đến việc cung cấp dịch vụ truyền dữ liệu đáng tin cậy và hiệu quả. Tầng giao vận kiểm soát độ tin cậy của một kết nối được cho trước. Một số giao thức có định hướng trạng thái và kết nối. Có nghĩa là tầng giao vận có thể theo dõi các gói tin và truyền lại các gói bị thất bại.
-
Tầng phiên (Session layer)
Tầng phiên kiểm soát các phiên hội thoại giữa các máy tính. Tầng này thiết lập, quản lý và kết thúc các kết nối giữa trình ứng dụng địa phương và trình ứng dụng ở xa. Tầng này còn hỗ trợ hoạt động song công hoặc bán song công hoặc đơn công và thiết lập các quy trình đánh dấu điểm hoàn thành - giúp việc phục hồi truyền thông nhanh hơn khi có lỗi xảy ra, vì điểm đã hoàn thành đã được đánh dấu - trì hoãn, kết thúc và khởi động lại.
-
Tầng trình diễn (Presentation layer)
Lớp trình diễn hoạt động như tầng dữ liệu trên mạng. lớp này trên máy tính truyền dữ liệu làm nhiệm vụ dịch dữ liệu được gửi từ tầng Application sang dạng Fomat chung. Và tại máy tính nhận, lớp này lại chuyển từ Fomat chung sang định dạng của tầng Application. Lớp thể hiện thực hiện các chức năng sau: - Dịch các mã kí tự từ ASCII sang EBCDIC. - Chuyển đổi dữ liệu, ví dụ từ số interger sang số dấu phảy động. - Nén dữ liệu để giảm lượng dữ liệu truyền trên mạng. - Mã hoá và giải mã dữ liệu để đảm bảo sự bảo mật trên mạng.
-
Tầng ứng dụng (Application layer)
Tầng ứng dụng là tầng gần với người sử dụng nhất. Nó cung cấp phương tiện cho người dùng truy nhập các thông tin và dữ liệu trên mạng thông qua chương trình ứng dụng. Tầng này là giao diện chính để người dùng tương tác với chương trình ứng dụng, và qua đó với mạng. Một số ví dụ về các ứng dụng trong tầng này bao gồm Telnet, Giao thức truyền tập tin FTP và Giao thức truyền thư điện tử SMTP, HTTP, X.400 Mail remote
Trong phần này, tôi chỉ giới thiệu lại 7 tầng ứng dụng OSI, và theo một số tài liệu, thì omnet++ có thể mô phỏng lại toàn bộ 7 tầng của OSI, tuy nhiên, tôi hiện tại chỉ mới làm việc được trên tầng 3 và tầng 4.
Vậy omnet++ là gì?
II. Giới thiệu OMNET++
-
Giới thiệu về OMNET++.
OMNET++ (Objective Modular Network Tested in C++) là một phần mềm mô phỏng nhằm thực hiện:
- Mô phỏng lưu lượng của một mạng viễn thông
- Mô phỏng các giao thức
- Mô phỏng mạng đa xử lý và phân bố rời rạc các hệ phần cứng
- Kiểm tra tính hợp lệ của cấu trúc phần cứng
- Đánh giá hoạt động của những hệ thống phần mềm phức tạp
Nó sẽ giúp mình mô phỏng 1 cái máy tính hoặc 1 con sensor. Để dễ hiểu hơn, chúng ta thử ví dụ. Bạn nghĩ ra một thuật toán định tuyến dùng trong mạng máy tính và bạn muốn kiểm chứng tính hiệu quả của thuật toán đó. Vậy chúng ta sẽ làm thế nào? Mình giả sử là thuật toán của bạn là thuật toán định tuyến. Vậy nếu bình thường bạn muốn kiểm chứng hiệu năng của thuật toán đó em cần phải làm cho card mạng của máy tính có thể chạy được thuật toán của bạn. Điều này gần như khôg thể làm được, vì thuật toán định tuyến của card mạng thường được cài đặt sẵn lúc sản xuất. Và OMNET++ đã được ra đời với các chức năng như trên để giải quyết vấn đề đã được trình bày. Nó sẽ giúp chúng ta kiểm chứng hoạt động các thuật toán mà mình đề xuất xem thuật toán của mình chạy có được không, so với các thuật toán khác thì hiệu năng có tốt hơn không.
Vậy cài đặt OMNET++ như thế nào?
-
Các thành phần của OMNET++.
Về cơ bản 1 thí nghiệm của omnet sẽ gồm có 3 loại file:
- File .ned để mô tả kịch bản, nó nhue kiểu bản thiết kế layout của mạng, của node
- File omnet.pp để khởi tạo các parameter
- File .cpp để viết các function cho các node. Trong file .cpp thì có 2 hàm quan trọng là hàm handleUpperMessage và handleLowerMessage. Hàm đầu là hàm xử lý các gói tin nhận được từ tầng trên, hàm sau là hàm xử lý các gói tin nhận được từ tầng dưới
-
Cài đặt OMNET++ trên window.
Các bạn có thể download bản OMNET++ mới nhất ở đây hoặc các phiên bản cũ. Sau khi download xong, các bạn giải nén và thực hiện như các bước ở dưới đây.
- B1. OMNET++ được cài đặt bằng dòng lệnh, và để sử dụng, ta chỉ cần kích đúp vào file mingwenv.cmd
- B2. Kiểm tra sự toàn vẹn của tệp tin configure.user bằng câu lệnh notepad configure.user. Nếu như nó tệp tin không toàn vẹn, ta chỉ cần download lại và làm từ đầu.
- B3. Cài đặt các thư viện và các tiến trình xử lý của chương trình. Ta chỉ cần gõ 2 lệnh sau để build
- ./configure
- make
- B4. Mở OMNET++ IDE. Sau khi cài build các process và thư viện xong, ta chỉ cần gõ omnetpp để khởi động IDE, IDE của OMNET++ được xây dựng từ nhân của eclipse, do đó, các bước tương tự eclipse.
Trong phần này, tôi đã giới thiệu qua về OMNET++ là gì, các thành phần cơ bản và cách cài đặt nó trên window. Trong phần tiếp theo, tôi sẽ trình bày về xây dựng một ví dụ một mô phỏng đơn giản về việc gửi và nhận gói tin giữa 2 máy tính, được gọi là tic toc.
IV. Cài đặt demo tictoc
Đề cài đặt demo tictoc này, ta cần cài đặt OMNET++ và khởi động IDE của nó như trình bày ở trên, sau đó, thực hiện các bước như dưới đây.
-
B1. Đầu tiên, ta chọn new project OMNET++ bằng cách chọn File > New > OMNet++ project.
-
B2. Nhập tên, ví dụ tictocdemo, sau đó, chọn next, chọn Empty project, sau đó chọn finish.
-
B3. Tạo file .ned bằng cách kích chuột phải vào project > New > Network description file. Đổi tên, và giữ lại đuổi .ned. Bấm next, chọn empty NED file và finish.
-
B3. Chọn simple module như hình được khoanh đỏ trong hình vẽ.
sau đó, đổi tên thành computer
-
B4. Chọn network như hình được khoanh đỏ trong hình vẽ.
-
B5. Cấu hình cho network. Chọn vào tab Source, ở trong block simple Computer, ta thêm dòng sau:
gates: input in; output out;
-
B6. Tạo connect. Ta quay lại bên tab design, sử dụng bằng cách kéo biểu computer ở ngoài vào trong network, và đổi tên, ta được như hình sau.
Sau đó, chọn connect được lựa chọn như trong hình,
với điểm bắt đầu từ computer_tic sang computer_toc. Và lựa chọn lại lại từ computer_toc sang computer_tic, ta được kết quả như hình vẽ.
-
B7. Tạo file cc. Ta chọn project, kích chuột phải, chọn new > Source file. Nhập tên file với đuôi là .cc, ví dụ, tôi lựa chọn tên là computer.cc. Và finish. Tiếp theo, tôi định nghĩa file này với hai hàm initialize() và handleMessage(cMessage *msg) là hai hàm cơ bản của OMNeT++ với đoạn code như dưới dây.
class Computer: public cSimpleModule { protected: virtual void initialize(); virtual void handleMessage(cMessage *msg); }; Define_Module(Computer) ; void Computer::initialize() { if (strcmp("computer_tic", getName()) == 0) { cMessage *msg = new cMessage("tictocMsg"); send(msg, "out"); } } void Computer::handleMessage(cMessage *msg) { send(msg, "out"); } Lưu ý, tên class phải giống như tên của module được định nghĩa như ở trên.
-
B7. Tạo file init, tương tự các file trên, ta tạo ra file omnet.ini. Ta định nghĩa nội dung của file này như sau:
[General] network = Network
Trong đó, tên của của network được gán bằng tên của phần định nghĩa ở trên.
-
B8. Build project. Ta chọn project, kích chuột phải, chọn build.
-
B9. Run project. Ta chọn project, kích chuột phải, chọn run as, lựa chọn OMNeT++ Simulation. Ta có kết quả như hình dưới.
Bạn có thể thực hiện từng bước bằng cách nhấn tổ hợp Ctrl+F4 hoặc chạy liên tục bằng cách nhấn F5. Và ta sẽ có được kết quả như sau:
Trên đây là giới thiệu về OMNeT++ và xây dựng demo nho nhỏ bằng OMNeT++.