(简单)UDP 协议 - 网络

(简单)UDP 协议 - 网络

我知道 UDP 是一种不可靠的协议,其中数据可能会无序到达、无法完全到达等等。

我还知道,当使用 UDP 进行类似 traceroute 的操作时,到达路由器的 TTL=1 的数据包和到达终端主机且目的地为非开放端口的数据包会生成 ICMP 错误消息,这些消息会被传回发送方。

我的问题是 - 发送者是否有办法知道标准数据包是否被丢弃?我知道该协议不可靠,但是 UDP 协议中的接收者是否会发回任何类型的“确认”以允许发送者知道数据包被丢弃?

这是一个关于基本 UDP 的直接协议问题,我不想知道我“能做什么”。我现在已经阅读了一些内容,虽然我基本上 100% 确定答案是否定的,但你看不出来,我读了几件事让我对此感到不安。

答案1

根据定义,如果 UDP 数据包被丢弃,接收方无法向发送方发送回通知,因为没有收到任何信息。您可以在 UDP 之上分层自己的确认系统。即使是简单的“如果在 X 秒内未收到任何数据,则向发送方发送一个数据包以表明这一点”。您可以将自己的序列号嵌入 UDP 数据包中,以便可以检测到丢弃/丢失的数据包,但无论如何您可能还是希望使用 TCP,因为序列号和丢弃/丢失的数据包处理都是“免费”的。

基本上,UDP 是“发后不管”的。路由器可以随意丢弃数据包,而无需向发送方或接收方发出任何通知。如果它们确实必须生成这样的丢弃通知数据包,那么它只会增加最初导致 UDP 数据包被丢弃的拥塞情况。如果可以,路由器将发送 UDP 数据包,但如果情况变得繁忙,UDP 的优先级将低于其他协议。

答案2

理解 UDP 数据包最简单的方法是将其比作从枪中射出的子弹。它被发送出去,就枪(发送者)而言,任务已经完成。虽然有方法可以创建反馈,但这是必须添加的东西,因为它不是内置的。

相关内容