C 无线网络上带有多个套接字的UDP

C 无线网络上带有多个套接字的UDP,c,udp,multicastsocket,C,Udp,Multicastsocket,我用多播套接字编写了一个简单的udp服务器客户端应用程序。服务器每6毫秒向三个客户端发送数据包。小包裹 大小为1200字节。这是每秒166,66个数据包。每当一个客户端检测到丢失的数据包时,它就会通过单播向服务器发送一个NACK数据包 . 第一次测试: 服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常 第二次测试: 只有服务器通过以太网连接到路由器,其他客户端通过无线2.4 GHz和固定通道连接。出现了两个问题 使用无线:第一个问题是数据包丢失,客

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

第一次测试: 服务器和三个客户端通过以太网连接到路由器TP链路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毫秒 =每秒100个数据包=0.076 MB/s

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


一切似乎都很好

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

无线网络中的数据包丢失:

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

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

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

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

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

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

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

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

分析数据包丢失场景的典型步骤

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

  • 数据包是否通过相同的路径?否则,路径中某些n/w元素的多播配置可能会出现问题UDP不是可靠的传输,因此可能会丢弃数据包。其次,在大多数情况下,UDP广播由网络节点限制,因此广播仅在同一电缆或无线路由器同一侧设备的特定子网中可见。丢弃UDP数据包的原因有很多,其中之一是网络堆栈耗尽了可用的网络数据包缓冲区。因此,如果您有大量流量,并且网络节点无法在更多数据进入之前传输已接收的数据,数据包将被丢弃。我不确定我是否理解path…a