Skip to content

Latest commit

 

History

History
90 lines (73 loc) · 5.52 KB

File metadata and controls

90 lines (73 loc) · 5.52 KB

ICMP

ICMP(Internet Control Message Protocol)是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。例如,数据报大小超过设备的最大处理能力,设备就会丢弃该数据报并往回发送一个 ICMP 消息。又例如网关发现一个更短的路由路径,就会往回发送一个 ICMP 消息,数据报会被路由到更短的路径。

ICMP 协议是为了辅助 IP 协议,交换各种各样的控制信息而被制造出来的,它工作在网络层,是 IP 的组成部分,必须由每个 IP 模块实现。

ICMP 大致分成两种功能:差错通知和信息查询。

ICMP 功能

  1. MTU 探索:找到通信对方之间不用分片 IP 数据报,就能交流的 MTU 大小的功能。
  2. 改变路由:路由器向送信方指示路径改变。源主机根据路由信息来决定传送目标,没有相应的路由信息就发给默认网关的路由器。默认网关接收到数据包,发现将数据包发给局域网内的其它路由器会比较快的时候,将这一信息通过 ICMP 通知发送方。
  3. 源点抑制:数据包集中到达某一路由器后,数据包来不及被处理,有可能被丢弃。此时向送信方发送 ICMP 源点抑制报文,用来使送信方减慢发送速度。
  4. ping
  5. traceroute:通过发送不同 TTL 的数据报,然后凭借 ICMP 超时报文来确定路径信息。

ICMP 数据包格式

ICMP 信息包含在 IP 数据报的数据部分,IP 数据报的协议字段值为 1。

ICMP 消息包含源数据报完整的首部,以使源主机定位出错的包。

一般格式

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Type     |      Code     |            Checksum           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Pointer: Identifies the problem in the original IP message   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                          Message Body                         +
|                                                               |

Type: 消息类型,8 bits,常见有

  1. Type 0 -- Echo reply
  2. Type 3 -- Destination unreachable
  3. Type 8 -- Echo
  4. Type 5 -- Redirect

Code: 编码,8 bits,提供消息类型更详细的信息。

Pointer:指针,32 bits,指出原数据报中问题所在字节位置。

TYPE CODE Description Query Error
0 0 Echo Reply——回显应答(Ping应答) x
3 0 Network Unreachable——网络不可达 x
3 1 Host Unreachable——主机不可达 x
3 2 Protocol Unreachable——协议不可达 x
3 3 Port Unreachable——端口不可达 x
3 4 Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 x
3 5 Source routing failed——源站选路失败 x
3 6 Destination network unknown——目的网络未知 x
3 7 Destination host unknown——目的主机未知 x
3 8 Source host isolated (obsolete)——源主机被隔离(作废不用) x
3 9 Destination network administratively prohibited——目的网络被强制禁止 x
3 10 Destination host administratively prohibited——目的主机被强制禁止 x
3 11 Network unreachable for TOS——由于服务类型TOS,网络不可达 x
3 12 Host unreachable for TOS——由于服务类型TOS,主机不可达 x
3 13 Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 x
3 14 Host precedence violation——主机越权 x
3 15 Precedence cutoff in effect——优先中止生效 x
4 0 Source quench——源端被关闭(基本流控制)
5 0 Redirect for network——对网络重定向
5 1 Redirect for host——对主机重定向
5 2 Redirect for TOS and network——对服务类型和网络重定向
5 3 Redirect for TOS and host——对服务类型和主机重定向
8 0 Echo request——回显请求(Ping请求) x
9 0 Router advertisement——路由器通告
10 0 Route solicitation——路由器请求
11 0 TTL equals 0 during transit——传输期间生存时间为0 x
11 1 TTL equals 0 during reassembly——在数据报组装期间生存时间为0 x
12 0 IP header bad (catchall error)——坏的IP首部(包括各种差错) x
12 1 Required options missing——缺少必需的选项 x
13 0 Timestamp request (obsolete)——时间戳请求(作废不用) x
14 Timestamp reply (obsolete)——时间戳应答(作废不用) x
15 0 Information request (obsolete)——信息请求(作废不用) x
16 0 Information reply (obsolete)——信息应答(作废不用) x
17 0 Address mask request——地址掩码请求 x
18 0 Address mask reply——地址掩码应答

ICMPv6

ICMPv6 除了与 ICMP 相同的功能外,还有基于 ICMPv6 实现的邻居发现,包括:地址解析、重复地址检测、路由发现、Path MTU发现以及重定向等功能。

ICMPv6 的协议号为 58,也就是在 IPv6 报文中的 Next Header 的值为58。