2

有没有一种方法可以在用户空间中获取有关在 802.11 中的第 2 层丢弃数据包的通知。

根据我的理解,当一个数据包在介质上发送出去时,如果它被正确传递,就会收到第 2 层 ACK(如果没有,它会重新传输并最终丢弃数据包,如果在几次之后没有传递)重试..)

我希望能够访问此通知(在用户空间中)并更改数据包传输的行为。

我希望能够将数据包从 FIB 发送到另一台主机,而不是丢弃数据包。

我已经阅读了有关 libpcap 库和 netfilter 钩子的信息,它们允许我捕获数据包并将它们注入网络堆栈。

但是我找不到帮助我在第 2 层捕获数据包通知的钩子(如果有的话,用于无线堆栈)。

如果我没有正确理解某些内容,请纠正我。此外,任何提示或阅读链接都会很棒。

4

1 回答 1

1

不,您不能,至少不能使用标准化的套接字接口。802.11 是一个链路层,sockets API 是严格的链路层不可知的:除非它要在所有链路层上工作,否则它不在sockets中。这是有充分理由的:你所设想的那种跨层交互已经尝试过很多次,结果总是麻烦多于它的价值。

您没有向我们提供有关该应用程序的任何详细信息——但最好的解决方案很可能是更改您的应用程序层协议以发送显式确认,并在您未能收到 ACK 时通过后备路由发送您的数据。

于 2014-10-22T21:43:48.023 回答