理论教育 ICMP报文格式及详解

ICMP报文格式及详解

时间:2023-11-22 理论教育 版权反馈
【摘要】:ICMP是TCP/IP的强制协议。ICMP信息也可能丢失。但是为了防止ICMP信息无限地连续发送,对ICMP报文的传输问题不能再使用ICMP传达。图5-14ICMP报文首部1)类型。16bit,对整个ICMP报文进行校验。ICMP报文分为查询报文和差错报告报文。值得注意的是,IP数据报的校验和检测出错误时,只是丢弃IP数据报,不会发送任何ICMP报文。“目的不可达”ICMP报文的格式如图5-15所示。就是由于目的端口号才导致产生了ICMP端口不可达的差错报文。

ICMP报文格式及详解

ICMP是一种对通信环境遇到有关问题的一种信息反馈机制,这种机制为路由器或目标主机提供了一种方法,使它们在遇到问题时能把信息反馈给原始报源,例如,生存期TTL的期限到达。

ICMP是TCP/IP的强制协议。虽然在TCP/IP体系中,ICMP经常被认为是IP层的一个组成部分,而实际上它是IP的一个用户。ICMP报文向下传递给IP,由IP用IP首部对这个报文进行封装,也就是说ICMP报文是作为IP数据报的数据部分被传输的,如图5-13所示。之所以这样做,是因为ICMP报文的传递可能要跨过几个物理网络,所以它要利用IP的路由机制,没有办法像ARP一样可以利用单个物理网络的帧结构来传递。

因为ICMP报文在IP数据报中传输,它的交付也同样是没有保证的。ICMP信息也可能丢失。但是为了防止ICMP信息无限地连续发送,对ICMP报文的传输问题不能再使用ICMP传达。另外,被分片的IP数据报,只对第一个分片——也就是分片偏移量为0的分片才能使用ICMP报文。

978-7-111-31053-2-Chapter05-26.jpg

图5-13 作为IP数据报数据部分的ICMP报文

ICMP报文以64bit的首部开始,这个首部的组成如图5-14所示。ICMP报文首部各字段的含义如下。

978-7-111-31053-2-Chapter05-27.jpg

图5-14 ICMP报文首部

1)类型。8bit,定义了ICMP报文的类型。如表5-1所示。

表5-1 ICMP报文类型

978-7-111-31053-2-Chapter05-28.jpg

2)编码。8bit,提供了关于一个类型的更多信息。例如,类型字段为3的目的不可达的ICMP报文中,又分为网络不可达(编码为0)、主机不可达(编码为1)、协议不可达(编码为2)等16种ICMP报文。(www.daowen.com)

3)校验和。16bit,对整个ICMP报文进行校验。与IP首部中使用的校验和算法相同。

4)参数。32bit,用于定义更长的参数。

ICMP报文分为查询报文和差错报告报文。例如,回显应答(类型为0)和应答请求(类型为8)就是查询报文,而目的不可达(类型为3)和IP数据报超时(类型为11)就是差错报告报文。值得注意的是,IP数据报的校验和检测出错误时,只是丢弃IP数据报,不会发送任何ICMP报文。

对于差错报告报文,ICMP的一个规则是,必须包括生成该差错报文的数据报的IP首部(包含任何选项),还必须包括跟在该IP首部后的数据字段的前8字节。为什么要这样规定呢?原因是这8字节包含着高层协议的信息。下面以“目的不可达”的ICMP报文为例说明这个问题。“目的不可达”ICMP报文的格式如图5-15所示。

978-7-111-31053-2-Chapter05-29.jpg

图5-15 “目的不可达”的ICMP报文

例如,现在收到了一份UDP数据报,而目的端口与某个正在使用的进程不相符,那么UDP就会返回一个ICMP端口不可达报文(类型为3,编码为3),如图5-16所示。该报文封装在IP数据报中,再一起封装在MAC帧中。

978-7-111-31053-2-Chapter05-30.jpg

图5-16 返回的ICMP端口不可达报文

导致差错的数据报中的IP首部要被送回的一个原因是源主机可以用收到的ICMP报文来匹配一个数据报,另一个原因是因为IP首部中包含了协议字段,使得ICMP可以知道如何解释后面的8字节(在本例中是UDP首部)。

在这里,包含在UDP首部中的内容是源端口号和目的端口号。就是由于目的端口号才导致产生了ICMP端口不可达的差错报文。接收ICMP的系统可以根据源端口号来把差错报文与某个特定的用户进程相关联。在这个例子中,上层协议采用的是UDP,而对于TCP而言,虽然TCP首部最小为20字节,但大家会发现源端口和目的端口被包含在TCP首部的前8字节中,对于ICMP报文来说这就足够了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈