ICMP可靠性

假设有人发送UDP数据包,就像traceroute实现一样。 该数据包在IP头中的TTL为1,导致第一个路由器丢弃该数据包,并向发送方生成一个ICMP超时响应。

路由器是否有任何保证,发件人收到它生成和发送的ICMP超时错误消息?

ICMP是否在UDP之上实现? 是否有作为ICMP的一部分实施的错误控制机制?

我想要一个非常基本的简单答案,我只是认为我会用几种方法来解决这个问题,所以会更清楚。

ICMP不是UDP,实际上甚至不是IP。 这是另外一个OSI第3层协议(networking层)。 也就是说,它在一个数据包的开头有一个IP兼容的头。

不保证ICMP数据包将被传送。 它在互联网上有任何其他数据包的交付保证:没有。 没有尝试确保它被传递,没有重试机制,但在IP头和ICMP头中都有一个校验和。 更高级别的协议应该重试发送产生错误的数据包,这将导致生成另一个超时数据包,并且最终其中一个将被发送者接收。

http://www.networksorcery.com/enp/protocol/icmp.htm有一个示例ICMP头(封装在与IP头相同的内部)以及有关不同types的ICMP消息的信息。

鉴于人们对这个post的误解和误解,我会澄清一下

IP是互联网的通用语言。 数据包通过其IP头被路由。 协议被封装在IP(TCP,UDP,SCTP等)内,用于大多数应用级通信。

当IP层通信出现问题时,如何沟通? ICMP用于此。 你能在IP中传递IP层错误吗? 这是一个鸡蛋和鸡蛋的问题,正如RFCs所表明的那样,会变得浑浊。 ICMP消息有一个IP头,为它们保留一个IP协议,但是ICMP是一个IP层协议,而不是封装在一个IP包内。 所以我认为这是一个和IP一起使用的协议。

对于“ICMP是否是IP”,我们可以整天说服,但是我承认的最多的是,是IP,“有点”。

ICMP是IP,而不是UDP,但是你是对的,这是不可靠的。

这是一个用法列表 。