2. ICMP协议

2.1 ICMP报文(Internet Control Message Protocol)的类型

报文类型

类型值

代码

描述

请求报文

8

0

请求回显报文

响应报文

0

0

回显应答报文

差错报告报文

3

(终点不可到达)

0

网络不可达

1

主机不可达

2

协议不可达

3

端口不可达

4

需要进行分片但设置了不分片

13

由于路由器过滤,通信被禁止

4

0

源端被关闭

5

(改变路由)

0

对网络重定向

1

对主机重定向

11

0

传输期间生存时间(TTL)为0

12

(参数问题)

0

坏的IP首部

1

缺少必要的选项

(1)ICMP报文用于在IP主机、路由器之间传递控制消息。如网络通不通、主机是否可到达、路由是否可用等网络本身的消息

(2)ICMP差错报文共5种

  ①终点不可到达:当路由器或主机没有到达目标地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文。

  ②源点抑制:当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应降低数据包的发送速率。

  ③时间超时:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据片时,就把己收到的数据报片都丢弃,并向源点发送时间超时报文。

  ④参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

  ⑤改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

2.2 ICMP报文格式

(1)ICMP报文格式

(2)ICMP差错报文

  ①ICMP差错报文中的数据字段具有同样的格式,即ICMP数据部分=收到的IP数据报的首部和数据字段的前8个字节)

  ②提取数据报中数据字段的前8个字节是为了得到传输层的端口号(对于TCP和UDP)以及传输层报文的发送序号(对于TCP)。这些信息对源点通知高层协议是有用的。

  ③整个ICMP差错报文=ICMP的前8个字节+ICMP数据部分,作为IP数据报的数据字段发送给源点。

2.3 ICMP差错报告报文:路由重定向

(1)PC1的网关设置为R1的f0/0接口地址(192.168.1.1)。当PC1给PC3发送数据包时,会发送给R1,再经R1转发给R3。这样效率不高。

  ①三层交换机端口默认为二层口,接口配置模式下使用不带参的switchport命令把一个接口设置为2层模式。如果需要启用三层功能就需要在此端口输入no switchport命令。

  ②在配置R3路由器的f1/0地址前,要执行no swichport命令,才可以进一步配置接口地址。

(2)当出现这种现象时,路由器R1会把第1个数据包转发给R3,然后给PC1发送一个ICMP重定向数据包,告诉PC1到达主机192.168.2.2,下一跳为192.168.1.254.这样PC1增加一条到192.168.2.2的路由,下一跳指向192.168.1.254(注意,是到一个主机,而不是到192.168.2.0/24整个网段的路由)。以后的数据包就直接发到R3的f0/0的接口。

(3)主机和路由器对于重定向报文的不同处理原则

  ①路由器一般会忽略ICMP重定向报文

  ②主机对于重定向报文的处理取决于操作系统。对于Windows操作系统,从网关返回的ICMP重定向报文,会在计算机的路由表中添加一条到主机的路由

  ③也可以人工添加到一个主机地址的路由:如c:\Windows\system32>route add 10.7.1.35 mask 255.255.255.255 10.7.10.254(注意,子网掩码是4个255)

2.4 ICMP差错报告报文:给程序返回错误消息

(1)实验环境

  ①VM使用虚拟机WinXP充当,连接到VMnet1网络。

  ②R1和R2默认路由互相指定对方。

  ③然后从WinXP的浏览器访问http://59.46.80.160,这个TCP数据包会在两个路由器之间往复转发,直到TTL耗尽。然后路由器返回给WinXP主机ICMP差错报文数据包,如下图。

(2)抓包分析

  ①当WinXP浏览http://59.46.80.160时,使用的是TCP协议,源端口和目标端口分别为1058和80。

  ②从上图可知R2产生ICMP差错报文给WinXP。该ICMP报文中包含了传输层首部的8个字节指明了出现差错的数据包的协议、源端口和目标端口

2.5 使用ICMP排除网络故障

(1)使用ping命令诊断网络故障

  ①当ping某个IP时,出现大多数请求超时,只是偶尔会有ICMP响应数据包时,说明网络很不畅通。

  ②这种请求超时的产生主要原因是网络拥塞,导致发送一个ICMP请求数据包在一段时间内没有得到ICMP响应数据包或针对该ICMP请求数据包的差错报告数据包。

  ③可以检查导致网络拥塞的原因,比如恶意软件大量发送广播包占用了网络带宽。

(2)使用tracert跟踪数据包路径

  ①ping和-i参数跟踪数据包

  ②tracert命令的工作原理就是使用上述方法,通过给目标地址发送TTL逐渐增加的ICMP请求,根据返回的ICMP差错报文来确定沿途经过了哪些路由器

(3)使用pathping跟踪数据包路径

  ①pathping是一个基于TCP/IP的命令行工具,该命令不但可以跟踪数据包从源主机到目标主机所经过的路径,还可以统计计算机网络延时以及丢包率。其跟踪数据包路径的原理和tracert命令一样。

  ②图中的“跃点”指的是路由器,D处表示路由器转发数据包的丢包率。E处的表示从跃点9到跃点10链路上的丢包率。

第7章 网络层协议(2)_ICMP协议的更多相关文章

  1. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)

    一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端   24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器    想体验服务的时候 ...

  4. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...

  5. 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识

    第25章      DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...

  6. (71)一篇文章带你熟悉HTTP协议

    作者:涤生_Woo链接:http://www.jianshu.com/p/6e9e4156ece3來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇文章篇幅比较长,先 ...

  7. 第一篇 网站基础知识 第5章 自己动手实现HTTP协议

    第5章 自己动手实现HTTP协议 我们知道HTTP协议是在应用层解析内容的,只需要按照它的报文的格式封装和解析数据就可以了,具体的传输还是使用的Socket,在第4章NioServer的基础上自己做一 ...

  8. 第五章Web应用与应用层协议

    Web应用与应用层协议 本篇博文中的主要参考文献是<计算机网络高级教程>,分别是吴功宜老先生和吴英教授合著.这部教程是我研究生老师所推荐的网络必读科目,由于该教程讲解的基础知识详细,但内容 ...

  9. 【知识强化】第四章 网络层 4.3 IP

    这节课我们来学习一下IP数据报的格式.那之所以把路由算法这一小节跳过呢,就是因为我们之后会要讲到路由的选择协议.那在路由选择协议这一块讲路由算法,我觉得是比较合适的.那我们先来看一下这节课要讲的知识. ...

  10. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

随机推荐

  1. Git安装和TortoiseGit详细使用教程【基础篇】

    标签:tortoisegit 环境:win8.1 64bit 安装准备: 首先你得安装windows下的git msysgit1.9.5 安装版本控制器客户端tortoisegit  tortoise ...

  2. gevent原理

    未看 http://blog.csdn.net/yueguanghaidao/article/details/24281751

  3. mysql之 误用SECONDS_BEHIND_MASTER衡量MYSQL主备的延迟时间

    链接:http://www.woqutech.com/?p=1116 MySQL 本身通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之间的 ...

  4. koa 学习资料

    koa 学习资料 学习资料 地址 koa 中文版 https://koa.bootcss.com/

  5. vue项目权限控制

    Vue权限控制有各种方法,大概分为两个方向: 把当前角色对应的权限保存在浏览器本地(容易被恶意修改): 将操作权限保存在vuex中(推荐此种方式:页面一刷新就没了,可以再次向后端请求相关数据,始终保持 ...

  6. DNS压力测试

    安装 queryperf cd /usr/local/src wget http://ftp.isc.org/isc/bind9/9.12.1/bind-9.12.1.tar.gz 编译querype ...

  7. 代码问题: 【MatConvNet库编译】

    问题1: 老版本的MatConvNet在编译对cuDNN支持的时候,cuDNN的版本是2或者4比较好,官网有明确的描述. 比如我编译用了cuDNN 6.0的版本,在编译 nnconv_cudnn.cu ...

  8. Hive介绍和Hive环境搭建

    一.Hive介绍 Hive包含用户接口.元数据库.解析器和数据仓库等组件组成,其中用户接口包含shell客户端.JDBC.ODBC.Web接口等.元数据库主要是指定义在hive中的表结构信息,一般保存 ...

  9. kettle判断是否是数据首行(第一行)

    可以用组件:分析查询(Analytic Query) 后面可以通过判断pre_id 是否为空值(null)判断.

  10. centos6 只安装mysql client(安装包安装和yum安装mysql)

    方法一下载安装: 1.在/home创建mysql目录,下载如下四个软件包 http://mirrors.sohu.com/mysql/MySQL-5.7/ wget http://mirrors.so ...