前言

之前就很好奇为什么使用ping命令就可以知道网络是否连通,如果出错还可以告诉我什么地方有问题。在今天的内容里会给大家详细解释了什么是ICMP协议。

ICMP协议ICMP报文格式各类ICMP报文介绍

ICMP协议

ICMP网络控制报文协议是ICMP是TCP/IP协议簇的核心协议之一,它用于在IP网络设备之间发送控制报文,传递差错、控制、查询等信息。分为差错报告报文和询问报文

简单来说,ICMP协议就像是网络中的医生,可以检测并汇报网络中可能出现的问题。

icmp是不是网络层协议(网工成长笔记四)(1)

ICMP的报文格式

ICMP消息头部如下:

icmp是不是网络层协议(网工成长笔记四)(2)

Type:类型,占一个字节,标识报文的类型,值为1-127时是差错报文,值为128及以上时时信息报文。Code:代码,占一个字节,标识ICMP报文的代码,与类型一起标识了ICMP的详细信息。Checksum:校验和,用来检验报文在传输过程中是否出现了差错。Message Body:数据部分,是ICMP的数据。封装了ICMP消息的IP头部格式如下:

icmp是不是网络层协议(网工成长笔记四)(3)

常见的ICMP类型和含义如下:

icmp是不是网络层协议(网工成长笔记四)(4)

ICMP的报文

ICMP Echo Requset/replay消息,如下:

icmp是不是网络层协议(网工成长笔记四)(5)

Type:占1字节,请求回显值为0;回显应答值为8.Code:占1字节,此处值为0.Checksum:占2字节,校验和。Identifier:占2字节,标示符,发送端标识此发送的报文。Sequence Number:占2字节,序列号,发送端发送的报文的序号,发一次加一。Data:长度可变,其中包含要返回给发送者的数据。回显应答通常返回与所收到的数据完全相同的数据。

ICMP请求消息,如图:

icmp是不是网络层协议(网工成长笔记四)(6)

ICMP应答消息如图:

icmp是不是网络层协议(网工成长笔记四)(7)

我们平常使用的ping操作就会使用到请求和应答ICMP报文。主机想一个节点发送一个类型字段为8的ICMP报文,如果途中没有出现异常,则目标返回类型字段值为0的ICMP报文,说明这台主机存在。如果中途出现异常则回应类型字段值为其他的值。

icmp是不是网络层协议(网工成长笔记四)(8)

各报文如显示就是上面的图。

ICMP目的不可达消息如图:

icmp是不是网络层协议(网工成长笔记四)(9)

目的不可达时:

Type:消息类型值为3Code:消息代码,部分常见的:0 = net unreachable;网络不可达 ;1 = host unreachable;主机不可达 ;2 = protocol unreachable;协议不可达;3 = port unreachable; 端口不可达,使用tracert命令时发送的ICMP报文即为此类。

Checksum:校验和。Unused:未使用,值为0.Internet Header 64 bits of Original Data Datagram:IP首部 原始数据包的前8字节

icmp是不是网络层协议(网工成长笔记四)(10)

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。

比如,如果网络中发生了环路,导致报文在网络中循环,且最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的地不可达,则中间的网络设备会发送目的不可达消息给发送端设备。

目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。

例:在本地主机上使用tracert www.baidu.com会出现部分目的不可达,如图:

icmp是不是网络层协议(网工成长笔记四)(11)

由上图可知,Type=2,code=3,证明目标不可达,端口不可达,

ICMP重定向消息如图:

icmp是不是网络层协议(网工成长笔记四)(12)

Type:消息类型,此时为5.Code:消息代码,此时为0.Checksum:校验和。Gateway Internet Address: 原始数据包里的IP目的地址域。Internet Header 64 bits of Original Data Datagram: IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。

icmp是不是网络层协议(网工成长笔记四)(13)

重定向过程如图所示,主机A希望发送报文到服务器A,于是根据配置的默认网关地址向网关RTB发送报文。

网关RTB收到报文后,检查报文信息,发现报文应该转发到与源主机在同一网段的另一个网关设备RTA,因为此转发路径是更优的路径,所以RTB会向主机发送一个Redirect消息,通知主机直接向另一个网关RTA发送该报文。

主机收到Redirect消息后,会向RTA发送报文,然后RTA会将该报文再转发给服务器A。

ICMP超时

无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就会触发ICMP超时报文的产生。

icmp是不是网络层协议(网工成长笔记四)(14)

Type:此时消息类型值为3.Code:消息代码,值为0时标识数据TTL生存周期超时(time to live exceeded in transit),值为1时分段重组的时间超过了(fragment reassembly time exceeded)。Checksum:校验和。Internet Header 64 bits of Original Data Datagram:IP头和原始数据包的前64比特数据。该数据是主机用来匹配消息。

例:在主机上使用ping www.baidu.com -i 1,会产生生存周期过期现象,如图:

icmp是不是网络层协议(网工成长笔记四)(15)

icmp是不是网络层协议(网工成长笔记四)(16)

ICMP协议这个网络医生总是能帮我们检查出各种网络问题。

,