计算 IEEE 802.11 中单个 UDP 数据包传输的重传次数?

网络工程 无线的 IEEE-802.11 第 2 层 第一层
2022-02-08 03:33:42

我正在使用基于 UDP 和 802.11 作为链路和物理层的客户端服务器项目。在那里,客户端试图探测无线信道中的一些数据包以测量信道状况。在我的客户端应用程序中设置传输速度和估计丢包率需要此功能。要执行该功能,需要测量发生在IEEE 802.11。在传输层,不会有任何重传,因为使用的是UDP,但是如果无线信道不好(没有来自接收方MAC的确认),IEEE802.11 Wi-Fi NIC会重新传输。到目前为止,我可以在 linux 中从 ~/proc/net/wireless 访问 RSSI,它给出了关于接收信号强度的概念,但不是关于无线信道条件的概念。可以根据重传次数估计无线信道状况。我应该如何测量 IEEE 802.11 层中的重传次数,假设来自应用程序的 1 个数据包在 IEEE 802.11 层中有多少次重传(来自客户端)?

或者有什么方法可以阻止 IEEE802.11 重传功能?

1个回答

需要测量 IEEE 802.11 中发生的重传次数。

您不指定 UDP 流量的方向。如果主要是从服务器到客户端,那么客户端将无法准确测量此统计数据。只有 AP 才有机会捕获此信息。

为什么?因为客户端将确认它理解/接收的第一个 802.11 帧,所以它不知道 AP 之前尝试发送帧的次数。它无法理解/接收那些先前的尝试。

如果是从客户端到服务器,您可以编写/使用可以为您提供这些统计信息的专用驱动程序,但这也可能取决于硬件。当然,只要环境条件发生变化,结果就可能会发生变化。

假设来自应用程序的 200 个数据包在 IEEE 802.11 层中重新传输了多少次?

如果不以某种方式实际测量这一点,就没有办法说,但是一些企业无线系统可以提供重传/重试统计信息(至少从 AP 到客户端)。

当发送一个 802.11 帧而没有收到 ACK 时,它会被重传一定次数。一旦达到重传阈值,则向下调整数据速率以重试。

现在,不同的供应商以略微不同的方式应用标准来尝试优化无线流量,从而使他们的产品超越竞争对手。这些优化通常只有公司内部人员知道。一些差异可能是(不要将此作为完整列表):

  • 在尝试较低的数据速率之前重传多少次?
  • 降低数据速率时如何选择下一个数据速率?
    • 下一个最低的 MCS 值(802.11n/802.11ac)?
    • 下一个最低的 SS 值(802.11ac)?
    • 无论 MCS/SS 值如何,下一个最低数据速率?
    • 它是否会在下降过程中跳过数据速率/MCS/SS 值?
    • 以上的一些组合?
  • 在完全丢弃帧之前允许进行多少次重传?
  • 下一帧以哪个数据速率开始?
    • 从客户端支持的最高数据速率开始(即一直积极尝试最佳数据速率)?
    • 从略高于上次成功传输的值开始(即保守地增加数据速率以最少重传)?
    • 维护每个客户端的统计数据并从钟形曲线的上部某处开始(即 75-90% 的成功传送帧低于该数据速率)?
    • 其他一些算法或过程?
  • 这些变化是否基于其他外部因素(客户数量、噪音水平等)?

这将我们带到了其他环境因素,这些因素将特定于您试图确定重传次数的答案。射频环境中的噪声有多大,它会波动吗?有多少其他设备试图在同一信道上进行通信?等等。

让任何人告诉你你将有多少次重传是不可能的。它需要被测量。

或者有什么方法可以阻止 IEEE802.11 重传功能?

从来没有见过,我怀疑你会。正如我在上面所阐述的,重传过程是如何以最佳数据速率传送帧的一部分。一些供应商允许对过程中不同点发生多少次重传的细节进行一些“调整”,但完全消除它们通常是一个非常糟糕的主意。

您可以做的最好的事情是将重传次数减少到最小阈值。例如,找到一个允许对诸如重传次数等设置进行一些“调整”的供应商。然后将客户端配置为仅支持一小部分数据速率或单个固定数据速率(这也必须是 WLAN 支持的唯一基本/基本/必需)。您必须选择较慢的数据速率,以在所有条件下提供可靠的帧传输。