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

丢失UDP数据包的可能性有多大?

裴意
2023-03-14

好的,我正在为我的网络课程编程,我必须使用UDP在Java中实现一个项目。我们正在实现一个HTTP服务器和客户端以及一个“gremlin”函数,该函数以指定的概率破坏数据包。HTTP服务器必须在应用层将一个大文件分成多个段,然后通过UDP发送到客户端。客户端必须在应用层重新组装接收到的段。然而,我想知道的是,如果UDP根据定义是不可靠的,为什么我必须在这里模拟不可靠?

我的第一个想法是,也许这仅仅是因为我的老师在我们的案例中计算,客户端和服务器都将在同一台机器上运行,并且文件将从一个进程100%可靠地传输到另一个进程,即使是在UDP上,因为它是在同一台计算机上的两个进程之间。

这让我首先怀疑,如果服务器和客户机被保证是同一物理机器上的两个进程,并且被保证严格地路由到本地主机上,这样它就永远不会通过网络出去,UDP是否真的会丢失数据包、损坏数据包或发送数据包。

我还想知道,总的来说,对于给定的数据包,UDP在用于促进地理位置相当遥远的两台主机之间通过开放互联网进行通信时,丢弃/损坏/或交付数据包的大致概率是多少(比如说美国普通宽带用户到谷歌CDN之间的线路)?我主要是想大致了解通过UDP进行通信时遇到的情况,它是否丢弃/损坏/错序了25%的数据包,或者更像是0.001%的数据包?

非常感谢任何能为我解答这些问题的人。

共有3个答案

居英资
2023-03-14

我在wifi上向一些nanoleaf面板发送udp数据包,数据包丢失率约为1/7000。

我认为这取决于很多因素。

艾正浩
2023-03-14

如果UDP根据定义是不可靠的,为什么我必须在这里模拟不可靠?

有一个受控机制来模拟最坏情况以及客户端和服务器如何响应这些情况非常有用。讲师可能希望您演示系统的健壮性。

你也在这里谈论有效载荷有效性,而不仅仅是数据包丢失。

这让我怀疑,如果服务器和客户机是同一台机器上的两个进程,并且它不必通过实际的网络进行传输,那么UDP、丢失数据包、损坏数据包或者传输数据包是否会出现故障。

通过环回适配器显然不太可能,但这并非不可能。

我在这里和这里找到了一些关于这个主题的论坛帖子。

我还想知道,在两个地理位置遥远的主机之间,通过互联网实际丢失数据包、数据包被破坏或数据包被无序发送的可能性通常是多少。

这个问题可能需要缩小一点。应用程序级别(数据包大小和频率)以及路由器和交换机沿路径的限制/流量都有几个因素。

我找不到任何关于这个的确切数字,但它似乎是相当低的。。。比如低于5%。

您可能对Internet流量报告感兴趣,也可能对类似的页面感兴趣。

松景铄
2023-03-14

数据包丢失的发生有多种原因。它主要是由单个链路上的错误和网络拥塞造成的。

当链路正常工作时,由于链路错误导致的数据包丢失非常低。低于0.01%并不罕见。

拥塞导致的数据包丢失显然取决于链路的繁忙程度。如果整个路径上都有备用容量,则该数字将为0%。但随着网络变得繁忙,这个数字会增加。当流量控制正确完成时,这个数字不会很高。一对丢失的数据包通常足以使某人降低传输速度,从而阻止数据包因拥塞而丢失。

如果数据包丢失率达到1%,那就有问题了。这可能是拥塞控制算法如何响应数据包丢失的一个缺陷。如果它继续以相同的速率发送数据包,当网络拥塞和数据包丢失时,数据包丢失可能会被推得更高,如果软件出现错误,99%的数据包丢失是可能的。但这取决于所涉及的链接类型。千兆位以太网使用背压来控制流量,因此,如果从源到目的地的路径是单个千兆位以太网段,发送应用程序可能会简单地减慢速度,并且永远看不到实际的数据包丢失。

对于测试软件在丢包情况下的行为,我建议使用两种不同的模拟。

  1. 在每个数据包上,以10%的概率丢弃它,并以90%的概率发送它。
  2. 每秒最多传输100个数据包或100KB,如果应用程序发送更多数据包,则丢弃其余数据包
 类似资料:
  • 我一直在写一个程序,它使用UDP上的停止和等待协议通过局域网和广域网发送数据包。我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际原因是什么?

  • 我编写了一个简单的UDP服务器程序来了解更多可能的网络瓶颈。 UDP客户端:我使用hping如下所示: HPING 3 192.168.1.2-UDP-P 9996--洪水-D 100 当我以每秒100个数据包的速度发送udp数据包时,我没有发现任何udp数据包丢失。但是当我泛洪udp数据包时(如上面的命令所示),我会看到大量的数据包丢失。 因此,为了减少数据包丢失,我尝试了以下操作: -使用re

  • 我有一种生产者-消费者设置,其中生产者(不同线程上的多个生产者)将数据排入redis队列,消费者(单个线程上的单个消费者)监视该队列。当队列长度达到时,例如 使用redis-py客户端,我使用以下代码提取前10000项,并删除它们: (用于lrange和ltrim的文件) 我的问题是,这里有数据丢失的机会吗?例如,在调用函数ltrim()和实际修剪队列之间的时间(在这种情况下,最新的日志将丢失,因

  • 在我复习的问题中,我很难理解概率假设。 鉴于: 数据集中的每条记录都有一个唯一的事务id号(TXNID) TXNID之间的增量变化可根据事务时间预测(具体方法与问题无关) 因为增量变化是可预测的,所以我们可以确定两个连续TXNID之间是否缺少记录。具体来说,如果两个连续TXNID之间的差异大于预测的增量变化,则至少有一条记录丢失 两个TXNID之间的增量始终是一个介于1和20(含)之间的整数。 任

  • 我正在用c写一个抖动缓冲程序来处理rtp包。这里rtp使用UDP传输,所以连接不可靠,包会不整齐,也会有一些包丢失。如果包的顺序发生变化,我会通过序号(在rtp报头信息中)来排列,但是我怎么处理或者补偿包丢失呢?(因为包丢失不在我手上) 注意:我正在处理h264作为有效负载,他们要求我只使用RTP报头

  • 如果UDP数据包超过MTU,它能被分割成几个更小的数据包吗?看起来MTU碎片是关于IP层的,所以我认为它可以。 如果是,为避免碎片,建议通过UDP发送的最大数据包大小是多少?为什么?