当前位置: 首页 > 知识库问答 >
问题:

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

唐彦
2023-03-14

我写了一个简单的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 ms=每秒100个数据包=0.076 MB /s

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

一切似乎都很好

共有1个答案

洪伟彦
2023-03-14

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

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

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

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

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

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

功率水平-较高的功率水平可以增加范围,但如果附近有接入点,它会导致干扰。对于较高的容量,AP可能靠近在一起,在这种情况下低功率电平是优选的以减少干扰。

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

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

NACK没有到达服务器:同样,这可能是由于传输媒体相关的问题,这些问题会导致NACK在空中丢失。如果NACK已经到达主机而不是服务器应用程序/未处理,那么它可以归因于与服务器体系结构或堆栈相关的OS配置。

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

  1. 检查防火墙设置、操作系统配置、路由器配置和网络硬件功能/配置(吞吐量能力、操作模式)、中间节点配置/功能(MTU、路由/转发表)
 类似资料:
  • 问题内容: 我正在尝试使用nodejs创建类似聊天的内容。我是nodejs的新手,我想在没有socket.io的情况下创建它(我想了解它的工作原理)。这是我正在使用的代码。 而且一切正常,(我认为)。当我打开localhost:7000时,我收到有关“ CONNECTED TO:”和“ connected”以及“ I am Chack Norris”的节点CMD消息。之后,我尝试在浏览器控制台中编

  • 我用的是SpringMVC 4 Tomcat。我的应用程序用@ Autowired SimpMessagingTemplate得到了2个类(A和B)。每个类都有一个调用“convertAndSend”的线程。 A类发送一条由8个双字段和3个长字段组成的消息。它向大约500个主题发送消息,例如“/主题/价格. X”(其中X-一些随机字符串)。频率-在单个循环中每秒最多4次(每个主题)。 B 类发送一

  • 计算机网络基础 ip地址 为了使网络上的计算机能够彼此识别对方,每台计算机都需要一个IP地址以标识自己。 IPv4:32位,IPv6:64位 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 地址解析 地址解析是指将计算机的协议地址解析为物理地址,即MAC(Medium Access Control)地址,又称为媒体访问控制地址。通常,在网络上由地址解析协议(ARP)

  • 问题内容: 我正在尝试在C中创建一个多线程服务器- 客户端文件传输系统。有些客户端将发送或列出或做其他选择(在交换机的情况下,您可以看到),而服务器则存储文件并提供大量服务客户。 就我所知,多线程意识形态确实很困难。它需要太多的经验而不是知识。我已经在该项目上工作了一个多星期,但我一直无法解决这些问题。 有4个选择:第一个是在其目录中列出客户端的本地文件,第二个是在客户端和服务器之间传输的列表文件

  • 函数 描述 [[socket socket]] 创建一个套接字描述符 [[socketpair socketpair]] 创建一个套接字偶对 [[shutdown shutdown]] 断开套接字连接 [[close close]] 销毁套接字 套接字选项 函数 描述 [[getsockopt sockopt]] [[setsockopt sockopt]] 适用于流式套接字和数据报套接字 流套接

  • 套接字地址结构 地址结构 说明 sockaddr_un UNIX通信域套接字地址 sockaddr_in IPv4套接字地址 sockaddr_in6 IPv6套接字地址 sockddr_un struct sockaddr_un { sa_familly_t sun_family; char sun_path[]; } sockaddr_in /* 在头文件<netinet/in