10 ICMP协议详解

大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:


创建时间:2021年1月24日
软件: eNsp_Client 、SecureCRT 、MindMaster


  • 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。

在这里插入图片描述

1. ICMP协议:

1. 1 什么是ICMP协议?

  • Internet控制消息协议ICMP(Internet Control Message Protocol)ICMP 它是TCP/IP协议簇的一个子协议,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层
  • 主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

1. 2 ICMP协议的主要功能?

  • ICMP就是一个“错误侦测与回报机制”其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过ICMP向数据包的源端报告有关事件。

主要功能

  1. 侦测远端主机是否存在。
  2. 建立及维护路由资料。
  3. 重导资料传送路径(ICMP重定向)。
  4. 资料流量控制。
  • ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。

1. 3 ICMP协议的应用?

  • ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是PING和traceroute。
  • Ping:通过发送回送请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况。
    Ping用到的是ICMP协议,不是端口。
    在这里插入图片描述

1. ping程序命令原理

  • 是发送ICMP回显请求(ICMP_ECHO)给主机,等待主机返回回显应答(ICMP_ECHOREPLY),来测试另一台主机是否可达。可以根据ping出的往返时间来确定主机离我们有多远。它只利用了ICMP的回显请求和回显应答报文,而不用经过传输层。
  • 在UNIX 中ICMP报文中的会把标识符字段设置为发送进程的id号,这样的话可以在同一台主机上同时运行多个ping程序。
  • 客户程序在应答和请求之间进行匹配是通过序列号字段实现的。序列号从0开始,每法送一次新的回显请求就加1。我们可以通过ping打印的序列号来确定分组是否有丢失、失序或者重复。

2. ping是如何获取目的主机的地址的?

  • 通过IP记录路由选项。ping提供了一个-R选项,来记录路由的功能。每个路由处理数据报的时候都会都会把它的地址放入选项清单中。当数据报到达目的端时,IP地址清单都会被复制到ICMP回显应答中,这样用户就可以通过ping的输出信息查看目的主机的IP了。

3. ping执行打印的信息

  • 输出字节数,是64;输出目的主机的IP地址,是通过DNS协议解析来的;输出icmp_seq,是序列号,ttl,是 生存时间,time是往返时间,如果是0是因为系统的计时器分辨率低。

4. ping命令的功能

(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
5. 那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

  • traceroute: 通过发送探测报文来获取链路地址信息。第一个探测报文TTL为1,到达第一个路由器时,TTL减1为0所以丢掉这个探测包,同时向源主机发回ICMP时间超过报文,这时源主机就获得了第一个路由器的IP地址;接着源主机发送第二个探测报文,TTL增1为2,到达第一个路由器TTL减1为1并转发探测包到第二个路由器,这时TTL减1为0,丢掉这个探测包并向源主机发回ICMP时间超过报文,源主机就获得了第二个路由器的IP地址;以此类推,直到探测报文到达traceroute的目的地,这时源主机就获得了到目的地的每一跳路由的IP地址。
    在这里插入图片描述

1. 4 ICMP协议原理?

在这里插入图片描述

  • ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
  • 我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

1. 5 ICMP协议报文格式?

在这里插入图片描述

在这里插入图片描述

  • ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。
字段说明
类型占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
代码占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
校验和这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错(其计算方法与在我们介绍IP报头中的校验和计算方法是一样的)
标识占两字节,用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0 。

1. 6 ICMP协议报文的种类:

  • ICMP报文的中来有两种:即ICMP差错报告报文ICMP询问报文

1.6.1 ICMP差错报文:

  • ICMP差错报文:即端口不可达报文。它是ICMP目的不可达报文的一种,这种差错报文是立刻返回的。

UDP的规则之一是,如果收到一份UDP数据报,而目的端口与某个正在使用的进程不符,那么UDP返回一个ICMP不可达报文。(ICMP报文是在主机之间进行交换的,不是目的端口号。UDP是从一个端口号发给另一个端口号。)

在这里插入图片描述
>

  • ICMP差错报文的产生
    ICMP的一个规则是,ICMP差错报文,必须包括生产该差错报文的数据报IP首部,还必须至少包括IP首部后面的前8个字节。
    IP数据报=IP首部+ICMP报文。
    IP数据报=IP首部+ICMP首部+ICMP报文数据部分。
    IP数据报=IP首部+ICMP首部+产生差错的数据报IP首部+原始IP数据报中数据的前8个字节。
  • 常见的ICMP差错报文格式有4种
类型的值ICMP 报文类型描述
3终点不可达当路由器或者主机不能交付数据时就向源主机发送终点不可达报文
11时间超过当路由器收到的TTL为0或者终点不能再预定的时间内收到一个数据报的全部数据时,丢弃该数据包外,还要向源点发送时间超过报文
12参数问题当路由器或者目的主机收到的数据报的首部中有的字段值不正确时就丢弃该数据报,并向源点发送数据报文
5改变路由(重定向)路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

不再发送ICMP差错报告报文的几种情况
(1)对于ICMP差错报告报文,不再发送ICMP差错报告报文
(2)对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文 。
(3)对具有多播地址的数据报,都不发送ICMP差错报告报文
(4)对具有特殊地址(如127.0.0.0或0.0.0.0.0)的数据报,不发送ICMP差错报告报文。

不产生ICMP差错报文的情况
(1)ICMP差错报文(但是,ICMP查询报文可能会产生)
(2)目的地址是广播地址或多播地址的IP数据报。
(3)作为链路层广播的数据报。
(4)不是IP分片的第一片。
(5)源地址不是单个主机的数据报。 目的是为了不产生广播风暴。

1.6.2 ICMP询问报文:

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

我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。

  • 第二种时间戳请求和回答:ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。时间戳请求和回答可用于时钟同步和时间测量(时间从1990年1月1日算起到当前时刻一共有多少秒)

时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

1. 7 实验演示:

1.7.1 实验演示ICMP协议:

实验设备:eNSP 、Wireshark
实验步骤

  1. eNSP上搭建如下实验环境:PC 、AR2220
  2. 配置PC端上的IP地址与子网掩码、路由端的IP地址
  3. 在PC端上ping 192.168.1.2 验证实验环境是否搭建成功。
  4. 在PC端进行数据抓包:ping 192.168.1.2 查看数据包情况
  5. 根据抓取到的数据包情况来进行分析:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.7.2 实现链路追踪:tracert命令

在这里插入图片描述

2. 其他应用层协议 :

在这里插入图片描述


各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。

每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
在这里插入图片描述

把握现在 ,展望未来 ,加油 !


由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小黄

ღ给个赞 是对小黄最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值