Ad hoc网络中的应用层监听,非常类似于TCP

时间:2011-02-16 13:08:51

标签: tcp udp wifi adhoc osi

我想在参与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发送UDP广播包,其生存时间为1到N2,并附加信息。
  2. N1,N2和N3可以接收和存储数据包,但只有N2将信息重新发送到N4。
  3. 此行为会重复,直到D获得包。
  4. 但是我必须以某种方式在数据包排序,拥塞控制和可靠通信方面重新实现TCP - 这很糟糕。

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

1 个答案:

答案 0 :(得分:0)

我已经完成了你所说的,并且有几种方法可以做到。使用linux是最简单的,也是我实际实现它的唯一平台。

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