Thêm giao thức mạng cảm biến không dây sử dụng thư viện inet

abtract: Thu thập dữ liệu là một nhiệm vụ quan trong lĩnh vực IOT, một lĩnh vực khá nổi trong thời gian gần đây. Để có thể thu thập được dữ liệu, các hệ thống IOT dự trên các thiết bị cảm biến, đo các thông số vật lý có liên quan, sau đó gửi về máy chủ để phân tích; tuy nhiên, các thiết bị cảm biến này thường liên lạc với nhau thông qua sóng vô tuyến, hồng ngoại, hoặc quang học, do đó, các thiết bị có khoảng liên lạc khá ngắn, và bài toán mạng cảm biến không dây được hình thành. Làm thế nào để chúng ta có thể xây dựng các giao thức mạng, đánh giá về sự khả thi của giao thức khi chưa triển khai thực tế?

I. Giới thiệu

  • Để trả lời câu hỏi ở trên, chúng ta cần một công cụ có thể xây dựng các thiết bị cảm biến ảo, cho phép chúng ta mô phỏng cách thức làm việc của các thiết bị cảm biến khi giao tiếp với nhau. Có khá nhiều công cụ như thế, và trong bài này, tôi xin phép trình bày về thư viện inet trên nên tảng OMNET++
  • Trong phần giới thiệu về omnet++ của bạn @yinlong đã trình bày về các tầng của mạng và một ví dụ đầu tiên tveef omnet++. Trong bài viết này tôi sẽ giới thiệu về INET (một thư viện giúp chúng ta có thể thử nghiệm mạng cảm biến) ở chương II. Trong chương III, tôi sẽ trình bày những bước đầu để xây dựng một giao thức mạng.

II. Giới thiệu về INET

  • Như đã trình bày ở trên, INET là một thư viện của omnet, trong đó, thư viện này đã xây dựng giúp chúng ta các giao thức, đại diện và một số model khác giúp chúng ta có thể giả lập và nghiên cứu mạng một cách trực quan và chính xác hơn. INET thường được sử dụng để xây dựng một giao thức mới hoặc nghiên cứu về môt sự cố cũng như một hiện tượng mới.
  • INET đã cung cấp giúp chúng ta các giao thức phổ biến như TCP, UDP, IPv4, BGP, etc... hỗ trợ việc nghiên cứu về các giao thức mạng.
  • Các tính năng của INET bao gồm:
    • Các tầng OSI (physical, link-layer, network, transport, application)
    • Các kết nối giữa các tầng
    • IPv4/IPv6 network stack
    • Transport layer protocols: TCP, UDP, SCTP
    • Routing protocols (ad-hoc and wired)
    • Wired/wireless interfaces (Ethernet, PPP, IEEE 802.11, etc.)
    • Tầng vật lý với phần mở rộng.
    • Các mô hình ứng dụng
    • Hỗ trợ Network emulation
    • Hỗ trợ Mobility
    • Hỗ trợ model của môi trường vật lý
    • Tách biệt các thành phần
    • Hỗ trợ visualization
  • Những tính năng trên của INET bao gồm các componet, mỗi componet là tập hợp của các componet khác. Đơn vị nhỏ nhất trong INET là các Simple Model.

III. Xây dựng một giao thức mới

Có nhiều hơn 1 cách để xây dựng một giao thức mới, và tôi sẽ trình cách xây dựng của tôi. Để bắt đầu với một giao thức mới, chúng ta cần phải xây dựng một Simple Model, là một thành phần quyết định việc sự khác biệt của giao thức mới với những giao thức đã có, tiếp theo là kết nối model mới xây dựng với component kế module WirelessHost, module đã được INET xây dựng với đầy đủ các tính chất vật lý về mạng của một thiết bị cảm biến. Cuối cùng, chúng ta xây dựng cho nó một hệ thống mạng, và sử dụng component mà chúng ta vừa tạo ra. Tôi xin phép đặt tên của giao thức chúng ta sắp xây dựng là chb (là một nghiên cứu tôi đang làm về mạng cảm biến).

  1. Xây dựng model CHB Routing
  • Đầu tiên, tôi tạo thư mục chb trong thư mục inet/src/inet/routing như trong hình CreateCHBRouting.PNG

  • Tiếp theo, tôi tạo một simple model là CHBRouting như trong hình. MakeCHBRouting.PNG

  • Lúc này, file CHBRouting.cc và CHBRouting.h cũng được sinh tự động.

  • Để có thể kết nối được tới module khác, chúng ta cần phải tạo nó các gates như ví dụ dưới đây

      gates:
          input in;
          output out;
    
  1. Xây dựng component CHB Router
  • Vậy là đã cơ bản của một simple model, giờ chúng ta sử dụng chúng trong component.

  • Tương tự như trên, tôi tạo một thư mục chb trong inet/src/inet/node, trong đó, tôi tạo một Compound Module có tên là CHBRouter. Module này kế thừa module WirelessHost. Sau khi kế thừa, ta được một tập hợp các component như hình CHBRouter.PNG

  • Việc cần làm tiếp theo là kết nối simple model CHBRouting đã được định nghĩa ở trên với module CHBRouter. Để thực hiện điều đó khá đơn giản, chúng ta chỉ cần thêm một submodules và connections như đoạn code dưới đây:

  •   submodules:
          chb: CHBRouting {
              @display("p=596,287");
          }
    
      connections:
          networkLayer.transportOut++ --> chb.in;
          networkLayer.transportIn++ <-- chb.out;
    
  • Và ta có kết quả sau: CHBRouter1.PNG

  1. Xây dựng netword demo
  • Chúng ta đã xây dựng module đại diện cho 1 thiết bị cảm biến. Giờ chúng ta xây dựng một mạng để thử nghiệm nó.

  • Trong thư mục inet/example, tôi tạo một thư mục chb, trong đó, tôi thêm một network có tên là CHBNetwork. Trong phần định nghĩa của network này, tôi thêm các thành config như trong đoạn code dưới đây.

      parameters:
          string mediumType = default("IdealRadioMedium");
          int numHosts = default(2);
          @display("bgb=650,500;bgg=100,10,grey95");
          @figure[title](type=label; pos=0,-1; anchor=sw; color=darkblue);
          @figure[rcvdPkText](type=indicatorText; pos=420,20; anchor=w; font=,20; textFormat="packets: %g"; initialValue=0);
      submodules:
          radioMedium: IdealRadioMedium {
              parameters:
                  @display("p=50,50");
          }
          configurator: IPv4NetworkConfigurator {
              parameters:
                  config = xml("<config><interface hosts='*' address='145.236.x.x' netmask='255.255.0.0'/></config>");
                  @display("p=50,100");
          }
          routingTableRecorder: RoutingTableRecorder {
              parameters:
                  @display("p=50,150");
          }
          lifecycleController: LifecycleController {
              parameters:
                  @display("p=50,200");
          }
          scenarioManager: ScenarioManager {
              parameters:
                  script = default(xml("<scenario/>"));
                  @display("p=50,250");
          }
    
          visualizer: IntegratedCanvasVisualizer {
              @display("p=580,125");
          }
    
          host[numHosts]: CHBRouter {
              parameters:
                  @display("i=device/pocketpc_s;r=50,,#707070");
          }
    
          connections allowunconnected:
    
  • Và kết quả đạt được là

chbnetwork.PNG

Trong bài này, tôi đã đưa ra lý do của việc sử dụng thư viện INET trong OMNET++ cũng như giới thiệu cơ bản về INET. Bên cạnh đó, tôi đã trình bày các bước cơ bản để xây dựng một giao thức mới. Trong bài tiếp theo, tôi sẽ giải thích các tham số tôi đưa vào cũng như các bước cụ thể để xây dựng một giao thức mới.

Cảm ơn các bạn đã theo dõi!


All Rights Reserved