数通面试 : ICMP

今天是数通面试第四篇,我尝试开始使用md的文件来编写我的博客,今天我们来详细的聊一聊ICMP,其实大部分人觉得ICMP就是一个ping命令,没什么细究的,但其实内容十分的丰富就比如说在windows环境下,ping出错有好多回显,今天来我们用抓包的方式深入了解一下ICMP

  • 来自1.1.1.1的回复:无法访问目标主机?

  • 来自2.2.2.2的回复:无法访问目标网络?

  • 来自1.1.1.1的回复:无法访问目标端口?

  • 请求超时?

  • 传输超时?

  • PING:传输故障。常见故障?

    这些常见的错误类型你都知晓原因吗,他们之间的区别是什么呢?

    (这些都是基于windows场景下,linux和交换机比如华为的vrp系统的ping命令没有这么细节的报错,并且很多设备配置了不回复ICMP错误)

ICMP概述

首先我们来看一下ICMP的位置,他其实是基于IP的,被封装在IP数据包当中

数通面试 : ICMP_第1张图片

所以通常来讲,我们认为ICMP是一个网络层协议,在IP报头的协议号字段中数值为1,这个协议号通常是用来标识上层协议的,在ip层标识了上层协议icmp,但icmp还是一个网络层协议,这是很容易引起混淆的事情,很多人会把icmp当做4层来看待,这其实是错误的,ICMP消息是作为IP数据报的数据部分发送的,这意味着它们被IP层封装和处理。尽管ICMP用“协议”字段来指示,但它并不是一个传输层协议,因为它不提供两个端系统之间的端到端通信。相反,它用于IP层的错误处理和诊断信息。

数通面试 : ICMP_第2张图片

总结一下:ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现

ICMP报文以及类型代码

数通面试 : ICMP_第3张图片

ICMP报文其实很简单我们主要关心的就是Type和Code ,他俩共同组合成各种错误信息 ,

数通面试 : ICMP_第4张图片

这些使我们常见的几个组合,实际上有很多这里不一一列举(实际面试场景中可以会问到,有几种icmp类型,这里tyep+code组合就是一种,比如00类型80类型)。

其中最常见的就是我们的80和00,一个为请求一个为回复,说白了这俩在一起就是ping通了

在这里插入图片描述
数通面试 : ICMP_第5张图片

这说明我们的数据在ICMP层面是可达的,这是我们大家最常用到的ping,但是要注意能ping通就等于网络是通的吗?不一定,能ping通单纯是icmp协议可达不代表其他网络层面可达。我们下面会重点讨论Type为3的错误类型,type等于11的传输超时,以及ICMP重定向type为5的类型

Type11:超时

我们都知道IP协议中有一个TTL字段,来声明数据包在网络中传递的最大跳数。每经过一个路由器,数据包的TTL值就减少1。当TTL值减少到0时,该路由器会丢弃该数据包
数通面试 : ICMP_第6张图片

tracert我们常用的路由跟踪技术就是利用了这个原理ICMP结合TTL,TTL递增1->2->3->4…这样就可以精准的获取每一跳的信息,但是你们日常或者工作过程中去尝试跟踪一个网址,比如百度或者京东,会发现经常再中途会显示超时***这又是为什么呢


数通面试 : ICMP_第7张图片

其实很简单,就是骨干网设备配置了不回复这个icmp,这种情况下就是传输超时了,具体到设备的命令就是icmp ttl-exceeded drop 来开启这个功能,丢弃ttl=1的报文。

在上面提到了tracert的本质就是ttl递增对于每一台设备来说收到的报文ttl都是1,所以直接丢弃不回复,我们在cmd中看到的现象就是***,同时他也不影响后续报文的转发,因为你需要访问这台设备后面的设备时,此时ttl=2 是不会被丢弃而是正常转发下一跳,同时ttl减1,下一台设备收到时候ttl又等于1了。

总结一下:如果在cmd中看到传输超时的字样一般来说就是TTL为0这种情况 , ICMP的超时错误通告报文的类型字段的值是11,它的code有两种一个是0代表它是TTL超时,另一个是1,代表的是分片重组超时

数通面试 : ICMP_第8张图片
在这里插入图片描述

Type3:不可达

首先我们明确一个概念 这4个不可达是ICMP层面的组合描述,明确收到设备给我们的回复为30/31/32/33等等,(比如领导让你去做一件事对他来说你无法完成事情有2种情况:

一种就是你明确告知了因为什么失败 这就是有回复Type3消息,另外一种就是领导把任务给你,你直接没反应了石沉大海,这种情况就是请求超时,发送80没有收到任何消息,现网很多骨干网运营商设备都是第二种情况,天命打工人对领导爱答不理,但是领导肯定是希望就算失败了你也得告诉我为什么,当然ICMP也一样)

所以说tyep的信息这和我们在cmd(windows)上看到的信息内容并不完全一致!(可以理解为收到的ICMP的信息类型和CMD回显内容不相关)

数通面试 : ICMP_第9张图片

我尝试ping一个不再存在的IP,显示无法访问目标主机,但这不是收到了ICMP31主机不可达类型报文,他甚至都没有发送ICMP报文!我后续会详细说明这个现象。

数通面试 : ICMP_第10张图片

我们继续来聊3类不可达信息,比如说网络不可达30,这种回复通常是中间设备回复的,比如说abc3台设备,a访问c需要经过b,但是b没有c的路由,当a的数据发送到b的时候,b就会回复一个30给a,除了网络,另外主机不可达,端口不可达 都是类似场景,有设备具体给出了回应。

当然这个并不是所有设备都这么好心会告诉你,大部分设备当他发现没有路由时就直接丢包了,此时我们收不到任何回复,这就是请求超时。

所以我们得出一个结论,收到的任何的错误类型都是需要有这个设备存在并回复给我们的,用于告知其遇到了哪些问题的 。那我为什么说cmd的无法访问目标主机其实压根就没有icmp参与呢?


数通面试 : ICMP_第11张图片

我们来看一下这个现象,windows我本地配置的ipv4地址为3.44

当我去访问2个不存在的地址时为什么cmd回显结果都不一样?因为是2个不存在的地址所以按理说都不会收到任何的回复,2个都是请求超时才是正确的。

因为3.44本机去访问3.99 , 他俩是同网段地址有源mac 源ip目标ip ,少了目标mac ,此时就会触发arp机制,去询问3.99的mac, 但是这个ip是不存在的 压根就没有这个设备,也就是说ICMP压根就没有发送出去,在二层数据链路层时就遇到了问题(缺失目标MAC无法二层封装

数通面试 : ICMP_第12张图片

数通面试 : ICMP_第13张图片

这就是CMD回显, 来自xxxx的回复无法访问目标主机的细节 可以看到压根就没有ICMP的报文


我们再来看看4.99是什么情况,和3.99不同,192.168.4/24明显和3网段不在一起。那么此时就不需要arp了吗? 需要的,3.99此时直接去询问网关的MAC(一般来说都有记录),把包扔给网关,所以说跨网段去ping一个不存在的人,icmp的包是可以发送出去的,这就是为什么一个是请求超时一个是无法访问目标主机的本质原因

source 3.44 --> dest 4.99 类型一定是80,但是没有人回应00 ,CMD回显就是请求超时

总结一下: 传统的ICMP不可达报文都是设备中间主动回复,有回包。但是windows场景下无法访问目标主机一般就是同网段icmp但是没有arp的情况,请求超时就是ping其他网段但是没有收到回复,这个没有收到回复有很多很多很多种的原因,我下面详细分析一下。

在这里插入图片描述

请求超时的可能性

大致类型分三种情况 1.去的路上丢了 2.收到了遇到某些问题而且不想回复你 3.回来的路上丢了

说白了就是只有请求没有回复,但是要注意这个请求超时和不可达完全是2种情况。不可达有回复告知你去不了的,且有个隐藏条件,那就是有路由这个路由指的是windows的路由表

那你可能要说了,windows路由表不都是一条默认路由出去的吗0.0.0.0 /0 什么情况下都会有路由表匹配的呀,但其实不一定,如果你把网卡卸载了或者底层什么原因 网卡挂了 忘记配置网关了(windows网关=默认路由),这种情况下CMD回显就是文章开头的PING:传输故障。常见故障(还有一种情况你ping 的地址就是有问题的比如e类地址,或者0.0.0.0)

数通面试 : ICMP_第14张图片

我们继续来讨论请求超时可能性

  • 黑洞路由 典型的 0.0.0.0 0 NULL 匹配这一条的全部被丢了
  • ACL 直接给你ACL关小黑屋了
  • 中间设备没有路由,不管是去还是回都一样,丢包场景下,如果回复了内容则不为请求超时
  • 主机不在线 ,就是我上面演示的例子 压根没这个设备或者关机了(注意同网段ping并无ICMP包)
  • 网络拥塞 ping谷歌 , 他太忙了就不太想理你

数通面试 : ICMP_第15张图片

  • 屏蔽,且不告诉你,比如大部分防火墙,类似一个渣男默默接收从不回复

数通面试 : ICMP_第16张图片

这里提一嘴windwos的防火墙,为什么要把icmp的内容取名字叫文件和打印机共享???

Type5:ICMP重定向

5类型一共有2种分别是针对网络重定向和针对主机重定向

数通面试 : ICMP_第17张图片

数通面试 : ICMP_第18张图片

让我们来分析一下这个拓扑的关键,首先pc1的网关一定是1.254 ,1.1访问2.2一定是需要转发给网关去处理的。此时R1发现一个问题我是这个接口收到的,又要从这个接口发出去,这就是设备如何发现非最优路径的背景:同一个端口 同收同发 ,此时他就会给pc1发送一个51类型的icmp重定向报文

数通面试 : ICMP_第19张图片

明确告知PC1 你直接去找1.253好了 我也是去访问这个地址的,但pc1改不改呢?那得看设备,脾气倔的pc都不会鸟你


再来简单看一下50和51的区别

  1. 对网络重定向(Type 5, Code 0):当路由器发现主机发送的数据包本可以通过更优的路径到达同一个网络时,它就会发送一个网络重定向消息。这个消息告诉发送主机,为了到达特定的网络,它应该修改路由表以使用不同的路由器或网关。
  2. 对主机重定向(Type 5, Code 1):这是一个更具体的情况。如果路由器发现发送的数据包的目标主机可以通过一个更直接的路径到达,它会发送一个主机重定向消息。这个消息告诉发送主机,对于特定的目标主机,它应该修改路由表来使用另一个路由器或网关。

这两种消息的区别在于它们的应用范围。网络重定向适用于发送到整个网络的所有数据包,而主机重定向只适用于发送到单个主机的数据包。在实际中,现代网络很少使用ICMP重定向消息,因为现代路由协议(如OSPF或BGP)能够动态地管理路由,并且在大多数情况下,主机配置为默认发送所有外部流量到一个默认网关,而不是根据目的地网络或主机来变化其路由。

面试题

  1. ICMP的基本概念: 请解释ICMP的功能是什么?它在网络中扮演着什么角色?
  2. ICMP报文类型: ICMP有哪些主要的报文类型?请至少描述三种类型的用途。
  3. ICMP与网络故障: ICMP是如何帮助诊断网络连接问题的?
  4. ICMP与安全性: ICMP是否可能被用于网络攻击?如果可以,举例说明。
  5. ICMP与Ping工具: 描述Ping工具如何使用ICMP来测试网络连接。
  6. ICMP与Traceroute工具: Traceroute工具是如何利用ICMP报文来确定数据包到达目的地的路径的?
  7. ICMP报文结构: 描述ICMP报文的基本结构,它包括哪些字段?
  8. ICMP与IP协议: ICMP是如何与IP协议协同工作的?它们之间有什么关系?
  9. ICMP错误报告机制: 当网络中发生错误时,ICMP是如何报告的?
  10. ICMP的限制与缺点: ICMP有哪些限制?在现代网络中,有哪些协议可能取代了ICMP的某些功能?

你可能感兴趣的:(数通面试,面试,网络,云计算)