3

我正在开发一种基于能量的路由协议,其中节点必须知道其可用的邻居,以便它可以获取邻居节点的能量详细信息并决定其下一跳。

a) 如何找到节点的可用邻居?

b) 在 和 的使用中PDURemoteGetParamReq哪种方法更适合检索邻居节点的能量?

4

1 回答 1

1

a) 如果您正在编写自己的代理,您可以发送一个广播帧来查询邻居,并让邻居上的代理以随机退避响应该帧(以避免 MAC 冲突)。另一种黑客可能是使用RouteDisoveryReq(参见https://unetstack.net/svc-31-rdp.html)将to地址设置为不存在的节点。这将导致所有 1-hop 邻居重新广播您的路由发现请求,并且您将获得RouteDiscoveryNtf每个邻居。

演示hack ( )的示例脚本rdpdemo.groovy

// settings
attempts = 1      // try only a single attempt at discovery
phantom = 132     // non-existent node address
timeout = 10000   // 10 second timeout

println 'Starting discovery...'
n = []                        // collect list of neighbors
rdp << new RouteDiscoveryReq(to: phantom, count: attempts)
while (ntf = receive(RouteDiscoveryNtf, timeout)) {
  println("  Discovered neighbor: ${ntf.nextHop}")
  n << ntf.nextHop            // add neighbor to list
}
n = n.unique()                // remove duplicates
println("Neighbors: ${n}")

示例运行(samples/rt/3-node-network.groovy节点 3 上的模拟):

> rdpdemo
Starting discovery...
  Discovered neighbor: 1
  Discovered neighbor: 2
Neighbors: [1, 2]
>

b) 这个问题的答案取决于你如何暴露你的能量信息。如果将其作为参数公开,则可以使用RemoteGetParamReq来获取它。但是如果你已经在你的代理中实现了一些协议,那么有一个特定的 PDU 来传达信息就很容易了。

于 2019-07-15T04:12:03.560 回答