【问题标题】:Packet drop notification in Layer-2第 2 层中的丢包通知
【发布时间】:2014-02-27 19:08:15
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 无线驱动程序肯定知道帧丢失,也许mac80211也知道。那么问题是这些信息在返回到发送应用程序的途中返回多远?你如何发送/注入帧/数据包? (普通 IP、原始 IP 套接字、原始数据包套接字、libpcap、...)
  • @dasup 我想我会使用任何不同的选项来注入它(我还通过了 libnet,它用于数据包注入......还没有尝试过它的一个例子。 .我还没有调查过..你知道任何钩子或api接收帧丢失通知吗?

标签: sockets networking linux-kernel wifi data-link-layer


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多