ICMP协议全方位解析一、ICMP的概念和作用ICMP是“InternetControlMessageProtocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。。作用1)IP协议没有差错报告或者差错纠正机制。当遇到网络通不通、主机是否可达、路由是否可用等情况时,IP协议没有内建的机制可以通知发出该数据报的主机的例子2)IP协议还缺少主机和管理查询所需要的机制。主机有时候需要判断某个路由器或者对方主机是否活跃。有时网络管理员也需要来自其他主机或者路由器的信息。综上:ICMP的设计就是为了弥补IP协议的两个缺陷的:即:1)IP洗衣没有差错报告或者差错纠正机制;2)IP协议还缺少主机和管理查询所需机制二、ICMP的特征ICMP就像一个更高层的协议那样使用IP(即,ICMP消息被封装在IP数据报中)。然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它。ICMP首部ICMP数据IP数据报首部IP数据报数据区帧首部帧数据区ICMP数据包的层次ICMP本身是一个网络协议,但是并不是直接传递给数据链路层,而是将ICMP消息封装在IP数据报中。三、ICMP报文ICMP报文有一个8字节的首部和一个可变长度的数据部分。前4个字节对所有的类型都是共同的,第一个8比特字段是ICMP的类型,它定义了报文的类型。代码字段指明了发送此特定报文类型的原因。最后一个共同的字段是检验和字段。首部的其余部分对每一种报文类型都是特定的。类型代号校验和ICMP数据(取决于消息类型)………………ICMP-报文格式ICMP报文可划分为两大类:差错报告报文和查询报文差错报告报文报告了路由器或者主机在处理IP数据包时可能遇到的问题查询报文总是成双成对的出现,他帮助主机或者网络管理员从某个路由器或者对方主机那里获取特定的信息。差错报告报文的类型有一下几个:类型3:目的站不可达类型4:源站抑制类型11:时间超过类型12:参数问题类型5:改变路由查询报文的类型有一下几个:类型8或0:回送请求或回答类型13或14:时间戳请求或回答类型17或18:地址掩码请求或回答四、ICMP报文类型差错报告报文目的:IP协议是一个不可靠的协议,所以IP并不考虑差错检验和差错控制,ICMP可以弥补这个缺点差错报告报文的特点格式类型代码校验和路由器互联网地址IP数据报首部+数据的前64比特…………………………….所有ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报告的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)IP数据报首部ICMP的前8个字节8字节IP数据报首部8字节首部ICMP差错报告报文收到的IP数据报ICMP差错报告报文装入ICMP报文的IP数据报终点不可达当路由器检测到数据报无法传递到目的地时,向创建数据报的源主机发出目的地不可达报文。这报文区分:网络不通(如路由器故障),目的主机连不通(没开机),协议不可达、端口不可达、以及共15种不同的情况,用不同代码表示。代码0.网络不可达,可能是硬件故障。这种类型的报文只能由路由器产生。代码1.主机不可达,这也可能是硬件故障。这种类型的报文只能由路由器产生。代码2.协议不可达,IP数据报携带的数据可能属于高层协议的。若目的主机收到了一个数据报文,但是此时,这个高层协议并未运行,则发出代码2的报文。这类报文只能由目的主机产生。(主机收到了一个数据报,它要交给TCP协议,但是TCP协议并没有运行)代码3.端口不可达,数据要交付的那个应用程序(进程)此时未运行。代码4.需要进行分片,但该数据报的DF(不分片)字段已经被设置。(数据报的发送站已经指明该数据报不能分片,但是不进行分片又不可能进行路由选择)代码5.源站路由选择不能完成。换言之,在这个源站路由选择选...