好的,我正在为我的网络课程编程,我必须使用UDP在Java中实现一个项目。我们正在实现一个HTTP服务器和客户端以及一个以特定概率破坏数据包的'gremlin'函数。 HTTP服务器必须将大文件分成多个段,在应用层通过UDP发送到客户端。客户端必须在应用层重新组合收到的段。然而我想知道的是,如果UDP根据定义不可靠,为什么我必须在这里模拟不可靠性?
我的第一个想法是,也许这只是因为我的导师在我们的案例中计算,客户端和服务器都将在同一台机器上运行,并且文件将100%可靠地从一个进程转移到另一个进程UDP,因为它位于同一台计算机上的两个进程之间。
这使我质疑UDP,丢失数据包,损坏数据包,或者如果服务器和客户端是同一台机器上的两个进程而无法通过实际网络。
我也想知道实际丢失数据包的机会是什么,让它损坏,或者实际上它们在现实中无法发送,通常会在两个地理位置较远的主机之间通过互联网传播。
非常感谢任何能够为我解释这些问题的人。
答案 0 :(得分:9)
如果UDP根据定义不可靠,为什么我必须在这里模拟不可靠性?
拥有一个受控机制来模拟最坏情况以及客户端和服务器如何响应它们是非常有用的。教师可能希望您展示系统的稳健性。
您还在谈论有效负载有效性,而不仅仅是数据包丢失。
这使我质疑UDP,丢失数据包,损坏数据包,或者如果服务器和客户端是同一台机器上的两个进程而无法通过实际网络。
这显然不太可能超过环回适配器,但这并非不可能。
我也想知道实际丢失数据包的机会是什么,让它损坏,或者实际上它们在现实中无法发送,通常会在两个地理位置较远的主机之间通过互联网传播。
这个问题可能需要缩小一点。应用程序级别(数据包大小和频率)以及路径上的路由器和交换机的限制/流量有几个因素。
我找不到任何硬数据,但似乎相当低......比如5%以下。
您可能对The Internet Traffic Report以及可能的页面感兴趣,例如this。
答案 1 :(得分:8)
由于多种原因导致丢包。主要是由于单个链路上的错误和网络拥塞造成的。
当链路正常工作时,由于链路错误导致的数据包丢失非常低。低于0.01%并不罕见。
由于拥塞导致的数据包丢失显然取决于链路的繁忙程度。如果整个路径上有备用容量,则该数字为0%。但随着网络繁忙,这个数字将会增加。正确完成流量控制后,此数字不会变得非常高。一些丢失的数据包通常足以让某人降低传输速度,足以阻止数据包因拥塞而丢失。
如果数据包丢失率达到1%则出现问题。这可能是您的拥塞控制算法如何响应数据包丢失的错误。如果它以相同的速率继续发送数据包,当网络拥塞并丢失数据包时,数据包丢失可以推得更高,如果软件行为不当,可能会丢失99%的数据包。但这取决于所涉及的链接类型。千兆以太网使用背压控制流量,因此,如果从源到目的地的路径是单千兆以太网段,发送应用程序可以简单地放慢,从未看到实际分组丢失。
为了测试数据包丢失时的软件行为,我建议进行两种不同的模拟。
答案 2 :(得分:0)
我通过 wifi 向一些 nanoleaf 面板发送 udp 数据包,我的数据包丢失率大约为 1/7000。
我认为这取决于很多因素。