辅助IP的ICMP ( Internet Control Message Protocol)
架构IP网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。
例如:一个刚刚搭建好的网络,需要验证该网络的设置是否正确。此外,为了确保网络能够按照预期正常工作,一旦遇到什么问题需要立即制止问题的蔓延。为了减轻网络管理员的负担,这些都是必不可少的功能。
ICMP正是提供这类功能的一种协议。
ICMP的主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由ICMP负责通知。
如下图所示:
主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这时,路由器2就会向主机A发送一个ICMP包,说明发往主机B的包未能成功。
ICMP的这种通知消息会使用IP进行发送。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1在转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因。
ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。
这里写图片描述
我们需要注意几点:
1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6
ICMP的报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。
如下图:
在Windows DOS 窗口Ping IP时,就会发送一个ICMP 报文;
ping 命令能验证网络的连通性,会统计响应时间和TTL(IP 包中的Time To Live,生存周期)
ping工作过程: (1)ping 命令会先发送一个ICMP Echo Request给对端;(2)对端接收到之后,会返回一个ICMP Echo Reply;(3)若没有返回,就是超时了,即ping不通,会认为指定的网络地址不存在。
eg.本地IP是172.28.110.111,ping对方172.28.110.128, 172.28.110.XX /24
抓包如下:
Traceroute
tracerout也是基于ICMP协议实现,能够打印出可执行程序逐级,一直到目标主机之前经历多少路由器。