ICMP:Internet控制报文协议

一.ICMP协议介绍

 ICMP经常被认为是 IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议( TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。

 ICMP报文是在IP数据报内部被传输的。

二.ICMP协议报文的主要功能

 ICMP报文的主要功能:

1.确认IP包是否成功达到目标地址

2.通知在发送过程中IP包丢失的原因

我们需要注意几点: 

1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议 

2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6

三.ICMP协议报文格式

ICMP报文的格式如下:

 8位类型字段/8位代码:类型字段可以有15个不同的值,配合特定的8位代码字段以描述特定的ICMP报文。如下:

 这里注意80和00,分别代表请求回显和请求应答,ping的两个ICMP的报文。

下面一些情况不会导致产生ICMP差错报文:

1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文) 。

2) 目的地址是广播地址或多播地址IP数据报。

3) 作为链路层广播的数据报。

4) 不是IP分片的第一片。

5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。 

16位检验和:检验和字段覆盖整个ICMP报文。使用的算法与其他协议相同。 

ICMP报文的三种类型

1) 目标不可达

2)源抑制

3)超时报文

这三种报文的格式是一样的。 

目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。 
例如:我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。 

常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。 

源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。 无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。 

超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。

四.ICMP协议报文命令

ICMP报文命令分别为ping命令traceroute命令

ping命令用法

ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

 traceroute命令用法(打印出可执行程序主机,一直到目标主机之前经历多少路由器。)

traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推.......当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。 

可以从wireshark中抓取一个简单的ICMP报文看一下结构:

————————————————
版权声明:本文为CSDN博主「honeyRJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_37964071/article/details/80514340

 

 

 

 

原文地址:https://www.cnblogs.com/longlyseul/p/12941652.html