Omnet 和INET无线通信与UDP

OMNeT++ and INET wireless communication with UDP

本文关键字:UDP 无线通信 INET Omnet      更新时间:2023-10-16

我有以下方案:3无线主机H1,p1和p2(类无线主机),其中H1主机具有自定义的UDP应用程序,而P1和P2使用UDPechoApp。

想法是H1将消息发送给其他两个,但以计划的方式,例如H1向P1发送消息并等待P1回声回回去,仅在接收P1的Echo时,它才能将消息发送到P2。

我的问题是:如何获得这种行为?我可以向P1和P2发送消息,但我不知道如何告诉H1等待P1回复,然后再传输到P2。

也是关于ARP的另一个问题。我现在正在使用Arptype = GlobalArp,但我想知道,如何避免H1发送ARP请求?我怎么能告诉H1在哪里可以找到某些主机?

由于网络层并不是真正必要的,是否可以忽略它并使用它只是将消息从应用程序层转发到MAC,然后负责查找正确的目标地址?

  1. 您可以通过引入简单的状态机来实现该行为。只需在UDP应用程序的类中添加一个新变量,例如:

    int state; // 0 - beginning, 1 - waiting for P1 response, ...
    

    将数据包发送到P1设置此变量后:

    state = 1;
    

    然后在handleMessageWhenUp()中添加其他条件,例如:

    void UDPBasicApp::handleMessageWhenUp(cMessage *msg) {
      if (!msg->isSelfMessage() && msg->getKind() == UDP_I_DATA) {
        if (state == 0) {
          // ...
        } else if (state == 1) {
          // take source address
          cPacket *pk = PK(msg);
          UDPDataIndication *ctrl = check_and_cast<UDPDataIndication *>(pk->removeControlInfo());
          L3Address srcAddress = ctrl->getSrcAddr();
          // check if srcAddress is equal to P1 address
          // if equals: 
          //   1) send a packet to P2 
          //   2) set state = 2
          // do nothing if srcAddress is not equal to P1
        } else if (state == 2) {
         // ...
        }
       }
    }
    
  2. globalARP使用一个静态表,由网络中的所有主机共享。在初始化期间,每个主机将自己的地址插入此表中。因此,初始化后表包含所有地址。具有arpType = GlobalARP的主机永远不会发送ARP请求,而不是发送此表中的输入。

  3. 该网络层用于UDP应用程序。IPv4NetworkConfigurator的实例将地址分配给需要它们的所有接口。因此,您无需为网络层做任何其他事情。