假设有人发送UDP数据包,就像traceroute实现一样。 该数据包在IP头中的TTL为1,导致第一个路由器丢弃该数据包,并向发送方生成一个ICMP超时响应。
路由器是否有任何保证,发件人收到它生成和发送的ICMP超时错误消息?
ICMP是否在UDP之上实现? 是否有作为ICMP的一部分实施的错误控制机制?
我想要一个非常基本的简单答案,我只是认为我会用几种方法来解决这个问题,所以会更清楚。
ICMP不是UDP,实际上甚至不是IP。 这是另外一个OSI第3层协议(networking层)。 也就是说,它在一个数据包的开头有一个IP兼容的头。
不保证ICMP数据包将被传送。 它在互联网上有任何其他数据包的交付保证:没有。 没有尝试确保它被传递,没有重试机制,但在IP头和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,但是你是对的,这是不可靠的。
这是一个用法列表 。