1

我正在研究基于属性的路由协议,其中源节点(节点 A)从两个相邻节点(节点 B 和 C)收集属性,并根据排名,节点 A 决定将其数据转发到节点 B 或节点 C

现在,我想用真正的 UnetStack 兼容调制解调器在测试台上测试这个算法,但是只有两个真正的调制解调器可用,所以如果我创建我的拓扑,源节点(节点 A)在笔记本电脑上运行(使用模拟调制解调器)和邻居(节点 B 和 C)使用真正的调制解调器运行。节点 A 是否可以通过节点 B 和 C 传输和接收数据。因为节点 B 和 C 使用真正的调制解调器。

请让我知道,我如何只使用两个真正的调制解调器来做到这一点,还建议是否有其他方法。

4

1 回答 1

1

当 2 个调制解调器在水中时,它们可以使用它们的 PHYSICAL 服务代理(通常命名为phy)相互通信。更高级别的代理,例如uwlink用于phy提供可靠性等。

在模拟环境中,物理服务由HalfDuplexModem代理(也称为phy)提供。该代理可以与HalfDuplexModem其他模拟节点上的代理交谈,就像调制解调器在水下互相交谈一样。更高级别的代理(例如)uwlink将使用它phy进行通信,应用程序不会注意到差异。

但是,HalfDuplexModem在模拟环境中,不能直接将数据包传输到水中的真实调制解调器,也不能从其中接收数据包。模拟环境中的节点只能相互通信,水中的节点只能相互通信。因此,您可以将模拟世界视为一个子网,将现实世界视为另一个子网,即使两者都可以是一个 Unet 的一部分。要将子网连接在一起,您需要一个在子网之间中继数据包的网关节点。

为了使事情更具体,假设节点 B 和 C 在水子网中,节点 A 在模拟子网中。为了使节点 A 能够与节点 B 和 C 通信,您需要节点 B 或 C 中的至少一个也位于模拟子网中。为了避免多跳路由,假设我们希望节点 B 和 C 在两个子网中都存在。这样做的方法是使用节点 A、B 和 C 创建一个模拟。然后,在节点 B 和 C 上,添加一个新的phy2PHYSICAL 代理,该代理将由新的uwlink2LINK 服务代理使用。phy2代理将是真实调制解调器的代理,通过 a 向调制解调器发送任何或,TxFrameReq并从调制解调器传递(和其他通知)。然后设置DatagramReqUnetSocketRxFrameNtfrouter在节点 B 和 C 上通过 将数据包路由到节点 B 和 C,并通过 路由到uwlink2节点 A。uwlink

节点 B 和 C 上的代理设置如下所示:

|--------------------- Simulator -------------------------------|    |--- Modem ----|
[DatagramReq] --> router -A--> uwlink  --> phy (HalfDuplexModem)
                     \----BC-> uwlink2 --> phy2 -->  UnetSocket  --> phy (on modem)

与整体网络配置:

    A -sim--- B ---(UnetSocket)--- modem B --\
     \                                    acoustic
      \-sim-- C ---(UnetSocket)--- modem C --/

您需要编写的唯一代理是代理phy2。编写起来相当简单,因为您需要通过套接字将所有消息发送到调制解调器,并将所有通知从套接字发送回代理代理的通知主题。

于 2019-11-13T04:57:52.450 回答