0

我想在参与 WiFi ad hoc 网络的移动设备上部署一个应用程序,以提高信息的稳健性。主要任务非常简单:将数据(可能更大)从节点 S(源)发送到节点 D(目标)。这是我的示例拓扑:

    --- N1 ---
   /    |     \
  /     |      \
S ----- N2 ----- N4 ----- D
  \     |      /
   \    |     /
    --- N3 ---

通过简单地使用 TCP,我可以建立一个可靠的通信通道,从 S 通过 N2 和 N4 到 D。没关系。

我现在的问题是:我希望 N1 和 N3 也可以获取(偷听)S、N2 和 N4 发送的消息,但他们不需要可靠地获取它。您可以将其视为数据包流。例如,S 想向 D 发送一个数据包。但是这个数据包可能对 N[1-4] 也有用 - 因此应该被存储。

这当然可以通过在所有节点上使用混杂 WiFi 模式来实现,但这将是一种过度杀伤——因为这意味着每个节点都必须解析所有数据包以查看它们是否可以存储它们。

一个简单的解决方案是发送 UDP 数据包:

  1. S 向 N2 发送具有附加信息的生存时间为 1 的 UDP 广播数据包。
  2. N1、N2和N3可以接收和存储数据包,但只有N2将信息重新发送给N4。
  3. 这种行为会不断重复,直到 D 获得包裹。

但是我必须以某种方式在数据包排序、拥塞控制和可靠通信方面重新实现 TCP——这很糟糕。

所以我的问题是:你知道支持这种行为的协议吗?

4

1 回答 1

0

我已经按照您所说的做了,有几种方法可以做到。使用 linux 是最简单的,也是我实际实现的唯一平台。

在 linux 上有两种方法可以做到这一点。1.,使用 iptables 和 NQUEUE 并将接收到的数据包传递给应用程序进程,该进程可以对它们执行任何操作。使用 iptables 规则仅传递您感兴趣的数据包,例如具有 IP dst N2、N4 等的数据包。 2. 使用 libpcap,并将您的程序与该库链接并配置捕获过滤器以捕获您感兴趣的数据包。

于 2011-02-22T16:30:33.953 回答