本页使用了标题或全文手工转换

互联网控制消息协议

维基百科,自由的百科全书
跳到导航 跳到搜索

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

ICMP [1]依靠IP来完成它的任务,它是IP的主要部分。它与传输协议(如TCPUDP)显著不同:它一般不用于在两点间传输数据。它通常不由网络程序直接使用,除了 pingtraceroute 这两个特别的例子。 IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6

技术细节[编辑]

ICMP是在 RFC 792 中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。

虽然ICMP是包含在IP数据包中的,但是对ICMP消息通常会特殊处理,会和一般IP数据包的处理不同,而不是作为IP的一个子协议来处理。在很多时候,需要去查看ICMP消息的内容,然后发送适当的错误消息到那个原来产生IP数据包的程序,即那个导致ICMP消息被发送的IP数据包。

很多常用的工具是基于ICMP消息的。traceroute 是通过发送包含有特殊的TTL的包,然后接收ICMP超时消息和目标不可达消息来实现的。 ping 则是用ICMP的"Echo request"(类别代码:8)和"Echo reply"(类别代码:0)消息来实现的。

ICMP报文结构[编辑]

报头[编辑]

ICMP报头从IP报头的第160位开始(IP首部20字节)(除非使用了IP报头的可选部分)。

Bits 160-167 168-175 176-183 184-191
160 Type Code 校验码(checksum)
192 Rest of Header
  • Type - ICMP的类型,标识生成的错误报文;
  • Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因.;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
  • Checksum - Internet校验和(RFC 1071),用于进行错误检查,该校验和是从ICMP头和以该字段替换为0的数据计算得出的。
  • Rest of Header - 报头的其余部分,四字节字段,内容根据ICMP类型和代码而有所不同。

填充数据[编辑]

填充的数据紧接在ICMP报头的后面(以8位为一组):

  • Linux的"ping"工具填充的ICMP除了8个8位组的报头以外,默认情况下还另外填充数据使得总大小为64字节。
  • Windows的"ping.exe"填充的ICMP除了8个8位组的报头以外,默认情况下还另外填充数据使得总大小为40字节。

报文类型[编辑]

类型 代码 状态 描述 查询 差错
0 - Echo Reply 0 echo响应 (被程序ping使用)
1 and 2 未分配 保留
3 - 目的不可达 0 目标网络不可达
1 目标主机不可达
2 目标协议不可达
3 目标端口不可达
4 要求分段并设置DF flag标志
5 源路由失败
6 未知的目标网络
7 未知的目标主机
8 源主机隔离(作废不用)
9 禁止访问的网络
10 禁止访问的主机
11 对特定的TOS 网络不可达
12 对特定的TOS 主机不可达
13 由于过滤 网络流量被禁止
14 主机越权
15 优先权终止生效
4 - 源端关闭 0 弃用 源端关闭(拥塞控制)
5 - 重定向 0 重定向网络
1 重定向主机
2 基于TOS 的网络重定向
3 基于TOS 的主机重定向
6 弃用 备用主机地址
7 未分配 保留
8 - 请求回显 0 Echo请求
9 - 路由器通告 0 路由通告
10 - 路由器请求 0 路由器的发现/选择/请求
11 - ICMP 超时 0 TTL 超时
1 分片重组超时
12 - 参数问题:错误IP头部 0 IP 报首部参数错误
1 丢失必要选项
2 不支持的长度
13 - 时间戳请求 0 时间戳请求
14 - 时间戳应答 0 时间戳应答
15 - 信息请求 0 弃用 信息请求
16 - 信息应答 0 弃用 信息应答
17 - 地址掩码请求 0 弃用 地址掩码请求
18 - 地址掩码应答 0 弃用 地址掩码应答
19 保留 因安全原因保留
20 至 29 保留 Reserved for robustness experiment
30 - Traceroute 0 弃用 信息请求
31 弃用 数据报转换出错
32 弃用 手机网络重定向
33 弃用 Where-Are-You(originally meant for IPv6
34 弃用 Here-I-Am(originally meant for IPv6)
35 弃用 Mobile Registration Request
36 弃用 Mobile Registration Reply
37 弃用 Domain Name Request
38 弃用 Domain Name Reply
39 弃用 SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol
40 Photuris, Security failures
41 实验性的 ICMP for experimental mobility protocols such as Seamoby [RFC4065]
42 到 255 保留 保留
235 实验性的 RFC3692( RFC 4727
254 实验性的 RFC3692( RFC 4727
255 保留 保留

参考[编辑]

  1. ^ RFC 792 INTERNET CONTROL MESSAGE PROTOCOL; DARPA INTERNET PROGRAM; PROTOCOL SPECIFICATION; Introduction. J. Postel (Internet RFC/STD/FYI/BCP Archives). 1981-09-01 [2008-05-16]. 

外部链接[编辑]