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. 05基于python玩转人工智能最火框架之TensorFlow基础知识

    从helloworld开始 mkdir mooc # 新建一个mooc文件夹 cd mooc mkdir 1.helloworld # 新建一个helloworld文件夹 cd 1.helloworl ...

  2. Java Scanner学习记录

    1. Java.util.Scanner可以用来从键盘获取输入 Scanner.next()  只能读取字符,遇到任何的符合都不会输出 Scanner.nextLine()  会完全按照用户输入的st ...

  3. 腾讯云 COS 对象存储使用

    目前使用腾讯云的对象存储cos服务,将本地的文件同步到cos中,看了腾讯云的用户文档,发现使用COS Migration 工具还是挺适合的. 原因 因为服务器已经安装有java环境,而cos的几个用户 ...

  4. python 通过pymongo操作mongoDB执行sort

    在mongo shell 中对数据进行排序操作的时候 db.getCollection('ANJUKE_PRICE').find({},{'id':1,'_id':0}).sort({'id':1}) ...

  5. JFrame包含的容器(JRootPane)

    JFrame对象创建后,此对象包含JRootPane类型的容器.JRootPane 下有GlassPane,  和  LayeredPane,LayeredPane下又有ContentPane ,   ...

  6. Jmeter ----Bean shell使用

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  7. Hadoop数据分析实例:P2P借款人信用风险实时监控模型设计

    Hadoop数据分析实例:P2P借款人信用风险实时监控模型设计 一提到hadoop相信熟悉IT领域或者经常关注互联网新闻的朋友都应该很熟悉了,当然,这种熟悉可能也只是听着名字耳熟,但并不知道它具体是什 ...

  8. locate命令详解

    Linux locate命令 locate(locate) 命令用来查找文件或目录. locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/ml ...

  9. spring4与mongodb的集成

    新项目的辅助系统,需要用到mongo系统,今天再次将其使用环境进行了操作搭建.还是遇到一些问题,毕竟之前使用的场景和现在的不同.版本也不一样了. 本次使用的环境: mongo:3.4.4版本 OS: ...

  10. innobackupex per table

    #innobackupex export tableinnobackupex --defaults-file=/etc/my.cnf --sock=/data/3306/mysql_3306.sock ...