Networking - ICMP 协议

发送到远程计算机的数据通常发经过一个或多个路由器,这些路由器在把数据传输到最终目的地的过程中可能发生多种问题。路由器利用 ICMP 把问题通知给源 IP。ICMP 还有用于其他调试和排错的功能。

 

ICMP 报文格式

ICMP 报文格式如下:

Type Code Checksum
Rest of Header
Data

Type: 该字段有 1 个字节,表示特定类型的 ICMP 报文。
Code: 该字段有 1 个字节,进一步细分 ICMP 的类型。
Rest of Header: 不同类型的 ICMP 报文有不同的内容。
Data: 数据载荷。

 

ICMP 类型

 类型      代码             描述  查询   差错 
   0           0            回显应答 Y  
   3                         目的不可达
   3           0            网络不可达
   3           1            主机不可达
   3           2            协议不可达
   3           3            端口不可达
   3           4            需要进行分片但设置不分片比特
   3           5            源站选路失败
   3           6            目的网络未知
   3           7            目的主机未知
   3           8            源主机被隔离(作废不用)
   3           9            目的网络被强制禁止
   3          10           目的主机被强制禁止
   3          11           由于服务类型 TOS,网络不可达 
   3          12           由于服务类型 TOS,主机不可达
   3          13           由于过滤,通信被强制禁止
   3          14           主机越权
   3          15           优先中止生效
 
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
   4           0            源端被关闭(基本流控制)   Y
   5                         重定向
   5           0            对网络重定向
   5           1            对主机重定向
   5           2            对服务类型和网络重定向
   5           3            对服务类型和主机重定向
 
Y
Y
Y
Y
   8           0            回显请求 Y  
   9           0            路由器通告 Y  
  10          0            路由器请求 Y  
  11                        超时
  11          0            传输期间生存时间为 0
  11          1            在数据报组装期间生存时间为 0
 
Y
Y
  12                        参数问题
  12          0            坏的 IP 首部(包括各种差错)
  12          1            缺少必需的选项
 
Y
Y
  13          0            时间戳请求(作废不用) Y  
  14          0            时间戳应答(作废不用) Y  
  15          0            信息请求(作废不用) Y  
  16          0            信息应答(作废不用) Y  
  17          0            地址掩码请求 Y  
  18          0            地址掩码应答 Y  

 

常见的 IMCP 消息

Echo Request(回显请求)和 Echo Reply(回显应答)

ICMP 经常被用语测试,比如测试连接的 ping 命令实际上就是在使用 ICMP。ping 向某个 IP 地址发送一个 Echo Request,目的计算机接收到该 ICMP 包后,会响应一个 Echo Reply。ping 命令是常用的网络连通性测试工具,如果成功地 ping 到某个 IP 地址,那么使用其他网络协议的通信方式也很有可能成功。

Source Quench(源抑制)

如果一台高速计算机向远程计算机发送大量数据,可能会使路由器产生过载。这时路由器可以利用 ICMP 向源 IP 发送 Source Quench 消息,让它降低发送数据的速度。

Destination Unreachable(目的不可达)

如果路由器收到一个不能传递的数据报,ICMP 就会向源 IP 返回一个 Destination Unreachable 消息。路由器不能传递消息的原因之一是网路由于设备故障或维修而关闭。

Time Exceeded(超时)

当数据报由于 TTL 为 0 而被抛弃时,ICMP 就会向源 IP 发送这个消息。这表示对于当前 TTL 值来说,到达目标需要经过太多的路由器;或者是说明路由表出了问题,导致数据报在同一台路由器上连续循环。

Fragment needed(需要分段)

如果一个数据报的 “Don't Fragment” 位设置为 1,而路由器必须要对数据报进行分段才能把它转发到下一台路由器或目的地,这时 ICMP 就会发送 Fragment needed 消息。

 

posted on 2015-09-22 19:28  huey2672  阅读(427)  评论(0编辑  收藏  举报