Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 丢失UDP数据包的可能性有多大?_Networking_Udp_Packet Loss - Fatal编程技术网

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

Networking 丢失UDP数据包的可能性有多大?,networking,udp,packet-loss,Networking,Udp,Packet Loss,好的,我正在为我的网络课程编程,我必须使用UDP在Java中实现一个项目。我们正在实现一个HTTP服务器和客户端以及一个“gremlin”函数,该函数以指定的概率破坏数据包。HTTP服务器必须在应用层将一个大文件分成多个段,然后通过UDP发送到客户端。客户端必须在应用层重新组装接收到的段。然而,我想知道的是,如果UDP根据定义是不可靠的,为什么我必须在这里模拟不可靠 我的第一个想法是,也许这仅仅是因为我的导师在我们的案例中计算出,客户端和服务器都将在同一台机器上运行,并且文件将100%可靠地从一

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

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

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

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

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

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

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

这里还讨论了有效负载的有效性,而不仅仅是数据包丢失

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

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

我在论坛上找到了一些关于这个话题的帖子

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

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

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


您可能对以下页面感兴趣,并且可能对这些页面感兴趣。

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

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

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

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

为了在数据包丢失的情况下测试软件的行为,我建议进行两种不同的模拟

  • 在每个数据包上,以10%的概率丢弃数据包,并以90%的概率发送数据包
  • 每秒最多传输100个数据包或100KB,如果应用程序发送更多数据包,则丢弃其余数据包

  • 我猜你从来没有坏的网络连接;UDP主要用于接收器无法响应的场景。例如,通过卫星、无线电波等进行数据传输,而不是“在接收器无法响应的情况下”,我想说的是,它用于丢失数据包并不重要的场景,如音频/视频流、视频会议等。从这里的经验讲,我有一个项目,其中两个程序通过UDP进行通信,有时会发生数据包丢失,我无法想象为什么,它们运行在同一台计算机上,并通过环回接口进行通信。是的,你必须实现你的gremlin函数,这是一件好事,因为即使可靠性很高(我没有任何统计数据,但我认为环回的数据超过99.9%甚至更高),数据包丢失仍然会发生。这里的数据来源将是有用的。