我知道UDP是一个不可靠的协议,在这个协议中,事情可能会失序,不能完全到达等等。
我也知道,当使用UDP进行跟踪路由时,到达TTL = 1的路由器的数据包和到达指向非开放端口的terminal主机的数据包会生成ICMP错误消息,并将其发回给发送方。
我的问题是 – 发送者是否有任何方法知道标准数据包是否被丢弃? 我知道这个协议是不可靠的,但是接收方在UDP协议中发回的任何“ack”都可以让发送者知道丢失的数据包吗?
对于基本的UDP,这是一个直接的协议问题,我不想知道我能做什么。 我已经读了几件事情,虽然我基本上100%肯定答案是否定的,但你不能说,我读了一些让我感到不安的东西。
根据定义,如果一个UDP数据包被丢弃,接收者就不能发送通知给发送者,因为没有收到任何东西。 您可以在UDP上层叠您自己的确认系统。 即使是一个简单的“如果在X秒内没有收到数据,就发送一个数据包给发送者”。 您可以将自己的序列号embedded到UDP数据包中,这样可以检测到丢失/丢失的数据包,但是您可能会想要使用TCP,因为序列号和丢失/丢失的数据包处理都是“免费”的TCP。
基本上,UDP是不容忽视的。 路由器可以随意丢弃数据包,而不会通知发送者或接收者。 如果他们不得不生成这样一个丢弃通知数据包,它只会增加导致UDP数据包首先被丢弃的拥塞条件。 如果可能的话,路由器会发送一个UDP数据包,但是如果事情忙的话,UDP的优先级将低于其他协议。
理解一个UDP数据包最简单的方法就是将它与一把枪的子弹进行比较。 它被发送出去,就枪(发送者)而言,工作就完成了。 虽然有方法来创build反馈,但这是一个必须加以解决,因为它不是内置的。