大小是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 / s
我测量了服务器端和客户端的流量:
服务器~10 MB / s
客户端~5 MB / s
一切似乎都很好
请注意,您正在比较两个不同的接口/媒体.一个是有线接口,另一个是无线接口.无线网络中的数据包丢失:
这可能是由于多种原因造成的.但是,第一个直接检查点应该是SNR,RSSI和工作频率/同信道干扰. wifi分析仪几乎可以让您接近解决方案.
无线路由器位置 – 检查无线路由器是否位于需要覆盖的区域的中心位置.确保避免覆盖区域与覆盖区域的正确重叠.确保避免中间的建筑物以减少干扰.另外,请注意用户的距离和数据速率之间存在关系.越靠近用户,由于减少了路径损耗,数据速率越高(因为这反过来增加了SNR).
天线类型 – 异形天线以球形的形式提供覆盖区域.偶极天线以甜甜圈的形式提供覆盖区域.还有各种定向天线.请注意,全向天线可能导致隐藏节点问题,导致大小区大小.
具有聚焦光束的天线可能会有所帮助.多扇区定向天线可以提供高容量,范围.天线的类型,其位置和天线增益决定了无线电传输范围和覆盖区域.
通信信道/工作频率 – 在同一无线电覆盖区域内以相同频率工作的其他AP的存在可能会造成干扰.在这种情况下,如果附近只有802.11设备,则应相应地更改操作信道和信道间隔以减少干扰.
功率级别 – 较高功率级别可以增加范围,但如果附近有AP,则可能导致干扰.对于更高容量,AP可能靠近在一起,在这种情况下,低功率电平是优选的以减少干扰.
其他设备 – 干扰也可以由非802.11设备引入,如微波炉,蓝牙,无绳电话等.在这种情况下,最好移除这些设备或屏蔽它以避免干扰.
突发方面的数据包丢失似乎也表明堆栈无法处理突发流量,其流量整形策略可能只是简单地丢弃这些突发数据包.仔细检查是否产生了此类流量突发.
NACK没有到达服务器:
同样,这可能是由于传输媒体相关的问题可能导致NACK通过空中丢弃.如果NACK已到达主机但未到达服务器应用程序/未处理,则可能是由于服务器的体系结构或与堆栈相关的OS配置.
分析丢包情况的典型步骤
>检查防火墙设置,操作系统配置,路由器配置和网络硬件功能/配置(吞吐量功能,操作模式),中间节点配置/功能(MTU,路由/转发表)>在无线路径上,检查AP的位置,工作范围(频率),信道间隔,SNR,RSSI,天线类型/增益,覆盖空洞,与AP的距离,其他802.11设备的存在&覆盖范围内的非802.11设备.>检查所有输入的数据包统计信息&各节点的输出点&接口>检查所有输入的数据包统计信息&应用程序/协议层中的输出点>重复测试以识别丢包模式,包括吞吐量,数据包大小,运行持续时间,不同应用,不同有效载荷大小,不同数量的pkts,功率电平,AP位置,信道……等各种组合也是一种方式确定问题的范围.