我编写了一个带有多播套接字的简单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毫秒=每秒100个数据包= 0.076 MB /秒
我测量了服务器和客户端的流量:服务器〜10 MB / s客户端〜5 MB / s
一切似乎都很好
请注意,您正在比较两个不同的接口/媒体。一种是有线接口,另一种是无线接口。
无线网络中的数据包丢失:
这可能是由于多种原因。但是,第一个立即检查点应该是SNR,RSSI和工作频率/同信道干扰。wifi分析仪几乎可以带您接近解决方案。
无线路由器位置-检查无线路由器是否位于需要覆盖的区域的中央。确保避免覆盖区域适当重叠的覆盖孔。确保避开中间的建筑物,以减少干扰。另外,请注意,用户的距离和数据速率之间存在关系。用户越近,由于减少的路径损耗(因为这反过来会增加SNR),因此数据速率会更高。
天线类型-等距天线以球体形式提供覆盖区域。偶极天线以甜甜圈形式提供覆盖区域。也有各种定向天线。请注意,如果单元尺寸较大,全向天线可能会导致隐藏节点问题。聚焦光束天线可能会有所帮助。多扇区定向天线可以提供高容量,远距离。天线的类型,其位置和天线增益决定了无线电传输范围和覆盖范围。
通信信道/工作频率-在相同无线电覆盖范围内以相同频率工作的其他AP的存在可能会造成干扰。在这种情况下,如果附近只有802.11设备,则应相应地更改工作信道和信道间隔,以减少干扰。
功率级别-更高的功率级别可以扩大范围,但是如果附近有AP,则可能导致干扰。对于更高的容量,AP可能彼此靠近,在这种情况下,最好使用低功率级别以减少干扰。
其他设备-微波炉,蓝牙,无绳电话等非802.11设备也可能引入干扰。在这种情况下,最好移除这些设备或将其屏蔽以避免干扰。
就突发而言,数据包丢失似乎也表明该堆栈无法处理突发流量,其流量整形策略可能只是丢弃此类突发数据包。仔细检查是否产生此类流量突发。
NACK无法到达服务器:同样,这可能是由于与传输介质相关的问题所致,该问题可能导致NACK掉空。如果NACK已到达主机但尚未到达服务器应用程序/未处理,则可能是由于服务器或与堆栈相关的OS配置的体系结构所致。
分析丢包情况的典型步骤
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句