ICMP协议

1. 概述

      由于IP协议提供的时一种不保证可靠的无连接的数据报交付服务,在一个IP数据报被交付到最终目的地的过程中,难免会遇到各种意外状况,这些意外状况都有可能导致IP数据报无法正常送达目的地址。

      IP层缺少这样的辅助检查机制,即主机的管理和查询机制。于是网际报文控制协议(Internet Control Message Protocol, ICMP)应运而生,从网络分层上看,ICMP与IP同属于网络层协议,它的报文也是放到IP数据报中发送的

2. 报文格式

类型

(8)

代码

(8)

校验和

(16)

首部剩余字节

数据部

图表 1 ICMP报文格式

2.1 类型

       该字段表示ICMP报文的具体类型,如下表所示。

      ICMP报文总体上可以分为ICMP差错报告报文ICMP查询报文两类。

      差错报告报文主要用来向IP数据报源主机返回差错报告信息,查询报文用于一台主机向另一台主机查询特定的信息,查询报文通常是成对出现的,即目的主机(即差错报告报文的接收方)应当向源主机回复一个应答报文。

ICMP报文种类

取值

报文功能

差错报告报文

3

目的不可达

4

源站抑制

5

重定向(路由改变)

11

数据报超时

12

数据报参数错误

查询报文

8/0

回送请求或回答

10/9

路由器询问或回答

13/14

时间戳请求或回答

15/16

信息请求或回答

17/18

地址掩码请求或回答

图表 2 ICMP报文分类

2.2 代码

      类型字段表示ICMP报文的类型,代码字段则是在此基础之上进一步描述问题的原因。

3. 各类型报文介绍

3.1 差错报告报文

       当协议栈[1]收到任何类型的差错报告报文时,会直接将其所在的数据报(IP数据报)丢弃。

      另外,值得注意的是,ICMP差错报文不会对以下情况返回差错报文:

      (1)差错回复报文;

      (2)分片报文的非第一个分片所在的IP数据报;

      (3)多播地址等特殊地址的数据报。

3.2 目的站不可达报文

       当路由器不能为数据报找到合适的路由路径,或是主机不能将数据呈递到上层软件时,对应的IP数据报会被丢弃,随后返回一个“目的站不可达差错报告报文”给源主机,“目的不可达”的真实原因需要在ICMP差错报告报文的代码字段中描述,如下所示:

类型:3

(8)

代码

(8)

校验和

(16)

0

出现问题的IP数据报首部+数据部前8个字节

图表 3 目的不可达报文格式

       其代码字段的具体取值如下:

代码段取值

含义

0

网络不可达

1

主机不可达

2

协议不可达

3

端口不可达

4

需要分片但不分片位被置位

5

源路由失败

6

目的网络未知

7

目的主机未知

图表 4 目的不可达报文代码段取值

3.3 数据报超时报文

       该报文用以防止数据在网络中循环地路由。IP数据报中有一个记录数据报最大路由次数的生存时间(TTL)字段,当该字段地值被减为0,数据报会被丢弃,同时返回数据报超时报文给源主机。

类型:11

(8)

代码

(8)

校验和

(16)

0

出现问题的IP数据报首部+数据部前8个字节

图表 5 数据报超时报文格式

代码段

含义

0

TTL超时

1

分片重装超时

图表 6 超时报文代码段取值

3.4 源站抑制报文

       IP协议本身没有流量控制机制,同时在数据报的转发过程中各个节点设备也没有稳定的通信关系,因此在各个设备之间建立流量控制机制是不现实的。因而诞生了ICMP源站抑制报文,它的目的是告知源主机发送的数据报速率过快,旨在缓解网路中的信道拥塞状况。

3.5 重定向(改变路由)报文

       该报文用来通知源主机及时变更目的地址以提高数据报的发送效率,这样做的一个典型场景是:当一台主机刚启动时,它的所有数据报都发往其所在网络的默认路由器,而默认路由接收到这样的数据后,它就可以发送一个ICMP重定向报文到源主机,通知源主机改变目的地址(其它的路由器),不必在向它发送。

3.6 数据报参数错误报文

      顾名思义,当数据报中任何一个字段无法解析时,数据报会被丢弃并返回一个数据报参数错误报文。

4. 查询报文

       比较常用的查询报文有 回送请求或回答报文时间戳请求或回答报文,其它三种查询报文,原来用于确定主机在网络环境中的IP地址、地址掩码、路由器状态等信息,而现在DHCP协议完全可以满足这些需求。

类型:8/0

(8)

代码0

(8)

校验和

(16)

标识符

序号

可选:请求报文发送,回复报文重复

图表 7 回送请求或回答报文格式

      

5. ping命令

       ping命令用于测试一网络设备是否可达,其本质就是ICMP回送请求或回答报文

6. ICMP洪水

       网络中对于大数据的分片重装存在一定程度的限制,当超过这个限制时,协议栈会直接丢弃这个数据报,如果这个数据报是ICMP数据报,那么源主机将得不到任何回应。

      所谓ICMP洪水,就是一台或多台主机源源不断地发送ICMP请求,从而导致网络的带宽被极速消耗,进而导致网络拥塞。

      相对应的,处理方法有两种,一是在传输路径上,即在路由器上设置ICMP数据报的贷款限制,这样即使有ICMP攻击,它所占用的带宽也是相当有限的;另一种方法实在传输的末端设置对于ICMP的处理规则。

 

[1] “协议的堆叠”,即某个应用了多种网络协议的上层软件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值