ICMP协议是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICMP协议是啥?相关的知识,希望对你有一定的参考价值。

ICMP协议是什么?我的瑞星防火墙,总是弹出有些IP禁入,PING禁入是什么意思?请大侠解答。

ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。PING禁入意思是能够防止别的有病毒的电脑或网站等恶意的进攻自己的电脑。

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 

ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。

参考技术A Internet控制信息协议(ICMP)

介绍

在被称为Catenet的系统中,IP协议被用作主机到主机的数据报服务。网络连接设备称为网关。这些网关通过网关到网关协议(GGP)相互交换用于控制的信息。通常,网关或目的主机将和源主机通信,例如,为报告在数据报过程中的错误。为了这个目的才使用了ICMP,它使用IP做于底层支持,好象它是一个高层协议,而实际上它是IP的一部分,必须由其它IP模块实现。

ICMP消息在以下几种情况下发送:当数据报不能到达目的地时,当网关的已经失去缓存功能,当网关能够引导主机在更短路由上发送。

IP并非设计为设计为绝对可靠,这个协议的目的是为了当网络出现问题的时候返回控制信息,而不是使IP协议变得绝对可靠,并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。上层协议必须使用自己的差错控制程序来判断通信是否正确。

ICMP信息通常报告在处理数据报过程中的错误。若要避免信息无限制地返回,对于ICMP消息不会单独成包发送,而且ICMP信息只在处理数据报偏移量为0时发送。

消息格式

ICMP消息以基本IP头发送。数据的第一个字节是ICMP类型域;此域的值决定了了其余数据的格式。任何标记为“未使用”的域都是为以后的扩展保留的,在传送过程中必须全部是0。除非在个别的格式之下,包头域如下格式:

版本:4

IHL:Internet头长度大小以32位字为单位。

服务类型:0

总长度:包头长度和数据长度。

段中所用标识,段偏移量:在段是使用。

生存周期:以秒计,此域在每台机器处理数据报时减少,此值必须大于要传送它的网关所消耗的时间。

协议:ICMP = 1

包头校验码:16位数据反码和再取反而得。为计算校验码,此域应该为0。在将来可以会取代这一域。

源地址:创建ICMP信息的网关或主机地址,除非说明,它可以是任何网关地址。

目的地址:信息要发送到的网关或主机地址。

未达目的地信息

图1

IP域:目的地址,发送原始数据报数据的网络地址

ICMP域:

类型:3

代码:

0 = 网络不可达;

1 = 主机不可达;

2 = 协议不可用;

3 = 端口不可达;

4 = 需要段和DF设置;

5 = 源路由失败;

校验码:16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

Internet包头+源数据报:

Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。

说明:

相应于网关的路由表,如果在目的域中指定的网络不可达,如网络距离为无限远,网关会向发送源数据的主机发送目的不可达消息。而且,在一些网络中,网关有能力决定目的主机是否可达。如果目的地不可达,它将向发送源数据的主机发送不可达信息。

在目的主机,如果IP模块因为指定的协议模块和进程端口不可用而不能提交数据报,目的主机将向发送源数据的主机发送不可达信息。

另外一种情况是当数据报必须被分段传送,而“不可分段”位打开,在这种情况下,网关必须抛弃此数据报,并向向发送源数据的主机发送不可达信息。

代码0,1,4和5由网关发送,而代码2和3由主机发送。

超时信息

图2

IP域:

目的地址:从源数据报数据中得到。

ICMP域:

类型:11

代码:

0 = 传送超时;

1 = 分段级装超时。

校验码:16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

Internet包头+64位源数据报数据:Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。

说明:

如果网关在处理数据报时发现生存周期域为零,此数据报必须抛弃。网关同时必须通过超时信息通知源主机。

如果主机在组装分段的数据报时因为丢失段未能在规定时间内组装数据,此数据报必须抛弃。网关发送超时信息。

如果段零不可用则不用发送超时信息。

代码0由网关发送,代码1由主机发送。

参数问题消息

图3

IP域:

目的地址:从源数据中得到。

ICMP域:

类型:12

代码:

0 = 指针指向错误。

校验码: 16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

指针

如果code = 0,指向有问题的字节。

Internet包头+64位源数据报数据:Internet包头+64位源数据报数据:Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。

说明:

如果网并或主机在处理数据报时发现包头参数有错误以至不能完成工作,它必须抛弃此数据报。一个潜在的原因可以是变量的错误。网关或主机将通过参数问题消息通知源主机,此消息只有在消息被抛弃时才被发送。指针指向发现错误的数据报包头字节。

代码: 从主机或网关接收0。

源拥塞消息

图4

IP域:

目的地址:源数据报数据的地址和源网络。

ICMP域:

类型:4

代码: 0

校验码: 16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

Internet包头+64位源数据报数据: Internet包头+64位源数据报数据:Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。

说明:

如果没有缓冲容纳,网关会抛弃数据报,如果网关这样做了,它会发送源拥塞消息给发送主机。如果接收的数据报太多无法处理,目的主机也会发送相应的消息给发送主机。此消息要求发送发减少发送速率,网关会给每个抛弃的消息返回源拥塞消息,在接到此消息后,发送主机应该减少发送速率,直到不再接收到网关发送的源拥塞消息为止。在此之后,源主机可以再增加发送速率,直到接收到目的主机的源拥塞消息为止。

网关或主机不会等到已经超过限度后再发送此消息,而是接近自己的处理极限时就发送此消息,这意味着,引发源拥塞消息的数据报仍然可以处理。代码: 从主机或网关接收0。

重定向消息

图5

IP域:

目的地址:源数据报数据的地址和源网络。

ICMP域:

类型: 5

代码:

0 = 重定向网络的数据报;

1 = 重定向主机的数据报;

2 = 重定向网络和服务类型的数据报;

3 = 重定向网络和主机类型的数据报。

校验码:

16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

网关Internet地址:

应该发送网关地址(其在源数据报数据的internet目的网络域中指定)。

Internet包头+64位源数据报数据:

Internet包头+64位源数据报数据:Internet包头加上源数据的头64位而得。此数据用于主机匹配信息到相应的进程。如果高层协议使用端口号,应该假设其在源数据的头64个字节之中。

说明:

网关在下面情况下发送重定向消息。网关(G1)从网关相连的网络上接收到数据报,它检查路由表获得下一个网关(G2)的地址(X)。如果G2和指定的接收主机在同一网络上,重定向消息发出,此消息建议发送主机直接将数据报发向网关G2,因为这更近,同时网关G1向前继续发送此数据报。

因为在数据报中的IP源路由和目的地址域是可选的,所以即使有更好的路由有时也无法发现。代码:网关发送0,1,2和3。

回送或回送响应消息

图6

IP域:

地址:

回送消息的源地址是回送响应消息的目的地址。若要形成一个回送响应消息,应该将源和目的地址交换,将类型代码更改为0,重新计算机校验码。

IP域:

类型:

8代表回送消息;

0代表回送响应消息。

代码:0

校验码:

16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

标识符:如果代码=0,帮助匹配回送和回送响应的代码可以为0。

序列码:如果代码=0,帮助匹配回送和回送响应的序列码可以为0。

说明:

回送消息中接收到的消息应该在回送响应消息中返回。标识符和序列码由回送发送者使用帮助匹配回送请求的响应。代码: 从主机或网关接收0。

时间戳和时间戳响应消息

图7

IP域:

地址:

时间戳消息的源地址是时间戳响应消息的目的地址。若要形成一个时间戳响应消息,应该将源和目的地址交换,将类型代码更改为14,重新计算机校验码。

IP域:

类型:

13代表时间戳消息;

14代表时间戳响应消息。

代码:0

校验码:

16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

标识符:如果代码=0,帮助匹配时间戳和时间戳响应的代码可以为0。

序列码:如果代码=0,帮助匹配时间戳和时间戳响应的代码可以为0。

说明:

接收到的时间戳附加在响应里返回,时间是以百万分之一称为单位计算,并以标准时午夜开始计时。原时间戳是发送方发送前的时间。接收时间戳是回送者接收到的时间,传送时间是回送者发送的时间。

如果时间以百万分之一秒计无效,或者不能以标准时提供,可以在时间戳的高字节填充入数据以表示这不是标准数据。标识符和序列码由发送者匹配请求的响应。代码: 从主机或网关接收0。

信息请求或信息响应消息

图8

IP域:

地址:

信息请求消息的源地址是信息响应消息的目的地址。若要形成一个信息响应消息,应该将源和目的地址交换,将类型代码更改为16,重新计算机校验码。

IP域:

类型:

15代表信息请求消息;

16 代表信息响应消息。

代码: 0

校验码:

16位数据(从ICMP类型开始)的反码和再取反而得。为计算校验码,校验码域应该为零。这些零在以后会被校验码取代。

标识符:如果代码=0,帮助匹配信息请求和信息响应的代码可以为0。

序列码:如果代码=0,帮助匹配信息请求和信息响应的代码可以为0。

说明:

此消息可以在IP包头中以源网络地址发送,但同时目的地址域为0(这表示此网络内)。响应IP模块应该发送完全指定地址的响应。发送此消息是主机寻找到自己所在网络号码的一种方法。标识符和序列码由发送者匹配请求的响应。代码: 从主机或网关接收0。

消息类型总结

0 回送响应

3 目的不可达

4 源拥塞

5 重定向

8 回送

11 超时

12 参数问题

13 时间戳

14 时间戳响应

15 信息请求

16 信息响应
参考技术B ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

ICMP的重要性

ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!

比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。

此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

应对ICMP攻击

虽然ICMP协议给黑客以可乘之机,但是ICMP攻击也并非无药可医。只要在日常网络管理中未雨绸缪,提前做好准备,就可以有效地避免ICMP攻击造成的损失。
对于“Ping of Death”攻击,可以采取两种方法进行防范:第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;第二种方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。

设置ICMP数据包处理规则的方法也有两种,一种是在操作系统上设置包过滤,另一种是在主机上安装防火墙。具体设置如下:

1.在Windows 2000 Server中设置ICMP过滤

Windows 2000 Server提供了“路由与远程访问”服务,但是默认情况下是没有启动的,因此首先要启动它:点击“管理工具”中的“路由与远程访问”,启动设置向导。在其中选择“手动配置服务器”项,点击[下一步]按钮。稍等片刻后,系统会提示“路由和远程访问服务现在已被安装。要开始服务吗?”,点击[是]按钮启动服务。

服务启动后,在计算机名称的分支下会出现一个“IP路由选择”,点击它展开分支,再点击“常规”,会在右边出现服务器中的网络连接(即网卡)。用鼠标右键点击你要配置的网络连接,在弹出的菜单中点击“属性”,会弹出一个网络连接属性的窗口,如图1所示。

图1

图1中有两个按钮,一个是“输入筛选器”(指对此服务器接受的数据包进行筛选),另一个是“输出筛选器”(指对此服务器发送的数据包进行筛选),这里应该点击[输入筛选器] 按钮,会弹出一个“添加筛选器”窗口,再点击[添加]按钮,表示要增加一个筛选条件。

在“协议”右边的下拉列表中选择“ICMP”,在随后出现的“ICMP类型”和“ICMP编码”中均输入“255”,代表所有的ICMP类型及其编码。ICMP有许多不同的类型(Ping就是一种类型),每种类型也有许多不同的状态,用不同的“编码”来表示。因为其类型和编码很复杂,这里不再叙述。

点击[确定]按钮返回“输入筛选器”窗口,此时会发现“筛选器”列表中多了一项内容(如图2所示)。点击[确定]按钮返回“本地连接”窗口,再点击[确定]按钮,此时筛选器就生效了,从其他计算机上Ping这台主机就不会成功了。

图2

2. 用防火墙设置ICMP过滤

现在许多防火墙在默认情况下都启用了ICMP过滤的功能。如果没有启用,只要选中“防御ICMP攻击”、“防止别人用ping命令探测”就可以了,如图3所示。

图3

通过以上讲解,你现在知道ICMP的重要性了吧?赶紧给你的服务器设置ICMP过滤吧。
参考技术C ICMP协议介绍

在被称为Catenet的系统中,IP协议被用作主机到主机的数据报服务。网络连接设备称为网关。这些网关通过网关到网关协议(GGP)相互交换用于控制的信息。通常,网关或目的主机将和源主机通信,例如,为报告在数据报过程中的错误。为了这个目的才使用了ICMP,它使用IP做于底层支持,好象它是一个高层协议,而实际上它是IP的一部分,必须由其它IP模块实现。

ICMP消息在以下几种情况下发送:当数据报不能到达目的地时,当网关的已经失去缓存功能,当网关能够引导主机在更短路由上发送。

IP并非设计为设计为绝对可靠,这个协议的目的是为了当网络出现问题的时候返回控制信息,而不是使IP协议变得绝对可靠,并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。上层协议必须使用自己的差错控制程序来判断通信是否正确。

ICMP信息通常报告在处理数据报过程中的错误。若要避免信息无限制地返回,对于ICMP消息不会单独成包发送,而且ICMP信息只在处理数据报偏移量为0时发送。

PING介绍

因为你在上网浏览的时候,如果需要手动解析域名,那么就需要PING了。防火墙允许PING出就是因为这点。
PING不完全是坏的,PING一般用于检测对方机器是否开机、域名解析等等。如果你禁止了PING出,那么这两个功能就无法使用了。
但是,禁止PING入还是有比较重要的用途的。因为有的人(或病毒)会用PING来搜索同一网域上的在线主机进行攻击。另外,一般个人电脑开PING没有用途,顶多让别人攻击。所以这个应该关的。
参考技术D 总是弹出有些IP禁入 意思是某些攻击源IP被过滤了
PING禁入是什么意思 有用在用ping你的计算机
由于ping命令的数据帧是在L2的ICMP协议里传输的,所以一般禁ping都是通过封ICMP协议达到
icmp是信息管理控制协议本回答被提问者采纳

ICMP协议详解

ICMP协议

        一.概念

        ICMP协议是一个网络层协议。和IP协议处于同一层,但是ICMP协议底层用的是IP协议。

        一个搭建好的网络,往往需要先进行简单的测试,来验证网络是否通畅。单单使用IP协议并不提供可靠性传输。似乎用IP协议如果丢包,并不能通知传输层是否丢包以及丢包原因。

        ICMP协议,如果在网络中丢包,会返回一个丢包原因给传输层。

        二.ICMP作用

  • 确认IP包是否成功达到目标IP。
  • 通知在发送过程中的IP包被丢弃的原因。

        注意:

  • ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍把它归结于网络层协议。
  • ICMP只能搭配IPv4使用。如果是IPv6的情况下,需要使用ICMPv6。

        三.ICMP报文格式

        由于ICMP底层用的是IP协议,所以ICMP报文是IP协议的有效载荷。

        所以IP报头的协议字段可能代表的是ICMP/TCP/UDP,当协议字段为1时,代表ICMP。

        由下可知ICMP报头一共8字节。

  • 类型:1字节,说明该报文属于什么类型。
  • 代码:1字节,说明ICMP报文的代码。
  • 检验和:2字节,检验ICMP报文是否有错误。

ICMP类型分两类:

  1. 通知出错原因
  2. 用于诊断查询

类型分类:

         四.基于ICMP协议的命令

        4.1 ping命令

 作用:验证网络连通性,统计响应时间和IP数据包的生存时间TTL。

 注意:ping的时一个域名,而不是url网址,域名可以通过DNS解析成IP地址。

 ping命令执行细节

  • ping命令会发送一个ICMP Echo Request给对端
  • 对端接收后,返回一个ICMP Echo Reply
  • 注意是在主机A网络层发出ICMP Echo Request,再主机B接收到网络层,再发出ICMP Echo Reply

 问题:ping是否有端口号?

没有,ping命令基于ICMP,再网络层,端口号是传输层的内容。ICMP根本就不关注端口号。

       4.2 traceroute命令

        基于ICMP协议实现,能够打印出可执行程序主机到目标主机之间尽力了多少路由器。

说明:

  • 记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关。
  • 我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间
  • 有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

以上是关于ICMP协议是啥?的主要内容,如果未能解决你的问题,请参考以下文章

报头是啥意思?

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

ping使用的icmp协议的疑问?

ICMP协议详解

网际报文控制协议ICMP

国际控制报文协议ICMP