网络层协议:ICMP

互联网控制消息协议(英语: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报头的可选部分)。

Bits160-167168-175176-183184-191
160TypeCode校验码(checksum)
192Rest 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 保留 保留
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值