2

我已经从节点本身设置了我的路由算法。在此之后,我想从该路由本身的物理层发送数据报。

例如,如果我的路由是 1 到 2 和 2 到 3,我想从 1 到 3 发送数据报,我希望我的数据报通过 2。

对于此路由表 1 将如下所示:

路由表 1

  • to: 3 nextHop: 2
  • to: 2 nextHop: 2
  • 到:1 下一跳:1

所以我希望我的进程消息功能如下:

  void processMessage(Message msg) {
    if (msg instanceof DatagramNtf && msg.protocol == PING_PROTOCOL && msg.to != nodeInfo.addr)
      def dG = new DatagramReq(to: routes.nextHop(msg.to), destination: msg.to)
      send new DatagramReq(recipient: msg.sender, to: msg.from, protocol: Protocol.DATA)
  }

routes.nextHop 所做的也是获取目标节点的地址,并从路由表中获取下一跳。

我想知道如何从路由表中获取 nextHop。

4

1 回答 1

3

要使用路由表条目发送数据报,您需要使用router代理,而代理又使用link代理phy将您的数据报发送到目的地。将数据包进一步路由到目的地将由router代理自己处理。因此我认为您不需要在nextHop此处确定中的to字段DatagramReq

DatagramReq可以像-

router.send new DatagramReq(recipient: msg.sender, to: msg.from, protocol: Protocol.DATA)

假设routerAgentID定义的,值msg.from是你的目的地,并且路由表中有一条有效的路由。

进一步,nextHopgetNextHop()返回邻居节点的地址。

于 2019-09-04T04:50:21.090 回答