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只能用来检测问题,不能解决任何网络问题。