gpt4 book ai didi

sockets - UDP丢包模拟和概率

转载 作者:行者123 更新时间:2023-12-03 11:57:48 24 4
gpt4 key购买 nike

我目前正在创建一个与多个 arduino 板通信的服务器软件。由于硬件原因,我使用的是 UDP 协议(protocol)。我有一个非常简单的机制,可以在大多数情况下在包裹丢失时重新发送包裹。我现在有两个问题:

UDP 数据包在没有 Internet 访问权限、大约 20 个 arduino 和一台计算机的网络中丢失的可能性有多大?是否需要重新发送方法?

有没有办法可以模拟此网络中的 UDP 数据包丢失以检查重新发送机制是否正常工作?

最佳答案

How probable is it that UDP Packets get lost in a Network with no Internet access and about 20 arduinos and one computer?



数据包迟早会被丢弃的概率是 100%。

如果您想要更详细的统计信息,例如在任何特定时间段内丢弃数据包的概率,唯一真正知道的方法是尝试并找出(使用例如数据包中的序列号,以便接收器(s ) 可以通过记录跳过的序列号来检测数据包何时被丢弃)。概率很大程度上取决于数据包的大小、发送数据包的速度、接收器的 CPU 速度、接收器花费 CPU 时间执行的其他任务、以太网交换机的质量、质量您的以太网电缆、月相等。

Is it even neccessary to have a resend method?



这取决于丢弃数据包的后果。对于某些应用程序(例如流式音频或视频,或音频计量数据),丢弃数据包没什么大不了的;您只是忽略了一些数据丢失的事实,并像往常一样继续处理下一个数据包。对于其他应用程序(例如文件传输/接收),数据包的丢失意味着接收器需要的数据丢失,因此您需要有一些方法可以从丢失中恢复,例如通过检测它并触发重新发送,否则整个传输将失败(或者至少接收器最终将只得到部分文件)。

Is there a way I can simulate UDP Packet loss in this network to check if the resend mechanisms are working?



当然,只需将一些逻辑放入接收器中,以便它们偶尔假装没有收到数据包:
int numBytesReceived = recv(...);
if ((rand()%100) == 0) // Simulate a 1% packet loss rate
{
printf("Pretending to have dropped a packet!\n");
}
else
{
// handle the incoming packet as usual
}

关于sockets - UDP丢包模拟和概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com