ad hoc网络中的应用层窃听,很像TCP

ad hoc网络中的应用层窃听,很像TCP,tcp,udp,wifi,adhoc,osi,Tcp,Udp,Wifi,Adhoc,Osi,我想在参与WiFi ad hoc网络的移动设备上部署一个应用程序,以提高信息的稳健性。主要任务非常简单:从节点的源向节点D的目的地发送数据的大小可能更大。以下是我的示例拓扑: --- N1 --- / | \ / | \ S ----- N2 ----- N4 ----- D \ | / \ | / --- N3 --- 通过简单地使用TCP,我可以通过N2和N4建立一个从S到D的可靠通信通道

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

    --- N1 ---
   /    |     \
  /     |      \
S ----- N2 ----- N4 ----- D
  \     |      /
   \    |     /
    --- N3 ---
通过简单地使用TCP,我可以通过N2和N4建立一个从S到D的可靠通信通道

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

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

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

S发送UDP广播数据包,该数据包的生存时间为1到N2,并包含其他信息。 N1、N2和N3可以接收和存储数据包,但只有N2向N4重新发送信息。 这种行为会一直重复,直到D得到包为止。 但是我必须在数据包排序、拥塞控制和可靠通信方面以某种方式重新实现TCP,这是不好的


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

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

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

好的,因此基本上您建议在较低的OSI层上执行此操作,但每个数据包都必须至少由iptables或libpcap读取。我正在寻找的是OSI应用程序级别的解决方案,这意味着我可以保持较低的层不变。最后一个程序应该能够作为用户空间程序运行,而不必是root…我建议的是一个用户空间应用程序,但是你需要是root才能运行它,除非你使用你的应用程序。但是,您可以将应用程序一分为二,分为一个root和一个nonroot。您希望您的应用程序是应用程序层应用程序,但不希望使用混杂模式。另一方面,您希望特定节点仅接收特定数据包,这是一种网络层操作。你在自相矛盾,因为你所要求的永远是一个在多个层面上运行的机制。你有工具去做你想做的事情,你需要决定如何继续。我将这个答案标记为正确答案,因为我认为我的方法不像我最初认为的那样可行,Andy指出了偷听包需要什么。我认为这是可行的,不涉及较低的层,但它需要应用程序在每个节点上运行。