java 发送时UDP数据包丢失是否可能?

rkue9o1l  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(208)

我的教授给了我一个任务,通过UDP实现文件传输,它实现了像TCP一样的可靠性保护机制(CRC校验,正确的包顺序,ACK/NACK)。我从他那里得到了一些默认类(Socket & Channel)来模拟本地机器上的数据包丢失和延迟。发送数据包时的数据包丢失也在其类中模拟。但是,这意味着如果ACK没有被正确发送,我也不会注意到它,因为从服务器到客户机的ACK没有用从客户机到服务器的ACK的ACK来确认。2我认为包丢失只会在接收包时发生。在真实的情况中,是否有可能在发送时丢失数据包,而不会发生代码异常?
问候

cvxl0en2

cvxl0en21#

在实际情况中,是否有可能在发送时丢失数据包,而不会发生代码异常?
简单。只需以比网络接口转发速度更快的速度从应用程序发送数据包。当然,途中的任何中间系统(iidoEe交换机,路由器)也可能会过载和松散的数据包。
但是最后,分组如何丢失实际上并不重要,即,分组是在发送时在本地系统上丢失、在接收时在远程系统上丢失还是在转发时在两者之间丢失,简单地不能假设成功的send将与成功的recv匹配。

1mrurvl1

1mrurvl12#

IP数据包包含传输协议(TCP、UDP等),并且由于路径中某个点的超额订阅等原因,您总是会丢失IP数据包。QoS控制也可以使用类似RED的东西,故意丢弃数据包,以防止队列填满或发生尾部丢弃。TCP可以认识到TCP数据段(不是数据包)丢失并重新发送它们,但是UDP没有机制来意识到它的数据报(不是数据包)丢失。UDP是一种“发射后忘记”协议。

相关问题