其他分享
首页 > 其他分享> > 网络协议之ICMP

网络协议之ICMP

作者:互联网

什么是ICMP?

因特网控制报文协议ICMP(Internet Control Message Protocol)是一个差错报告机制,是TCP/IP协议簇中的一个重要子协议,通常被IP层或更高层协议(TCP或UDP)使用,属于网络层协议,主要用于在IP主机和路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。

为什么需要ICMP?

在数据传输的过程中,IP提供尽力而为的服务,指为了把数据包发送到目的地址尽最大努力。它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制。因此在数据包传输过程中,产生各种错误在所难免。为了更有效地转发IP数据包和提高数据包交付成功的机会,ICMP应运而生。使用ICMP,当网络中数据包传输出现问题时,主机或设备就会向上层协议报告差错情况和提供有关异常情况的报告,使得上层协议能够通过自己的差错控制程序来判断通信是否正确,以进行流量控制和差错控制,从而保证服务质量。

ICMP如何工作?

从技术角度来说,ICMP就是一个差错报告机制,其工作机理也比较简单,即当数据包处理过程出现差错时,ICMP向数据包的源端设备报告这个差错,它既不会纠正这个差错,也不会通知中间的网络设备。因为ICMP报文被封装在IP数据包内部,作为IP数据包的数据部分通过互联网传递。IP数据包中的字段包含源端和最终的目的端,并没有记录报文在网络传递中的全部路径(除非IP数据包中设置了路由记录选项)。因此当设备检测到差错时,它无法通知中间的网络设备,只能向源端发送差错报告。

源端在收到差错报告后,它虽然不能判断差错是由中间哪个网络设备所引起的,但是却可以根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发传递失败的数据包。

ICMP报文格式如图所示,每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,ICMP报文则作为IP数据包的数据部分封装在IP数据包内部。ICMP包头中包含的三个固定字段就是源端设备确定发生错误的类型的主要依据。

不同的Type和Code值表示不同的ICMP报文类型,对应了数据包处理过程中可能出现的不同错误情况,不同类型的ICMP报文又分为差错报文和查询报文两种,如ICMP报文分类表所示。

此外,我们还要认识到,ICMP协议在以下情况下不会产生ICMP差错报文:

ICMP报文格式  

 

ICMP报文格式

表1-1 ICMP报文分类

Type

Code

描述

查询/差错

0-Echo响应

0

Echo响应报文

查询

3-目的不可达

0

目标网络不可达报文

差错

1

目标主机不可达报文

差错

2

目标协议不可达报文

差错

3

目标端口不可达报文

差错

4

要求分段并设置DF flag标志报文

差错

5

源路由失败报文

差错

6

未知的目标网络报文

差错

7

未知的目标主机报文

差错

8

源主机隔离报文

差错

9

禁止访问的网络报文

差错

10

禁止访问的主机报文

差错

11

对特定的TOS网络不可达报文

差错

12

对特定的TOS主机不可达报文

差错

13

由于过滤 网络流量被禁止报文

差错

14

主机越权报文

差错

15

优先权终止生效报文

差错

5-重定向

0

重定向网络报文

差错

1

重定向主机报文

差错

2

基于TOS的网络重定向报文

差错

3

基于TOS的主机重定向报文

差错

8-Echo请求

0

Echo请求报文

查询

9-路由器通告

0

路由通告报文

查询

10-路由器请求

0

路由器的发现/选择/请求报文

查询

11-ICMP超时

0

TTL超时报文

差错

1

分片重组超时报文

差错

12-参数问题

0

IP报首部参数错误报文

差错

1

丢失必要选项报文

差错

2

不支持的长度报文

差错

13-时间戳请求

0

时间戳请求报文

查询

14-时间戳应答

0

时间戳应答报文

查询

15-信息请求

0

信息请求报文

查询

16-信息应答

0

信息应答报文

查询


ICMP的典型应用

 

IP数据报及其他应用程序通过ICMP报文可以实现多种应用,其中Ping程序和Tracert(Traceroute)程序最为常见。此外,在网络管理和监测中,网络质量分析NQA(Network Quality Analysis)技术更加充分应用了ICMP。

Ping

Ping程序是最常见的用于检测IPv4和IPv6网络设备是否可达的调试手段,它使用ICMP的echo信息来确定:

Tracert

Tracert程序主要用于查看数据包从源端到目的端的路径信息,从而检查网络连接是否可用。当网络出现故障时,用户可以使用该命令定位故障点。

Tracert利用ICMP超时信息和目的不可达信息来确定从一个主机到网络上其他主机的路由,并显示IP网络中每一跳的延迟(这里的延迟是指:分组从信息源发送到目的地所需的时间,延迟也分为许多的种类——传播延迟、传输延迟、处理延迟、排队延迟等)。

NQA

网络质量分析NQA(Network Quality Analysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。NQA能够实时监视网络服务质量,在网络发生故障时进行有效的故障诊断和定位。

利用不同类型的ICMP报文,NQA实现了Ping和Tracert功能的扩展和增强,可以实现对网络运行状况的准确测试,输出统计信息。比如NQA的ICMP测试、ICMP Jitter测试和Trace测试等。

ICMP安全

 

ICMP对于网络安全具有极为重要的意义。ICMP本身非常简单,它并不具有验证机制,这也导致它非常容易被用于攻击交换机、路由器等网络设备。

ICMP攻击

目前ICMP攻击绝大部分都可以归类为拒绝服务攻击(Denial of Service, DOS),其中最为常见的是ICMP泛洪攻击,是指攻击者在短时间内向目标设备发送大量的ICMP虚假报文,导致目标设备忙于应付无用报文,而无法为用户提供正常服务,其过程如下图所示。

ICMP泛洪攻击
ICMP泛洪攻击

ICMP泛洪攻击具体又可分为针对带宽的DOS攻击和端口扫描攻击(针对连接的DOS攻击)两类:

此外,还有针对主机的DOS攻击,又被称为Ping-of-Death,主要是攻击操作系统的漏洞。

由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方宕机。

根据这个原理,可以简单通过发送一个非法的ICMP Echo请求报文,就可以使目标系统崩溃或重启。许多系统包括Windows、Unix、Macintosh ,还有一些交换机、路由器和打印机,都容易遭受此类攻击。如果用户使用的操作系统的版本过于陈旧,请确保打好了补丁。

ICMP攻击防范

ICMP协议在网络数据传输和网络管理与监测中具有极为重要的作用,同时其本身对于网络安全也具有极为重要的意义。因此,为了减轻设备处理ICMP报文的压力以及防范ICMP攻击,ICMP攻击防范技术尤为重要。目前主要采用ICMP报文限速、ICMP报文合法性检查、丢弃不需要处理的ICMP报文和不响应不可达报文来防范攻击,保护设备的CPU资源。

标签:攻击,IP,报文,网络协议,差错,ICMP,数据包
来源: https://www.cnblogs.com/joyware/p/16634908.html