首页 > 其他分享 >【干货分享】网工必懂的ICMP协议

【干货分享】网工必懂的ICMP协议

时间:2023-12-11 11:00:43浏览次数:37  
标签:网工必 IP 报文 差错 干货 ji ICMP 数据包

原创:厦门微思网络

【干货分享】网工必懂的ICMP协议_IP

因特网控制报文协议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字段表示ICMP消息的类型;
  • Code字段表示ICMP消息类型细分的子类型;
  • Checksum字段表示ICMP报文的校验和。

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

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

  • ICMP差错报文不会产生ICMP差错报文(但ICMP查询报文可能会产生ICMP差错报文),此条规定主要为了防止ICMP消息的无限产生和传递;
  • 目的地址是广播地址或多播地址的IP数据报文;
  • 作为链路层广播的数据包;
  • 不是IP分片的第一片;
  • 源地址不是单个主机的数据包,也就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

【干货分享】网工必懂的ICMP协议_网络设备_02


ICMP报文格式

表1-1 ICMP报文分类

【干货分享】网工必懂的ICMP协议_字段_03

【干货分享】网工必懂的ICMP协议_网络设备_04

ICMP的典型应用

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

Ping

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

  • 远程设备是否可达;
  • 与远程主机通信的来回旅程(round-trip)的延迟;
  • 报文包的丢失情况。

Tracert

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

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

NQA

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

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

  • ICMP测试ICMP测试是通过发送ICMP Echo请求报文和Echo响应报文来判断目的地的可达性、计算网络响应时间及丢包率,从而清晰地反映出网络性能及畅通情况。ICMP测试提供类似于命令行下的Ping命令功能,但输出信息更为丰富。
  • ICMP Jitter测试ICMP Jitter测试是以ICMP报文为承载,通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter(抖动时间)是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。
  • Trace测试NQA的Trace测试用于检测源端到目的端的转发路径,并沿该路径记录源设备到中间各个设备的时延等信息。Trace测试类似于Tracert命令功能,但输出信息更为丰富。每一跳信息中能够显示平均时延、丢包、最后一个包接收时间等信息。

ICMP安全

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

ICMP攻ji

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

【干货分享】网工必懂的ICMP协议_ICMP协议_05


ICMP泛洪攻ji

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

  • 针对带宽的DOS攻ji者发送大量伪造的ICMP Echo请求报文,交换机、路由器等网络设备的CPU需要响应这种报文,会占用大量的带宽和CPU资源,这种DOS攻ji和其他DOS攻ji一样,消耗设备的资源而使得设备无法提供正常服务。ICMP Echo响应报文具有较高的优先级,在一般情况下,网络总是允许内部主机使用Ping命令。这种攻ji仅限于攻ji网络带宽,单个攻ji者就能发起这种攻ji。更厉害的攻ji形式,如smurf,可以使整个子网内的主机对目标主机进行攻ji,从而扩大ICMP流量。
  • 端口扫描攻ji(针对连接的DOS攻ji端口扫描是指攻ji者发送大量的端口扫描报文,交换机需要回应大量的ICMP目的不可达报文,这种攻ji既消耗系统的资源,同时攻ji者能够很轻易获得设备开启的端口,然后可以针对这些端口进行攻ji,可以影响所有IP设备的网络连接。

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

由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统在TCP/IP栈的实现中,对ICMP包的最大长度规定为64KB,并且在对ICMP包头进行读取之后,要根据该包头里包含的信息来为有效载荷生成缓冲区。当收到畸形的、声称自己的尺寸超过ICMP报文最大长度的包,接收方设备根据这个信息将分配超过64KB的有效载荷,就会出现内存分配错误,导致TCP/IP堆栈崩溃,从而产生宕机。

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

ICMP攻ji防范

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

  • 报文限速ICMP报文限速包括端口限速、VLAN限速和全局限速,同时也实现芯片的限速,通过多个维度来保证ICMP的洪泛攻ji。
  • 合法性检查&丢弃不需要处理的报文对于一些不合法的ICMP报文,比如TTL为0、ICMP类型为15、16、17的报文,都直接丢弃,同时可配置丢弃一些不常用或基本不使用的ICMP报文,包括TTL为1、带选项、不可达的ICMP报文。
  • 不响应不可达报文在用户通过发送大量端口不可达或网络不可达报文攻ji设备时,设备收到这些报文后可以不响应,直接丢弃,以保护CPU资源。

标签:网工必,IP,报文,差错,干货,ji,ICMP,数据包
From: https://blog.51cto.com/xmws/8768856

相关文章

  • # yyds干货盘点 # 盘点一个Pandas处理Excel表格实战问题(下篇)
    大家好,我是皮皮。一、前言继续接着上一篇文章说,这一篇文章我们一起来看看大佬们的解决办法。二、实现过程这里【郑煜哲·Xiaopang】和【瑜亮老师】给了一个提示,如下图所示:后来【隔壁......
  • #yyds干货盘点#深入了解Python类与面向对象编程
    类与对象的概念1.什么是类?类是一种用户自定义的数据类型,用于描述对象的属性和行为。它是对象的模板,定义了对象的结构。2.创建类使用class关键字来创建类。示范如何定义一个类,包括类名、属性和方法的定义。classDog:def__init__(self,name,breed):self.name=nam......
  • #yyds干货盘点#Java面试题
    1.如何理解面向对象和面向过程【面向过程】:完成某件事的过程,性能高于【面向对象】优点:但是因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展【面向对象】:把要完......
  • # yyds干货盘点 # 盘点一个Pandas处理Excel表格实战问题(上篇)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Pandas实战的问题,一起来看看吧。问题描述:大佬们~ 请问下这个数据怎么实现呢?有2组数据:第一个数据《获取的数据.xlsx》:每13行数据为一组,要实现一列数据拆分成多列数据(这边简称表1),见截图第二个数......
  • #yyds干货盘点# LeetCode程序员面试金典:统计各位数字都不同的数字个数
    题目给你一个整数n,统计并返回各位数字都不同的数字x的个数,其中0<=x<10n。 示例1:输入:n=2输出:91解释:答案应为除去11、22、33、44、55、66、77、88、99外,在0≤x<100范围内的所有数字。 示例2:输入:n=0代码实现classSolution{publicintcount......
  • #yyds干货盘点# LeetCode程序员面试金典:斐波那契数
    题目斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给定n,请计算F(n)。 示例1:输入:n=2输出:1解释:F(2)=F(1)+F(0)=1+0......
  • # yyds干货盘点 # 分享一个Python网络爬虫数据采集利器
    前言你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据收集平台——亮数据BrightData。作为世界领先的数据收集平台,亮数据以其高效、可靠和灵活的方式检索提取关键的......
  • 干货分享 | TSMaster小程序启动和停止的自动化控制流程
    在实际应用场景中,用户常常需要按一定逻辑和时序来控制TSMaster内置功能模块的启动和停止,TSMaster软件内置有C/Python小程序和图形程序,开发者可以通过编程对这些模块的运行进行精确控制。本文将重点和大家分享一下如何通过C代码来控制TSMaster内置模块的启动与停止。本文关键字:run_f......
  • # yyds干货盘点 # 想在同一张图片上添加不同的文字,也就是一张图片上出现一个词
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python实战的问题,一起来看看吧。问题描述:上图中也是他的代码,没有文字的代码确实看着难受,而且还是手机拍出来的模糊照片,不是截图。其实他自己也发现了问题,但是不知道怎么修改。二、实现过程这里【巭孬......
  • 【干货】视频监控管理平台/智能监测/检测系统EasyCVR查看服务信令交互步骤
    国标GB视频平台/视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时......