TCP/IP之ICMP协议简略介绍

        本篇文章主要针对入门新手,尽量能用简略的语言复述,避免用过于官方话术,因为对于萌新来说,那些太官方的话语不容易看懂,所有本人尽力用口语化叙述,只要理解了其中的内涵意思,再看官方话术就比较容易的多。主要讲述ICMP的主要功能。本文章仅仅是IPv4的内容,IPv6有不同之处。

        ICMP(Internet Control Message Protocol)Internet控制报文协议:是IP协议的附属协议。通常被认为是IP层的一部分,因为它需要在所有IP实现中存在。它使用IP协议进行传输。因此,确切地说,它既不是一个网络层协议,也不是一个传输层协议,而是位于两者之间。ICMP主要功能就是ICMP差错报文、ICMP查询报文

1、既然要讲它们的功能,那么必须要说的肯定就是它的数据报是什么样的:

(图一)咳咳,虽然很丑,不过不要在意这些细节。

从这图可以看出ICMP报文封装这IP数据报内的,ICMP报文也可能会像其他IP数据报那样被分片(IP分片讲会在IP协议中详解,主要的意思是当数据报经过中间设备时,如路由器,由于数据报字节太大,那么路由器必须将其切开重新组装成小数据报。或者由于数据报开始就太大了,所以在发送端就开始被分片了)

(图二、ICMP报文)

4字节 = (8 + 8 +16)/8。类型和代码是一起表示改报文的作用的,例如:类型为3、代码为3,则该报文想表达意思是端口不可达,也就是说该端口不开放(如下图三)。校验和顾名思义,就是检验报文在传输过程中是否出现了差错,每个数据报都有相应的校验和,校验和是有相应的算法的(这里不展开说了)。如果校验和是错误的,则该报文将会被丢弃。

(图三)

2、ICMP查询报文:

(1)、例如,地址掩码请求/应答、时间戳请求/应答、信息请求/应答,但是这些功能以及被其他特殊的目的的协议代替(包括DHCP),也就是说极少出现了。唯一保存下来的广泛使用的ICMP查询类报文是回显请求/应答报文,通常称为ping,ping命令可以在Windows系统自带的终端命令行中使用,主要是用来探测主机是否存活(如果一个Hacker要攻击一台主机那,那么就必须先知道这台主机是否在运行着,也就是存活,所以ping也是Hacker很常用的一条命令,但是有些主机是禁止ping的,不允许别人发ICMP报给自己,如果发了很有可能会被那些主机拉黑关进小黑屋,这条命令也是慎用)。这里本人用wireshark抓包神器来抓一个ICMP报文,更能清楚ICMP里面的内容(如图四、图五)。

(图四)ICMP请求报文

(图五)ICMP响应报文   192.168.1.100是本人的电脑也就是发送端,183.232.231.172是百度的服务端也就是。

(2)、ICMP查询报文还有一个很好用的功能tracert,那就是路由追踪,作用是发现整条链路上的所有路由(除了禁止ICMP报文的路由器),如图六所示,tracert命令发现了通往百度的所有路由器,而有些是请求超时,极有可能是禁止ICMP报文功能的路由器。路由追踪技术主要是通过ICMP报文和TTL值(类似于生命周期,每过一个路由器减一,最多只能有255个,主要是防止广播风暴)的结合来实现的。(#)沿途的路由器收到ICMP报文后将TTL减一得到零,则返回给发送端ICMP超时信息(比如说把TTL值设置为1,那么经过第一个路由器时,也就是10.157.0.1,TTL减一就得到了零,此时10.157.0.1路由器就会返回ICMP超时信息数据报,这样我们便可以得知此IP地址,那么经过第二个路由器时,则把TTL设置为2,如果还是设置为1得话,它在经过第一个路由器时就会减为零,以此类推)。捏,如图七所示。(图六)

(图七)

3、ICMP差错报文:

顾名思义,差错就是有错误时产生的ICMP报文,共五种差错报文:

(1)目的不可达(类型号为3):表示数据报无法送达目的地,可能是因为传输过程中出了问题或者接受者缺乏兴趣接收它。

(2)、重定向(类型号为5):假如一个路由器收到一个来自主机的数据报,并确定自身不是主机将数据报投递到目的地对应的路由器(就是说主机传输给的现在这个路由器离目的地不是最近的那个,而跟主机直连的路由器还有更加接近的),则该路由器发生一个重定向报文给主机并将该报文发送到正确的路由器,并请求主机改变它的转发表。(如图八)

(3)、源站抑制(类型号为4):路由器和主机的缓冲区有限,如果发送方发送数据的速率过快。将会导致缓冲区产生溢出。这时路由器或主机只能把某些IP数据报丢弃(就是说每个设备都有一定的存储空间,当空间满后,后面还有数据传输过来,这就不得不把后面来的数据丢弃)。

(4)、参数问题(类型号为12):如果路由器或目的主机发现数据报的某个字段不正确时,就会丢弃该数据报。

(5)、时间超过(类型号为11):可分为两种情况,第一种是TTL=0:当IP数据报通过路由器时,IP首部的TTL字段减一,当路由器发现收到IP数据报的TTL=0时,就丢弃该报文,同时该路由器向发送端发送ICMP超时报文(就是上面提到的tracet所用的方法)。第二种是当一个分片的IP数据报只有部分到达目的地时(既在一定的时间内不是所有的IP分片都到达了),这时ICMP超时报文便被用于告知发送端它的整个数据报被丢弃了。

(6)、下面几种情况不会产生ICMP差错报文:

*  ICMP差错报文(不会因为自身的丢失而产生差错报文)

*  目的地址是广播地址或组播地址的数据报

*  作为链路层的广播的数据报

*  不是第一个分片的其他分片(因为其他分片没有传输层头部)

*  源地址不是单个主机的数据报(源地址不能为零地址、环回地址、广播地址或组播地址)。

4、PTB报文路径MTU值(最大传输单元)发现:

如果一个IP路由器收到一个打算转发的数据报,若数据报大于选定的传出网络接口的MTU(每个路由器都有发送数据字节的最大值,如果要发送的数据报的字节比路由器的发送端口能发送的数据报字节还要大,就无法发送,这个发送端口能发送出去的数据报字节的最大值就是MTU,注意:接收端口是没有最大值的,来多少收多少),则数据报需要分片。如果到达的数据报则IP头部设置了不分片位字段,那么它会被丢弃而不是转发,此时将产生ICMP目的不可达(PTB)报文,该报文包含了MTU值。

5、与ICMP相关的攻击:

(1)、Smurf攻击:将源地址设置为受害者的IP地址,目的地址为广播地址。开始攻击后,受害者局域网内的多台主机会收到广播ICMP报文时,所有主机同时以ICMP报文的形式响应源地址(受害者地址)。

(2)、死亡之ping(Ping of Death):可以构造一个过大的IP数据报(大于最大值64KB),这就会导致某些系统直接崩溃蓝屏,因为之前的系统并不能处理过大的IP数据报,所以看到一个特大报就蒙了,然后就死机蓝屏给你看。

(3)、Smack或Bloop攻击:ICMP目的不可达报文可以造成现有连接(如TCP连接)的拒绝服务。当受害者主机接收来自于一个IP地址(正在通信的地址)的主机不可达、端口不可达或协议不可达报文时将导致关闭和该主机的连接。(比方说你正在下载东西,如果主机接收到ICMP目的不可达报文,那么该下载将会中断)

(4)、重定向攻击:可以使用ICMP重定向报文导致受害者主机修改它们的转发表,可以指向被入侵的机器。

(5)、PTB报文攻击:PTB报文包含一个表示推荐MTU值得字段。这将被传输协议(如TCP)用来选择它们数据包的大小。如果攻击者修改这个值,它将强制终端TCP运行时使用 非常小的数据包(导致性能低下)。

总结:ICMP报文是携带在IP数据报中的,大致可以分成差错类报文和信息类报文。然而重要的回显请求/应答和超时报文对于流行的ping和tracert工具来说是必需的。还有目的不可达、PTB和重定向报文。

如果有什么讲解得不好的地方,或者想问的问题都可以在下方评论区评论哟!

发布了31 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/q759451733/article/details/84065330