假设有人发送了一个 UDP 数据包,就像一个traceroute
实现一样。该数据包在 IP 标头中的 TTL 为 1,导致第一个路由器丢弃它并向发送方生成一个 ICMP Time Exceeded 回复。
路由器是否有任何保证发送方收到它生成并发送的ICMP Time Exceeded错误消息?
ICMP 是在 UDP 之上实现的吗?如果是,是否有任何错误控制机制作为 ICMP 的一部分实施?
我想要一个非常基本的简单答案,我只是想我会以几种方式解决这个问题,这样会更清楚。
我知道 UDP 是一种不可靠的协议,它可能会无序到达、无法完全到达等。
我还知道,当将 UDP 用于 traceroute 之类的东西时,到达路由器的 TTL=1 的数据包和到达目的地为非开放端口的终端主机的数据包会生成 ICMP 错误消息,这些消息会传输回发送方。
我的问题是 - 发件人是否有办法知道标准数据包是否被丢弃?我知道该协议是不可靠的,但是接收方在 UDP 协议中发回的任何类型的“确认”是否允许发送方知道丢弃的数据包?
这是基本 UDP 的一个直接协议问题,我不想知道我“能做什么”。我现在已经通读了一些东西,虽然我基本上 100% 确定答案是否定的,但你看不出来,我读了一些让我对此感到不安的东西。