您的位置:首页 > 业界新闻

icmp(互联网控制消息协议)

2013-06-20 21:27 323 查看
icmp:internet control message protocol.


前言:英特网的网络层有三个主要组成部分:ip协议,路由协议(RIP,OSPF,BGP)以及icmp。

icmp被用来在主机与路由之间交换消息;最典型的是用来报错。

icmp数据像tcp或udp数据包一样在ip数据包里面作为有效数据传输。当主机接到一个封装了icmp报文的ip数据包,通过解多路复用将icmp数据包从其中剥离出来,这个过程和udp、tcp一致。

icmp报头的数据格式:




Type - ICMP的类型;
Code - 进一步划分ICMP的类型;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
Checksum - 这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。
ID - 这个字段包含了ID值,在ECHO REPLY类型的消息中要返回这个字段。
Sequence - 这个字段包含一个序号,同样要在ECHO REPLY类型的消息中要返回这个字段.(from:http://zh.wikipedia.org/wiki/ICMP)

icmp协议最常用做两种服务:ping和traceroute;

ping通常用来检测主机是否可以和某个其他主机通过ip协议通信。通过ping 主机地址,可以得到icmp回应报文;

ping还有许多参数可以设置,可以在命令行输入“ping -h”查看;




traceroute:用来跟踪从本地主机到目的主机所需要经过的路由。在windows命令行下输入tracert 目的主机地址即可。踪迹路由的工作原理是通过向指定的目的主机发送一系列的ttl递增的ip数据包(封装的是udp数据包),也就是说:第一个发送的数据包ttl为1,第二个ttl为2,第三个ttl为3...最后一个可以达到主机但ip数据的端口号不对。由于没经过一个路由,ip数据包的ttl都会自动-1,到0时就会被丢掉同时会向本地主机发送一个icmp报文(type11
code0),而最后一个由于不能找到对应的端口号,目的主机会向本地主机返回一个icmp报文(type3code3)。可以发现没有到达主机和到达主机但没法找到相应端口号都会返回一个icmp报文,那本地主机怎样确定是否已经跟踪完成了呢(就是说已经查看到所有从本地主机到目的主机的路由)?细心的可以看到而这返回的icmp报文是有区别的,本地主机就是根据返回的报文差别来判断的从而停止跟踪。




倒数第二个为什么会比较特别呢?我现在也没弄清楚。。。以后找到了再补上,路过的大虾能补上那就更好了就更好了。

icmp还有很多其他很多有趣的用途,比如hacker...一度流行的死亡之ping,icmp floot等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: