(简单)UDP 协议 - 网络

Joh*_*eys 1 networking udp network-protocols

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

我还知道,当将 UDP 用于 traceroute 之类的东西时,到达路由器的 TTL=1 的数据包和到达目的地为非开放端口的终端主机的数据包会生成 ICMP 错误消息,这些消息会传输回发送方。

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

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

小智 7

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

基本上,UDP 是一劳永逸的。路由器可以随意丢弃数据包,而无需通知发送方或接收方。如果他们确实必须生成这样的丢弃通知数据包,它只会增加导致 UDP 数据包被丢弃的拥塞条件。如果可以,路由器将传送 UDP 数据包,但如果事情变得繁忙,UDP 将获得比其他协议更低的优先级。