【问题标题】:UDP with mulicast sockets over wireless network通过无线网络使用多播套接字的 UDP
【发布时间】:2014-12-21 04:16:52
【问题描述】:

我用多播套接字编写了一个简单的 udp 服务器客户端应用程序。服务器每 6 毫秒向三个客户端发送数据包。包 大小为 1200 字节。这是每秒 166,66 个数据包。每当其中一个客户端检测到丢失的数据包时,它都会通过单播向服务器发送一个 NACK 数据包 .

第一次测试: 服务器和三个客户端通过以太网连接到路由器 TP-Link TL-WDR4300 (dd-wrt),一切正常。

第二次测试: 只有服务器通过以太网连接到路由器,其他客户端通过无线 2.4 GHz 和固定信道连接。两个问题来了 使用无线:第一个问题是丢包,客户端只接收到 50% 的数据包。并且丢失出现在突发中,例如接收到400个数据包, 200 丢失等。第二个问题 是当客户端将 NACK 数据包发送回服务器时,我可以在 wireshark 上看到,但我的应用程序无法接收它们。 这很奇怪,因为代码与客户端通过以太网连接时的代码相同。那么,有什么想法吗?我会很感激的

服务器代码:

while (1) {

    FD_ZERO(&readfds);
    FD_SET(sd, &readfds);

    tv.tv_sec = 0;
    tv.tv_usec = 0;

    rv = select(sd + 1, &readfds, NULL, NULL, &tv);

    while (rv == 1) {

        nack_processing(sd);
        rv = select(sd + 1, &readfds, NULL, NULL, &tv);


    }
}
return 0;

}

我还进行了更新以减少流量: 数据包大小:800 字节 数据包之间的到达时间:10 ms = 每秒 100 个数据包 = 0.076 MB /s

我测量了服务器端和客户端的流量: 服务器 ~ 10 MB/s 客户端 ~ 5 MB /s

一切正常

【问题讨论】:

  • 数据包是否通过相同的路径?否则可能是路径中某些 n/w 元素的多播配置问题
  • UDP 不是一种可靠的传输方式,因此可能会丢弃数据包。其次,在大多数情况下,UDP 广播受到网络节点的限制,因此广播仅在位于同一电缆或无线路由器同一侧的设备的特定子网内可见。
  • 丢弃 UDP 数据包的原因有很多,其中之一是网络堆栈耗尽了可用的网络数据包缓冲区。因此,如果您的流量很大并且网络节点无法在更多数据进入之前传输已经接收到的数据,则数据包将被丢弃。
  • 我不确定我是否理解路径...所有数据包都发送到多播 IP 地址。什么是 n/w 路径以及在哪里检查它?
  • 我知道 UDP 不可靠,而且我可以预料到损失,但是这种突发非常奇怪且不常见,我认为问题出在其他地方。 Richard 我发送的流量减少了,但问题仍然存在。你还有其他建议吗?顺便说一句,客户端位于无线路由器的同一侧

标签: c udp multicastsocket


【解决方案1】:

请注意,您正在比较两种不同的接口/媒体。一种是有线接口,一种是无线接口。

无线网络中的丢包:

这可能是由多种原因造成的。然而,第一个即时检查点应该是 SNR、RSSI 和工作频率/同频干扰。 wifi 分析仪几乎可以带您接近解决方案。

无线路由器位置 - 检查无线路由器是否位于需要覆盖的区域的中心位置。确保避免覆盖区域适当重叠的覆盖漏洞。确保避开建筑物之间以减少干扰。另外,请注意,距离和用户的数据速率之间存在关系。用户越近,数据速率越高,因为路径损耗减少(因为这反过来会增加 SNR)。

天线类型 - 全向天线以球体形式提供覆盖区域。偶极天线以甜甜圈的形式提供覆盖区域。还有各种定向天线。请注意,全向天线可能会在小区尺寸较大的情况下导致隐藏节点问题。 带有聚焦光束的天线可能会有所帮助。多扇区定向天线可以提供高容量,范围。天线的类型、位置和天线增益决定了无线电的传输范围和覆盖范围。

通信信道/工作频率 - 在同一无线电覆盖区域内以相同频率工作的其他 AP 的存在可能会造成干扰。在这种情况下,如果附近只有 802.11 设备,则应相应更改工作信道和信道间隔以减少干扰。

功率等级 - 较高的功率等级可以扩大范围,但如果附近有 AP,则可能会导致干扰。对于更高的容量,AP 可能靠得很近,在这种情况下,首选低功率电平以减少干扰。

其他设备 - 微波炉、蓝牙、无绳电话等非 802.11 设备也可能引入干扰。在这种情况下,最好移除这些设备或将其屏蔽以避免干扰。

突发数据包丢失似乎也表明堆栈无法处理突发流量,其流量整形策略可能只是丢弃此类突发数据包。仔细检查是否产生了这样的流量突发。

NACK 未到达服务器: 同样,这可能是由于传输媒体相关问题导致 NACK 在空中丢弃。如果 NACK 已到达主机但未到达服务器应用程序/未处理,则可能是由于服务器的体系结构或堆栈相关的操作系统配置。

分析丢包场景的典型步骤

  1. 检查防火墙设置、操作系统配置、路由器配置和网络硬件能力/配置(吞吐量能力、操作模式)、中间节点配置/能力(MTU、路由/转发表)
  2. 在无线路径上,检查 AP 的位置、工作范围(频率)、信道间隔、SNR、RSSI、天线类型/增益、覆盖漏洞、与 AP 的距离、是否存在其他 802.11 设备和非 802.11 设备地区。
  3. 检查各种节点和接口的所有输入和输出点的数据包统计信息
  4. 检查应用程序/协议层中所有输入和输出点的数据包统计信息
  5. 重复测试以识别具有吞吐量、数据包大小、运行持续时间、不同应用程序、不同负载大小、不同 pkts 数、功率级别、AP 位置、通道的各种组合的数据包丢失模式......一种确定问题区域的方法。

【讨论】:

  • 我会检查大部分内容,然后希望发布解决方案。谢谢
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 2013-06-03
  • 2014-09-03
  • 2018-01-16
  • 1970-01-01
  • 2018-07-03
  • 2010-10-22
  • 1970-01-01
相关资源
最近更新 更多