C 无线网络上带有多个套接字的UDP
我用多播套接字编写了一个简单的udp服务器客户端应用程序。服务器每6毫秒向三个客户端发送数据包。小包裹 大小为1200字节。这是每秒166,66个数据包。每当一个客户端检测到丢失的数据包时,它就会通过单播向服务器发送一个NACK数据包 . 第一次测试: 服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常 第二次测试: 只有服务器通过以太网连接到路由器,其他客户端通过无线2.4 GHz和固定通道连接。出现了两个问题 使用无线:第一个问题是数据包丢失,客户端只接收到50%的数据包。并且以突发方式出现丢失,例如接收到400个数据包, 200个数据包丢失等。第二个问题是,当客户端将NACK数据包发送回服务器时,我可以在wireshark上看到这些数据包,但我的应用程序无法接收它们。 这很奇怪,因为代码与客户端通过以太网连接时的代码相同。有什么想法吗?我会很感激的 服务器代码:C 无线网络上带有多个套接字的UDP,c,udp,multicastsocket,C,Udp,Multicastsocket,我用多播套接字编写了一个简单的udp服务器客户端应用程序。服务器每6毫秒向三个客户端发送数据包。小包裹 大小为1200字节。这是每秒166,66个数据包。每当一个客户端检测到丢失的数据包时,它就会通过单播向服务器发送一个NACK数据包 . 第一次测试: 服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常 第二次测试: 只有服务器通过以太网连接到路由器,其他客户端通过无线2.4 GHz和固定通道连接。出现了两个问题 使用无线:第一个问题是数据包丢失,客
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已到达主机但未处理服务器应用程序/未处理,则可能是由于服务器的体系结构或与堆栈相关的操作系统配置 分析数据包丢失场景的典型步骤
数据包是否通过相同的路径?否则,路径中某些n/w元素的多播配置可能会出现问题UDP不是可靠的传输,因此可能会丢弃数据包。其次,在大多数情况下,UDP广播由网络节点限制,因此广播仅在同一电缆或无线路由器同一侧设备的特定子网中可见。丢弃UDP数据包的原因有很多,其中之一是网络堆栈耗尽了可用的网络数据包缓冲区。因此,如果您有大量流量,并且网络节点无法在更多数据进入之前传输已接收的数据,数据包将被丢弃。我不确定我是否理解path…a