ICMP-互联网控制报文协议(Internet Control Message Protocol)
ICMP-互联网控制报文协议(Internet Control Message Protocol)
ICMP协议是一种面向无连接的协议,他是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递和网络安全具有极其重要的意义。
一、ICMP的两级封装
二、ICMP数据包类型
*ICMP报文的类型和代码字段的值与ICMP报文类型的对应关系
类型 | 代码 | 说明 | 查询 | 应答 |
---|---|---|---|---|
0 | 0 | 回送应答(ping命令不可达) | √ | |
3 | 目 标 不 可 达 | |||
- | 0 | 网络不可达 | √ | |
- | 1 | 主机不可达 | √ | |
- | 2 | 协议不可达 | √ | |
- | 3 | 端口不可达 | √ | |
- | 4 | 需要进行分片,但设置了DF不分片 | √ | |
- | 5 | 源路由选择失败 | √ | |
- | 6 | 目标网络未知 | √ | |
- | 7 | 目标主机未知 | √ | |
- | 8 | 源主机被隔离 | √ | |
- | 9 | 与目标网络的通信被强制禁止 | √ | |
- | 10 | 与目标主机的通信被强制禁止 | √ | |
- | 11 | 对于请求的服务类型TOS,网络不可达 | √ | |
- | 12 | 对于请求的服务类型TOS,主机不可达 | √ | |
- | 13 | 由于过滤,通信被强制禁止 | √ | |
- | 14 | 主机越权 | √ | |
- | 15 | 优先权中止生效 | √ | |
4 | 0 | 源站抑制(用于拥塞控制) | √ | |
5 | 重 定 向 | |||
- | 0 | 对网络重定向 | √ | |
- | 1 | 对主机重定向 | √ | |
- | 2 | 对服务类型和网络重定向 | √ | |
- | 3 | 对服务类型和主机重定向 | √ | |
8 | 0 | 回送请求(ping命令请求) | √ | |
9 | 0 | 路由通告 | √ | |
10 | 0 | 路由请求 | √ | |
11 | 超 时 | |||
- | 0 | 在数据报传输期间生存时间TTL为0 | √ | |
- | 1 | 在数据报传组装间生存时间TTL为0 | √ | |
12 | 参 数 出 错 | |||
- | 0 | IP数据报头部错误 | √ | |
- | 1 | 缺少必须的选项 | √ | |
13 | 0 | 时间戳请求 | √ | |
14 | 0 | 时间戳应答 | √ | |
17 | 0 | 地址掩码请求 | √ | |
18 | 0 | 地址掩码应答 | √ |
报告IP数据报在传输中的差错是ICMP报文最基本的功能,ICMP差错报文有如下特点:
(1)ICMP差错报文都是路由器发送源主机的,因为IP数据报中含有源主机的IP地址,报告给源主机是最可行的方案,另外,发出IP数据报的源主机最需要知道数据是否打到目标主机。
(2)ICMP差错报文只提供IP数据报在传输过程中的差错报告,并不规则对各类差错应采取什么样的处理措施。具体对差错的处理,由收到ICMP差错报文的源主机将相对于的差错与应用程序联系起来才能进行相应的差错处理。
(3)ICMP差错报文不享受任何优先权,也没有特别的可靠性保证措施,与普通的IP数据报一样进行传输,传输过程中可能被丢失、损坏、甚至被抛弃。
(4)ICMP差错报文是伴随着抛弃出错的IP数据报而产生的。
(5)当路由器发送一份参数错误等的ICMP差错报文时,ICMP报文数据区始终包含产生ICMP差错报文的IP数据报的头部和其他数据区的前8个字节(64位)。
当路由器发送参数错误等的ICMP报文数据字段由两部分组成,一部分是收到的需要进行差错报告的IP数据报的首部,另一部分是IP数据报的数据字段的前8个字节,如图所示:
(6)在有些情况下,为了防止在网络中产生大量的ICMP差错报文(广播风暴),影响网络的正常工作,即使发送差错,也不会产生ICMP差错报文,这些情况包括:
- ICMP报文发送差错。这是为了避免差错报文无休止产生而规定的(但ICMP查询报文可能会产生ICMP差错报文)。
- 目的地址是广播地址或多播地址的IP数据报。
- 作为链路层广播数据报。
- 不是IP分片的第一片。
- 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、回送地址、广播肚子或多播地址。
- 信息不可达报文
网关在以下情况下发出信息不可达报告
(1)信宿机硬件出现故障或关机
(2)发送者指定的地址不存在
(3)网关不知道去往信宿的路径
信宿不可到达报告的格式如下:
码域值:0 ~ 12.进一步说明信宿不可达的具体原因
码值 | 意 义 |
---|---|
0 | 网络不可到达 |
1 | 主机不可到达 |
2 | 协议不可到达 |
3 | 端口不可到达 |
4 | 需要分片,但DF置为 |
5 | 源路由失败 |
6 | 信宿网络未知 |
7 | 信宿主机未知 |
8 | 源主机被隔离 |
9 | 与信宿网络的通信被隔离 |
10 | 与信宿主机的通信被隔离 |
11 | 对请求的服务类型,网络不可到达 |
12 | 对请求的服务类型,主机不可到达 |
- 超时报文
- 互联网存志是路由器根据本地寻径表进行的,如果寻址出现错误,可能出现routing cycle;
-
为了避免报文无限制的在网中循环,IP协议采用了两种措施:
(1)在数据报头设置TTL域;
(2)对分片数据报采用定时器技术; - 当报文超时出现时,路由器或信宿立即丢弃该数据报,并使用ICMP超时报文向信源机发送报告;
- 参数出错报文
(1)参数出错报文报告出错的报文头与错误的报文选项参数;
(2)路由器或信宿机在丢弃参数出错的报文时,将向信源机发出参数出错报文;
(3)参数出错报文格式;
0—数据报某个参数错,指针域指向出错的字节;
1—数据报缺少某个选项,无指针域;
ICMP控制报文
- 拥塞控制与源站抑制报文
当一个路由器接收IP数据报的速度比其他处理IP数据报的速度快,或一个路由器传入数据报的速率大于传出数据报的速率时,就会产生拥塞现象。
这时路由器可以通过发送源站抑制报文来抑制源主机发送IP数据报的速率,避免可能产生的差错。
源站抑制报文的类型字段为4,代码字段只能为0。源站抑制技术进行拥塞控制的方法如下:
(1)当路由器发送拥塞时,便发出ICMP源站抑制报文。拥塞的判别可以用三种方法:
一是检查路由器缓存区是否已满;
二是给缓存区输出队列设置一个阈值,判读队列中数据报的个数是否超过阈值;
三是检测某输入线路的传输率是否过高;
(2)源主机收到抑制报文后,按一点的速率降低发往目标主机的数据报传输率。
(3)如果在一定的时间间隔内源主机没有收到抑制报文,便认为拥塞已解除,源主机可以逐渐恢复到原来数据报的流量。 - 路由控制与重定向报文
假如源主机要向目标主机发送IP数据报,源主机的默认路由是路由器1,则源主机先把IP数据报送到路由器1进行路由选择。路由器1经过选路后,把IP数据报送到路由器2。
同时路由器1也发送源主机要发送到目标主机的IP数据报以后可以直接发送到路由器2(因为路由器1和路由器2同在一个网络中),则路由器1向源主机发送一个ICMP重定向报文,告诉它可以直接把IP数据报送到路由器2。这样,就是源主机始终保持着一个动态的、既小且优的路径表。
ICMP重定向
解释:源主机发送IP数据报给路由器1去往路由器2的数据,然后路由器1查询自己的路由表发现自己去路由器2的接口为接收源主机的IP数据报的接口,即发送ICMP重定向报给源主机,得到ICMP重定向报的源主机将修改自己的网关为路由器2。
重定向优缺点与报文格式
优点:保证主机有一个动态、小而优的寻径表
缺点:只能用同一网络内的网关与主机之间的路径信息交换而不能用于网关之间的路径信息交换;
码值:
1 — 对主机重定向报文;
2 — 对服务类型和网络的重定向报文;
3 — 对服务类型和主机的重定向报文;
ICMP差错报告与控制报文是单向传输的报文
- 回送请求与应答报文
(1)目的:测试信宿机或路由器是否可以到达;
(2)报文格式:
- 标识符与***用来确定是那一台主机发出的回应请求;
- 回应请求与应答报文以IP数据报方式在互联网中传输,如果成功接收到应答报文的话,则说明数据传输系统、IP与ICMP软件工作正常,信宿机可以到达;
- TCP/IP实现中,用户的ping命令就是利用回应请求与应答报文测试信宿机是否可以到达;
-
时戳请求与应答报文
(1)目的:同步互联网中各个主机的时钟;
(2)方法:
首先利用该报文从其他主机处获得其时钟的当前时间,
根据时戳请求与应答报文接收的时间,计算出两地的往返延迟,
以此数据来同步时钟,因此这种时钟同步能力是有限的;
(3)时戳请求与应答报文的格式: -
地址掩码与应答报文
(1)用于无盘系统在引导过程中获取自己的子网掩码。
(2)主机启动时,会广播一个地址掩码请求报文。路由器收到地址掩码请求报文后,回送一个包含本网使用的32位地址掩码的应答报文。
三、ICMP应用
Ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用
Tracert(Trace Route的缩写)是路由跟踪实用程序,用于确定IP
四、ICMP的安全性
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达到334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!
利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“ping of death”攻击。其攻击原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。
对于这种攻击方法有两种方式可以防范:
(1)第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;
(2)第二种方法就是主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICP数据包。
洪水:是速度极快的,当一个程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器,洪水数据是从洪水产生器里出来的,但是这样还不够,没有足够的带宽,再猛的洪水也只能向公路塞车那样慢慢移动,成了鸡肋。要做真正的洪水,就需要有一条足够宽的高速公路才可以。
由于ping.exe无法提速,这就需要专门的工具来做洪水了。足够快的数据包速度足够的带宽,这才是洪水。
配置防火墙以预防攻击,用户应该配置一个合理的安全策略。以下是被普遍认可的防火墙安全配置惯例,可以供管理员再系统安全性和易用性之间做出权衡。
防火墙应该强制执行一个缺省的拒绝策略,除了出战的ICMP Echo Request、出战的ICMP Source Quench、进站的TTL Exceeded和进站的ICMP Destination Unreachable之外,所有的ICMP消息类型都应该被阻止。
创作者:Eric· Charles