原创:计算机网络-协议-互联网控制报文协议ICMP详解

一、什么是ICMP?

ICMP,互联网报文控制协议,属于IP的附属协议,IP协议号为1,很多人了解ICMP可能仅限于ping和tracert功能,然而ping和tracert功能仅是ICMP协议的一小部分应用。

最牛X的一点是所有网络设备都会配合ICMP的执行。


二、ICMP的报文头部格式及报文类型

ICMP报文格式


原创:计算机网络-协议-互联网控制报文协议ICMP详解


ICMP报文头部根据报文类型和代码不同长度也不尽相同,但前4个字节是固定的,后面4个字节报文类型不同内容也不相同。


ICMP报文类型

ICMP协议的报文分为两大类查询报文和差错报文。

下图中为ICMP所有的报文类型及代码类型:


原创:计算机网络-协议-互联网控制报文协议ICMP详解


查询报文相对较少,基本上常用的就是ping功能。

差错报文,是数据报文不能正常发送或接收时向发送方通告错误信息的一种报文,差错报文除正常ICMP报文头部以外,还会加入产生差错的报文的IP地址首部和IP报文内容的前8字节数据。为什么要加入IP报文内容的前8字节数据,是因为IP报文内容的前8字节数据包含TCP或UDP的端口号等内容,这样发送端接收到差错报文后通过这8个字节就能知道是哪个端口号的具体应用出现了报文发送中的错误。


知识扩展:并不是所有应用都会关注ICMP发送的差错报文,不同应用开发者开发的应用对收到ICMP差错报文后的处理都不相同,例如:思科路由器和windows作为telnet客户端向服务端发起telnet请求后如果收到ip地址不可达的ICMP差错报文后,思科路由器的处理方式是直接断掉telnet进程,而windows则是忽略掉收到的ICMP差错报文并保持telnet进程直到telnet的TCP连接超时。

3、 ICMP报文分析


以下实验数据包分析均通过发送ping数据包进行测试。

1、目标可达ICMP报文分析

原创:计算机网络-协议-互联网控制报文协议ICMP详解


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:实验ICMP报文一览


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器1向路由器3发送一个类型为8,代码为0的echo请求查询报文。

原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器2向路由器1响应一个类型为0,代码为0的echo响应查询报文。


2、无可达目标网络ICMP不可达报文分析

原创:计算机网络-协议-互联网控制报文协议ICMP详解


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:实验ICMP报文一览


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器1发送查询报文


路由器1向路由器3发送一个类型为8,代码为0的echo请求查询报文。


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器2回复差错报文


路由器2发现没有前往192.168.25.X段的路由,所以向路由器1回复一条ICMP类型为3,代码为1的差错报文,提示主机不可达。详见下图:

原创:计算机网络-协议-互联网控制报文协议ICMP详解

上文说过,ICMP差错报文会包含产生差错的报文的IP地址首部和IP报文内容的前8字节数据。报文中可见产生差错的报文是由192.168.12.1发往192.168.25.2的ICMP为类型8,代码为0的这个报文,也就是路由器1发给路由器2的查询报文在传输过程中产生了错误信息。详见下图:(下文的报文分析中不会再提及此内容。)

原创:计算机网络-协议-互联网控制报文协议ICMP详解


3、网络限制ICMP不可达报文分析

原创:计算机网络-协议-互联网控制报文协议ICMP详解


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:实验ICMP报文一览


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器1发送ICMP查询报文


路由器1向路由器3发送一个类型为8,代码为0的echo请求查询报文。


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器2回复差错报文


路由器2有访问控制策略限制了此数据包的发送,将数据包丢弃的同时,向路由器1回复一条ICMP类型为3,代码为13的差错报文,提示被管理限制通信。详见下图:

原创:计算机网络-协议-互联网控制报文协议ICMP详解


4、MTU限制ICMP不可达报文分析

原创:计算机网络-协议-互联网控制报文协议ICMP详解


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:实验ICMP报文一览


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器1发送大小为1100字节不可分片的ICMP查询报文


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器2回复差错报文


路由器2限制了出接口的MTU值,而ICMP请求报文大于此MTU值且不允许分片,所示将数据包丢弃的同时,向路由器1回复一条ICMP类型为3,代码为4的差错报文,提示超出接口MTU大小需要分片处理,并在报文内容中回复了允许通过的MTU值为1000字节。详见下图:

原创:计算机网络-协议-互联网控制报文协议ICMP详解


知识扩展:可以通过此功能探测路径中的最小MTU是多少,可主动设置发送数据包的MTU值减少分包产生的网络延迟。


5、 重定向报文,ICMP redirects功能分析


原创:计算机网络-协议-互联网控制报文协议ICMP详解


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:实验ICMP报文一览


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:交换机1发送访问互联网地址114.114.114.114的ICMP查询报文。


原创:计算机网络-协议-互联网控制报文协议ICMP详解

上图:路由器2(192.168.1.254)发送ICMP类型为5代码为0的重定向报文告知最优网关为路由器1(192.168.1.1)


下图为交换机未收到ICMP重定向报文的网关为192.168.1.254

原创:计算机网络-协议-互联网控制报文协议ICMP详解

下图为交换机收到访问互联网地址114.114.114.114后,由路由器2发送的ICMP重定向报文后自动添加的路由,即访问114.114.114.114这台主机的网关修改为192.168.1.1。

原创:计算机网络-协议-互联网控制报文协议ICMP详解

四、相关ICMP差错报文带来的安全隐患处理

1、黑客对网段的探索

黑客如果能够进入到网络内部,可以通过ping随机网络让网关响应各种不可达报文类型,通过分析报文就能知道网络内部不可达的网络段是没有可达路由(网络中没有这个网段),还是被访问控制列表给限制,这个ICMP的响应的不可达报文就会给黑客提供了一种探索网络的手段,给网络带来安全隐患。

解决办法:通过在网关设备上关闭ICMP不可达报文的响应。

原创:计算机网络-协议-互联网控制报文协议ICMP详解

首先思科设备默认情况下是回复ICMP不可达报文的,可以通过在端口视图下输入no ip unreachables关闭ICMP不可达报文的回复以解决上述问题。

原创:计算机网络-协议-互联网控制报文协议ICMP详解

2、ICMP响应泛洪攻击

网络设备如果每次收到ICMP报文,发现目标地址不可达就回复不可达报文,黑客就可以通过控制肉鸡不断访问一个不存在的网段,让网络设备不断回复ICMP不可达报文,导致网络设备处理正常数据能力下降。

解决办法:限制ICMP不可达报文的数量,超出数量不进行回复。

思科设备通在配置视图下输入ip icmp rate-limit unreachable XXX,XXX为限制多少毫秒发送一次不可达报文。

原创:计算机网络-协议-互联网控制报文协议ICMP详解


以上内容均为本人对所掌握知识的总结归纳所创作的原创文章,希望能给大家的学习过程带来帮助,如有技术理解错误希望能够及时得到大家的指正,大家共同学习,共同进步。



分享到:


相關文章: