TCP/IP五层模型-网络层-ICMP协议

​1.定义:ICMP(Internet Control Message Protocol)是网际控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

2.作用:主要是用于补充IP传输数据报的过程中,发送主机无法确定数据报是否到达目标主机。ICMP报文分为出错报文和查询报文两种。若数据报不能到达目标主机,ICMP出错报告报文可以以回送信息的方式,向源主机发去信息,并不能纠正数据报中的任何出错。除了出错报告,ICMP还可以诊断出某些网络问题,这就是ICMP的查询报文。

ICMP差错报文:(type code组合决定发送的报文,具体见: 

http://www.cnitblog.com/yang55xiaoguang/articles/59581.html
ICMP目标不可达消息:IP路由器无法将IP数据报发送给目的地址时,会给发送端主机返回一个目标不可达ICMP消息,并在这个消息中显示不可达的具体原因。
ICMP重定向消息:如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个ICMP重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个ICMP重定向消息给发送端主机一个更合适的发送路由。
ICMP超时消息:IP数据包中有一个字段TTL(Time to live,生存时间),它的值随着每经过一个路由器就会减1,直到减到0时该IP数据包被丢弃。此时,IP路由器将发送一个ICMP超时消息(包含路由器自己的信息)给发送端主机,并通知该包已被丢弃。
源抑制消息:当TCP/IP主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个ICMP源抑制消息。

ICMP查询报文:

ICMP回送消息(echo):用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。
ICMP地址掩码消息(Addressmask):主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送ICMP地址掩码请求消息,然后通过接收ICMP地址掩码应答消息获取子网掩码信息。
ICMP时间戳消息(Time stamp):可以向那些主机或路由器发送ICMP时间戳请求消息,然后通过接收ICMP时间戳应答消息获取时间信息。

常见的type + code组合:

正常的ping请求,使用icmp包,type 8 code 0
正常的ping回应,使用icmp包, type 0 code 0
因ttl失效导致丢包,丢弃包的设备也是用icmp包通知源主机,type 11 code 0
目标主机不可达(缺路由),路由器用icmp通知源主机,type 3 code 1
目标端口不可达(目标没开放端口),目标主机通过icmp通知源主机。可以用telnet ip 端口 来发出指定端口的包,type 3 code 3

3.PING:测试到达目标主机的连通性和延迟。原理:发出一个ping请求,对方回一个ping回应,使用icmp报文。常用参数:

-t  无限ping,测试稳定性
-l  指定包大小
-f  不允许分片,测试路径mtu
-n  指定icmp包个数
-i  指定ttl

ping的整个过程见:

https://blog.csdn.net/qiuchaoxi/article/details/79970201

4.Tracert:作用:Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据包访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。

工作过程:Windows系统下发的是icmp包,发送一个echo request请求包,ttl设置为1,检测第一跳,ttl设置为2,检测第二跳,直到到达最终目标,目标主机回应echo replay回应包。发3个包的作用是检测第一跳设备的网络连接延时和稳定性。Unix系统下发的是UDP包,端口随机,ttl设置为1,检测第一跳,ttl设置为2,检测第二跳,直到到达最终目标,目标主机回应icmp  port unreadable。

TTL:TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

5.ICMP报文解析:ICMP报文格式:

ICMP是控制协议,不需要端口号。ICMP 包发送是不可靠的,ICMP只能用来检测问题,不能解决任何网络问题。

原文地址:https://www.cnblogs.com/dawangk-3366/p/14286563.html