曾经看过这样的一道面试题,ICMP报文是基于什么传输层协议进行传输的?顺着他的思路传输层的两个主要协议TCP和UDP,区别也就是在于是否需要保证传输的可靠性。当时还没有系统的学习过ICMP的报文结构和组成,因此也没有过多思考,基于TCP。实际上,ICMP报文是不基于传输层的协议进行传输的,它只是对IP功能的一个补充。
ICMP报文通过IP报文发送,ICMP报文当做是IP数据包的数据部分,而IP数据包又被放到了以太网的数据帧中的数据区。我们知道IP数据报的首部有一个协议类型的字段,这个部分封装的是传输层的协议的类型,当IP数据部分为ICMP报文时,这里的首部协议类型字段也将改为1,表示为ICMP报文。
那么,ICMP到底是什么样的报文,它有什么用处吗?首先,ICMP报文分为了三类:差错控制类,请求/应答类,通知类。这三类报文包括了所有的ICMP报文的类型。
我们先看看ICMP报文的结构:
ICMP的不同的报文的类型中,