国际控制报文协议ICMP
国际控制报文协议ICMP
ICMP简介
- ICMP 用于主机或路由器报告差错情况和提供有关异常情况的报告(检测网络错误)。
- ICMP 不是高层协议,而是 IP 层的协议。
**ICMP 报文的格式 **

ICMP 报文的类型
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
ICMP报文可分为两大类:一、有关信息采集和配置的ICMP报文(称为查询报文(query)或者信息类报文(information message)),二、有关IP数据报传递的ICMP报文(称为差错报文(error message)).
ICMP 差错报告报文有许多种比如 :
- 终点不可达;比如传输数据过程中,中间某一路由器不知道到目标地址怎么走,该路由器就会发回该报文。
- 源点抑制(Source quench); 即反馈发包速度过快;
- 时间超过 ;
- 参数问题 ;
- 改变路由(重定向)(Redirect) ;

如图三个网段:1,2,3,可以把网段1的网关设置在A处,那么PC0访问PC2时,PC0把数据发送到网关A,经Router0转发到达PC2;如果是PC0访问PC1那么PC0同样也会先把数据发送到网关A,Router再中转到Router1再到PC1,而重定向就是,当PC0发数据给网关A时,Router0给PC0返回一个ICMP差错报告报文,告诉PC0直接发到Router1处更快到达PC1。
报文类型字段(Type)及代码字段(Code)含义对照:
| 类型TYPE | 代码CODE | 用途|描述 Description | 查询类Query | 差错类Error |
|---|---|---|---|---|
| 0 | 0 | Echo Reply——回显应答(Ping应答) | √ | |
| 3 | 0 | Network Unreachable——网络不可达 | √ | |
| 3 | 1 | Host Unreachable——主机不可达 | √ | |
| 3 | 2 | Protocol Unreachable——协议不可达 | √ | |
| 3 | 3 | Port Unreachable——端口不可达 | √ | |
| 3 | 4 | Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 | √ | |
| 3 | 5 | Source routing failed——源站选路失败 | √ | |
| 3 | 6 | Destination network unknown——目的网络未知 | √ | |
| 3 | 7 | Destination host unknown——目的主机未知 | √ | |
| 3 | 8 | Source host isolated (obsolete)——源主机被隔离(作废不用) | √ | |
| 3 | 9 | Destination network administratively prohibited——目的网络被强制禁止 | √ | |
| 3 | 10 | Destination host administratively prohibited——目的主机被强制禁止 | √ | |
| 3 | 11 | Network unreachable for TOS——由于服务类型TOS,网络不可达 | √ | |
| 3 | 12 | Host unreachable for TOS——由于服务类型TOS,主机不可达 | √ | |
| 3 | 13 | Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 | √ | |
| 3 | 14 | Host precedence violation——主机越权 | √ | |
| 3 | 15 | Precedence cutoff in effect——优先中止生效 | √ | |
| 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请求) | √ | |
| 9 | 0 | Router advertisement——路由器通告 | ||
| 10 | 0 | Route solicitation——路由器请求 | ||
| 11 | 0 | TTL equals 0 during transit——传输期间生存时间为0 | √ | |
| 11 | 1 | TTL equals 0 during reassembly——在数据报组装期间生存时间为0 | √ | |
| 12 | 0 | IP header bad (catchall error)——坏的IP首部(包括各种差错) | √ | |
| 12 | 1 | Required options missing——缺少必需的选项 | √ | |
| 13 | 0 | Timestamp request (obsolete)——时间戳请求(作废不用) | √ | |
| 14 | Timestamp reply (obsolete)——时间戳应答(作废不用) | √ | ||
| 15 | 0 | Information request (obsolete)——信息请求(作废不用) | √ | |
| 16 | 0 | Information reply (obsolete)——信息应答(作废不用) | √ | |
| 17 | 0 | Address mask request——地址掩码请求 | √ | |
| 18 | 0 | Address mask reply——地址掩码应答 |
**ICMP 差错报告报文的数据字段的内容 **

如果网络设备1与网络设备2通信,图中A表示网络设备2收到的来自网络设备1的数据报,该数据报并无有用数据,仅起询问是否能通信作用;B表示该设备返回的数据报,图中演示的是A-->B的过程。首先保留A的首部和数据字段中的前8字节,在IP数据报前面添加ICMP的前8字节形成ICMP差错报告报文,再在ICMP差错报告报文前面添加网络层地址形成B数据报;
抓包演示

我们尝试与两个地址建立通信并抓取通信过程中的数据报,其中一个不能通信的地址:207.226.141.205;另一个为能够通信的地址:202.99.160.68 。抓包总览如下图所示:

不能通信:
- 172.26.105.78(本计算机IP地址)——>207.226.141.205时:

Internet Control Message Protocol即表示网际控制报文协议ICMP。
可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。
可以以看到后面还有检验和等字段,检验了上面讨论的ICMP报文字段结构。
- 207.226.141.205 ——> 172.26.105.78时:

可以看到该ICMP报文的类型(Type)为11,对应代码(Code)为0,表示Time-to-live exceeded——传输期间生存时间TTL为0,属于差错报告报文。
能够通信:
- 172.26.105.78(本计算机IP地址)——>202.99.160.68时:

可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。
- 202.99.160.68 ——> 172.26.105.78时:

可以看到该ICMP报文的类型(Type)为0,对应代码(Code)为0,表示Echo Reply——回显应答(Ping应答),属于查询报文。
ping命令诊断网络故障
PING(Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。
ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。
如果你打开IE浏览器访问网站失败,你可以通过ping命令测试到Internet的网络连通,可以为你排除网络故障提供线索,下面展示ping命令返回的信息以及分析其原因。
目标主机不可到达

目标网络不可到达

请求超时

说明丢包了。
通过延迟评估网络带宽

可以看到最小延迟为54ms,最大延迟57ms,平均延迟55ms。
当 ping 本计算机网关的时候延迟小,速度快:

总结:ping命令只能检测两端口通或不通。
pathping命令跟踪数据包路径

当PC0 ping PC1时不通,可能是1~4处某一处或多处断了,也可能是PC1没有开机。而使用PC0 pathping PC1时,从PC0到PC1,每经过一个路由器都会通过该路由器给PC0发回一个数据包说明PC0到该路由器的路径是通的。即Router1给PC0发回一个数据包则表示1、 2通;Router2给PC0发回一个数据包表示1、 2、 3通。在网络排错中具有很强的实用意义。
- 另一种情况

PC0 pathping PC1时,数据包可以通过Router0,但是Router0设置了进入的数据包无法追踪该路由器,则Router0不会给PC0返回一个数据包。
演示
输入命令:
pathping www.bilibili.com
表示从本计算机访问“www.bilibili.com”该网站的服务器,并追踪途经的各个中转路由器。

同时pathping命令还会统计通信方到每个中转路由器的丢包率,由此可以看出从哪到哪丢包严重,网络延迟大,据此可以优化网络。
相同类型的有trace route命令,该命令较为简略不会统计丢包率,这里不做讨论。
国际控制报文协议ICMP的更多相关文章
- 【RL-TCPnet网络教程】第24章 RL-TCPnet之网络控制报文协议ICMP
第24章 RL-TCPnet之网络控制报文协议ICMP 本章节为大家讲解ICMP(Internet Control Message Protocol,网络控制报文协议),通过前面章节对TCP和 ...
- 2016.7.9 计算机网络复习要点第四章之网际控制报文协议ICMP
1.ICMP允许主机或路由器报告差错情况和提交有关异常情况的报告:为了更有效地转发IP数据报和提高交付成功的机会: 2.ICMP不是高层协议,因为ICMP报文是装在IP数据报中的,作为其中数据部分,所 ...
- 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- ICMP Internet控制报文协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...
- ICMP:Internet控制报文协议
ICMP:Internet控制报文协议. 是IP层的组成部分.传递差错报文或其他信息. ICMP报文被封装在IP数据报内部: 详细格式例如以下所看到的: 个字段含义例如以下: 8位类型. 表示该ICM ...
- ICMP:internet 控制报文协议
ICMP:internet 控制报文协议 1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个 ...
- ICMP(网际控制报文协议)
为了更有效的提高ip数据报的成功转发和交付的效率,在网际层使用了icmp网际控制报文协议,这个协议允许主机和路由器提供差错和异常情况的报告,icmp不是高层协议,而是网际层的协议,加在ip数据报中一起 ...
- TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...
随机推荐
- PCA|factor extraction|CA
PCA:主成分分析 相关矩阵,找特征值,找每个特征值对应特征向量,即组成主组成式子: 每个式子指向一个结果y,找一条线将这些y分开.有11个变量就有11个新坐标轴,通过点到直线距离来区分. 信息必须集 ...
- vue axios从服务器加载图片并显示
使用场景: 后台传给前端一个图片二进制流,但是要添加httpp header,但是在传统的用img标签查看图片,无法添加http header this.$axios({ method: 'get', ...
- OAuth 2.0安全案例回顾
转载自:http://www.360doc.com/content/14/0311/22/834950_359713295.shtml 0x00 背景 纵观账号互通发展史,可以发现OAuth比起其它协 ...
- zabbix server in not running
修改配置文件 vi zabbix.conf.php 修改lochlhost为 自己服务器的IP地址 修改$DB['SERVER'] = '192.168.30.6'; 修改$ZBX_SERVER ...
- CSS样式表------第一章:样式表的基本概念
CSS(Cascading Style Sheets,层叠样式表),控制页面样式外观,作用是美化HTML网页. 一. 样式表的基本概念 1.样式表的分类 (1)内联样式表 -----放在元素的开始标 ...
- 电脑C盘空间不足
电脑C盘空间不足,又不知道哪些文件可以删,可以下载下面的批处理文件 @echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.t ...
- css后续篇
5.盒模型 在css中,box model这一术语是用来设计和布局时使用的,在网页中显示一些方方正正的盒子,这种盒子就叫盒模型 盒模型有两种: 标准模型和IE模型(了解) 盒模型属性 width : ...
- springboot整合mybatis报错:Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation...
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis- ...
- 将java list转换为js的数组
var data = new Array();<%ArrayList list = new ArrayList();list.add(0);list.add(1);if(list!=null){ ...
- [LC] 426. Convert Binary Search Tree to Sorted Doubly Linked List
Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right pointers ...