网际控制报文协议ICMP

简介: 网际控制报文协议(ICMP)是TCP/IP体系结构中网际层的关键组件,用于提高IP数据报的成功传输率。ICMP主要处理两类报文:差错报告报文与询问报文。前者包括终点不可达、源点抑制、时间超过、参数问题及重定向等五类;后者则涵盖回送请求/回答及时间戳请求/回答。ICMP广泛应用于检测网络连通性的PING工具和追踪数据包路径的traceroute工具中。两者分别利用ICMP的回送请求报文及差错报告报文实现功能。

网际控制报文协议ICMP

一.网际控制报文协议ICMP概述

  • 为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCPIP体系结构的网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)[RFC 792].
  • 主机或路由器使用ICMP来发送差错报告报文询问报文
  • ICMP报文被封装在IP数据报中发送
  • ICMP的典型应用
    • 分组网间探测PING
    • 跟踪路由traceroute

二.ICMP报文类型

(一) 差错报告报文

差错报告报文分为五大种
1.终点不可达
当路由器或主机不能交付IP数据报时,就向源点发送终点可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种。

2.源点抑制
当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把IP数据报的发送速率放慢。

3.时间超过

  • 当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中生存时间TTL字段的值减1。若结果不为0,则路由器将该数据报转发出去;若结果为0,路由器不但要丢弃该数据报,还要向发送该IP数据报的源点发送时间超过(超时)报文
  • 另外,当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文

4.参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文

5.改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机

以下情况不应发送ICMP差错报告报文:

  • 对ICMP差错报告报文不再发送ICMP差错报告报文。
  • 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文
  • 对具有多播地址的IP数据报都不发送ICMP差错报告报文。
  • 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文。

(二) 询问报文

常用的ICMP询问报文有以下两种:
1.回送请求和回答
由主机或路由器向一个特定的目的主机或路由器发出。
收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达以及了解其有关状态

2.时间戳请求和回答
用来请求某个主机或路由器回答当前的日期和时间。
在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
这种询问报文用来进行时钟同步和测量时间

ICMP的两个典型应用

(一)分组网间探测PING

  • 分组网间探测PING用来测试主机或路由器之间的连通性
    • PING是TCPIP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP。
    • PING应用所使用的ICMP报文类型为回送请求和回答

(二)跟踪路由

  • 跟踪路由应用traceroute,用于探测IP数据报从源主机到达目的主机要经过哪些路由器
  • 在不同操作系统中,traceroute应用的命令和实现机制有所不同:
    • 在UNIX版本中,具体命令为“traceroute”,其在运输层使用UDP协议,在网络层使用ICMP报文类型只有差错报告报文。
    • 在Windows版本中,具体命令为“tracert”,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。

本节总结:
image.png

相关文章
|
6月前
|
存储 网络协议 算法
基于 Wireshark 分析 ICMP 协议
基于 Wireshark 分析 ICMP 协议
|
3月前
|
网络协议 网络架构
用户态协议栈03-icmp实现
用户态协议栈03-icmp实现
|
3月前
|
监控 安全 网络安全
ICMP 协议详解及其消息格式
【8月更文挑战第20天】
275 0
|
4月前
|
人工智能 缓存 网络协议
网络层之三层交换、icmp协议、arp协议
网络层之三层交换、icmp协议、arp协议
|
4月前
|
网络协议 Linux 分布式数据库
【Linux】DNS系统,ICMP协议,NAPT技术详解
NAPT(Network Address Port Translation),也被称为端口地址转换,是一种NAT(网络地址转换)的形式。NAPT允许多个设备在内部网络上使用私有IP地址,并通过单个公共IP地址与外部网络进行通信。NAPT通过改变传输层的端口号来实现这一点,从而允许多个内部设备共享同一个公共IP地址。
61 0
|
6月前
|
网络协议 Linux 网络安全
IP 数据包格式 ICMP协议
IP 数据包格式 ICMP协议
|
6月前
|
域名解析 缓存 网络协议
|
6月前
|
网络协议 API 网络安全
用户态协议栈设计实现udp,arp与icmp协议
用户态协议栈设计实现udp,arp与icmp协议
131 1
|
6月前
|
监控 网络协议 网络安全
ICMP (Internet Control Message Protocol,互联网控制消息协议)
ICMP(Internet Control Message Protocol,互联网控制消息协议)是用于在IP网络中传递控制消息的协议。它通常被用于网络设备之间交换状态信息和错误报告,以及执行网络诊断和故障排除。
173 0
|
网络架构
ICMP协议(Internet控制消息协议)
本文详细的介绍ICMP协议,内含详细的实例解析,该文你值得拥有。