简介
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报文,特别路由追踪时,很难完整的探测出路由的路径。