ICMP网际控制报文协议分析

版权声明:<--本博客所有内容均为个人在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除--> https://blog.csdn.net/qq_42196196/article/details/83794490

简介

       ICMP(Internet Control Message Protocol)网际控制报文协议。它是TCP/IP协议族的一个子协议,是一种面向无连接的协议,用于传输出错报告控制信息。用于在IP主机、路由器之间传递控制消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
       鉴于ICMP能够影响重要的系统功能操作和获取配置信息,黑客们已经在大量攻击中使用ICMP报文。由于担心这种攻击,网络管理员经常会用防火墙封阻ICMP报文,特别是在边界路由器上。如果ICMP被封锁,大量的诊断程序(例如ping, traCeroute)将无法正常工作。
       当讨论ICMP时,我们用术语ICMP指一般的ICMP, ICMPv4和ICMPv6分别指专门用于IPv4和IPv6的ICMP版本。
       分类:有ICMP差错报文和ICMP询问报文两种报文类型


封包格式及各字段分析

封包格式



字段分析

前四个字节是统一的格式,共三个字段(类型,代码,校验和)。第四个字段取决于ICMP报文类型。最后面是数据字段,其长度取决于ICMP的类型。

ICMPv4:

报文类型:

代码号:



ICMPv6:

报文类型:


代码号:

规则

处理传入的ICMPv6报文时将应用以下规则:

1.未知的ICMPv6差错报文必须传递给上层产生差错报文的进程(如果可能的话)。
2.未知的ICMPv6信息类报文被丢弃。
3.ICMPv6差错报文将会尽可能多地包含导致差错的原始("违规") IPv6报文,当然最终的差错报文大小不能超过最小的IPv6 MTU ( 1280字节)。
4.在处理ICMPv6差错报文时,需要提取原始(original)或者"违规"数据包(包含在 ICMPv6差错报文体中)中的上层协议类型,用于选择适当的上层进程。如果这是不可能的, 在任何IPv6层处理完后将无声地丢弃差错报文。
5.存在处理差错的特殊规则。
6.IPv6节点必须限制它发送ICMPv6差错报文的速率。

差错报文响应规则

为了限制生成ICMP差错报文的原因是为了避免"广播风暴",在这种情况下生成少数的报文就会造成不想要的流量喷流(例如,无限地为响应差错报文而生成差错报文)。所以制定规则:

以下情况下不会响应产生ICMPv4差错报文:

●ICMPv4差错报文(但是,响应ICMPv4查询报文可能会产生ICMPv4差错报文)。
●目的地址是IPv4广播地址或IPv4组播地址的数据报。 
●作为链路层广播的数据报。 
●不是第一个分片的其他分片。 
●源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或组播地址。

以下情况下不会响应产生ICMPv6差错报文:

●ICMPv6差错报文。
●ICMPv6重定向报文。
●目的地址是IPv6组播地址的数据包,以下情况除外:数据包太大(PTB)的报文;参数问题报文(代码2)。
●作为链路层组播、广播(以及前面提到的例外情况)的数据包。
●源地址不是唯一识别的单个节点的数据包。这意味着,源地址不能是未指定的地址、 IPv6组播地址,或者任意为发送者所知的选播地址。


数据包分析

回显应答(类型0):

目的不可达(类型11):

回显(类型8):

超时(类型11):

其他

ICMP常用于探测网络联通性:
ping命令:通过发送网际控制报文‘回显应答’报文,来验证与另一台计算机的IP级连接。
tarcert命令:通过递增‘生存时间’构造网际控制报文‘回显应答’报文,达到路由追踪的目的。
pathping命令:一个将ping和tracert功能结合起来并用有所增强的网络诊断工具,可以反映出数据包从源主机到目的主机所经过的路径。网络延时及丢包率。
       以上命令只是用于理想状况,实际状况是,很多公司和学校等都禁用或者拦截ICMP报文,特别路由追踪时,很难完整的探测出路由的路径。

猜你喜欢

转载自blog.csdn.net/qq_42196196/article/details/83794490