gpt4 book ai didi

sockets - UDP丢包模拟&概率

转载 作者:行者123 更新时间:2023-11-30 16:35:53 27 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%。

如果您想要更详细的统计数据,例如在任何特定时间段内丢弃数据包的概率,唯一真正了解的方法是尝试并找出答案(例如使用数据包中的序列号,以便接收方可以通过记录跳过的序列号来检测数据包何时被丢弃。概率很大程度上取决于数据包的大小、发送数据包的速度、接收器的 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/48722151/

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