一 透析ICMP协议: 协议原理

对于熟悉网络的人来说, ICMP是再熟悉不过了. 它同IP协议一样工作在ISO模型的网络层, 它的全称是: Internet Control Message Protocal.; 其在网络中的主要作用是:
- 主机探测
- 路由维护
- 路由选择
- 流量控制
对于主机探测来说有很多方法,主机某些服务的BANNER,一些使用的应用程序,或者使用工具来检测主机,如NMAP,在WEB上有www.netcraft.com来简单的估测主机 。下面所讲的是使用ICMP协议来探测主机,主要也是可以了解ICMP这个协议,这里最主要的也是将这个ICMP协议,
首先我来讲一下主机探测用到的ICMP报文我没有一一讲全部报文,具体请参见RFC792协议)
1. 回送或回送响应
我们使用一个ICMPECHO数据包来探测主机地址是否存活(当然在主机没有被配置为过滤ICMP形式),通过简单的发送一个ICMPECHO(Type 8)数据包到目标主机,假如ICMPECHOReply(ICMPtype0)数据包接受到,说明主机是存活状态 。假如没有就可以初步判定主机没有在线或者使用了某些过滤设备过滤了ICMP的REPLY 。这种机制就是我们通常所用的ping命令来检测目标主机是否可以ping到.
回送消息的源地址是回送响应消息的目的地址 。若要形成一个回送响应消息,应该将源和目的地址交换,将类型代码更改为0,重新计算机校验码 。
下面是这个报文的格式:
0123
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;Type;;;;;;;Code;;Checksum;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Identifier;;;;;;Sequence Number;;;;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;Data ...
- - - - -
类型:
8代表回送消息;
0代表回送响应消息 。
代码:0
校验码:
16位数据(从ICMP类型开始)的反码和再取反而得 。为计算校验码,校验码域应该为零 。这些零在 以后会被校验码取代 。
标识符:假如代码=0,帮助匹配回送和回送响应的代码可以为0 。
序列码:假如代码=0,帮助匹配回送和回送响应的序列码可以为0 。
说明:
回送消息中接收到的消息应该在回送响应消息中返回 。标识符和序列码由回送发送者使用帮助匹配
回送请求的响应 。代码: 从主机或网关接收0
2. 超时报文
0123
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;Type;;;;;Code;;Checksum;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;unused;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;;;Internet Header64 bits of Original Data Datagram;;;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

类型:11
代码:
0 = 传送超时;
1 = 分段级装超时 。
校验码:
16位数据(从ICMP类型开始)的反码和再取反而得 。为计算校验码,校验码域应该为零 。
这些零在以后会被校验码取代 。
Internet包头 64位源数据报数据:
Internet包头加上源数据的头64位而得 。此数据用于主机匹配信息到相应的进程 。
假如高层协议使用端口号,应该假设其在源数据的头64个字节之中 。
说明:
假如网关在处理数据报时发现生存周期域为零,此数据报必须抛弃 。网关同时必须通过超
时信息通知源主机 。假如主机在组装分段的数据报时因为丢失段未能在规定时间内组装数据,
此数据报必须抛弃 。网关发送超时信息 。
假如段零不可用则不用发送超时信息 。

推荐阅读