ICMP (互联网控制消息协议 )是什么

2022-04-13 15:19:49 浏览数 (1)

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。

它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

ICMP 依靠IP来完成它的任务,它是IP的主要部分。它与传输协议(如TCP和UDP)显著不同:它一般不用于在两点间传输数据。它通常不由网络程序直接使用,除了ping和traceroute这两个特别的例子。 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

ID

序号(sequence)

  • Type - ICMP的类型,标识生成的错误报文;
  • Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因.;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
  • Checksum - 校验码部分,这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。
  • ID - 这个字段包含了ID值,在Echo Reply类型的消息中要返回这个字段。
  • Sequence - 这个字段包含一个序号,同样要在Echo Reply类型的消息中要返回这个字段。

填充数据

填充的数据紧接在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 人点赞