概念
ICMP是(Internet Control Message Protocol)互联网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
理解
ICMP协议是网络层协议。
ICMP协议是一种面向无连接的协议。
ICMP协议是IP协议的伴随协议,主机或路由器可以利用ICMP彼此通告网络层信息,典型的应用是差错报告。
ICMP被认为是IP协议的一部分,但在体系结构上ICMP在IP之上,因为ICMP的消息需要封装在IP分组中。
ICMP协议主要功能
- 刺探主机是否响应
- 建立及维护路由资料
- 重导资料传送路径(ICMP重定向)
- 资料流量控制
Ping工具、Traceroute工具基于ICMP协议实现
Ping
Ping命令通过发送ICMP回声请求报文来检测与另一个主机(或路由器)的通信可达性,常用于排除或诊断网络连接故障。
应用程序Ping发出的报文是ICMP回声请求报文,接收的是ICMP回声应答报文。
Ping命令可以检测与目的主机之间通信的RTT(往返时间),但不能检测通信路径上的路由器。
Ping of Death
利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)
Traceroute
可以检测从源主机到互联网另一目的主机(或路由器)的分组传输路径,UNIX系统中是Traceroute,在MS Windows系统则是Tracert。
Traceroute(Tracert)依次向目标主机发送设定不同TTL值(Time To Live 是IP协议包中的一个值,它告诉网络,数据包在网络中的时间是否太长而应被丢弃。)、封装ICMP回声请求报文的IP数据报,路径上的每个路由器在转发IP数据报前将其TTL值减1,当TTL值减为0时,路由器丢弃该IP数据报,并向源主机发送ICMP超时报文,源主机收到ICMP超时报文,则探测到路径上相应的路由器,直到目的主机发回回声响应报文为止,源主机则探测到路径上所有的路由器。Traceroute(Tracert)通过递增发送的IP数据报的TTL值,依次检测路径上的路由器,直到目标主机返回ICMP回声响应报文或达到最大TTL值。例如, TTL=1 T T L = 1 时,可以检测到第1个路由器, TTL=2 T T L = 2 时,可以检测到第2个路由器,以此类推。
Traceroute(Tracert)对于每个TTL值发送三个数据报,即对每个路由器进行三次探测,并在对每个路由器进行探测时,实现对到达该路由器的RTT进行统计。