当 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 上,添加一个新的phy2
PHYSICAL 代理,该代理将由新的uwlink2
LINK 服务代理使用。phy2
代理将是真实调制解调器的代理,通过 a 向调制解调器发送任何或,TxFrameReq
并从调制解调器传递(和其他通知)。然后设置DatagramReq
UnetSocket
RxFrameNtf
router
在节点 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
。编写起来相当简单,因为您需要通过套接字将所有消息发送到调制解调器,并将所有通知从套接字发送回代理代理的通知主题。