首页
登录 | 注册

网络协议之ICMP

我相信,ping是我们平时经常用到的一个命令。

那么我们 ping的时候,网络中用到的协议是什么呢?

ICMP协议:internet control message protocol——互联网控制协议。

当网络包在网络传输的时候,如果遇到失败或者错误的时候,会怎么样?至少会传出消息来,说明前方的情况。这样才可以进行调整传输。这就是所谓“控制”。

TCMP报文是封装在IP包的。因为传输的时候需要源地址、目标IP地址。

网络协议之ICMP

icmp报文的类型比较多。类型的字节为1个字节。一般情况下,主动请求的类型为8;主动请求的应答为0;不同的类型有不同的代码!

根据类型与代码的不同有不同的报文。

一、查询报文类型:

1.1 我们的ping的ICMP报文就是一种主动请求,主动应答的查询报文类型。

不过ping的报文比原始的ICMP报文多了两个字节:一个是标识符:这个报文具体的作用是什么?另一个是编号:发出去几个包,回来几个包。对于ping主动请求的包进行网络抓包,我们称之为“icmp echo request”,对于主动请求的回复的包称之为“icmp echo reply”;除了以上信息外,ping的包还可以计算放送时间与回复时间的时间差,来告知路程的距离。

网络协议之ICMP

ICMP报文里面包含请求类型8,以及发送时间,以等待回答包来计算往返时间

发送给IP层,IP层加上源IP于目标IP,以及控制信息

发送给MAC层,如果本地有对方机器的MAC缓存,则直接将MAC地址作为目标MAC,否则通过ARP请求获知对方的MAC地址,源MAC作为MAC头,将IP层的信息封装到MAC包,加上控制信息

目标机器收到网络包后,在MAC拆下MAC头,将其中的目标MAC地址与自己的MAC地址进行对比,如果OK,则将剩下的IP包的信息发送给IP层,IP层将IP头拆下来查看目标IP是否自己IP,如果是则将剩下信息交给ICMP协议,ICMP然后进行应答0,并且会加上其他数据信息,发送包的顺序号等,封装在IP层,封装在MAC层,进行回复。

在规定的时间内,如果源机器收到回复,则说明目标主机可达,否则不可达。这个时候会将返回的当前时刻减去发送时间,即ICMP协议的延迟时间。

在网络不通的情况下,除了ping目标机器的时候,还应该有一个清晰的网络拓扑图。这样才可以更加清楚的判断出到底是哪个设备或者关卡出了问题。这样的话,出了问题,我们可以从源机器逐个去ping中间具体的设备,以查看具体是哪个环节出了问题。比如我们可以使用tcpdump -i  eth0 icmp 可以查看包有没有到达目标点,以及回复的包到了那个点。

二、差错报文类型:走在路上,发生了很多种意想不到的事情。

2.1 终点不可达,具体的原因在在代码体现为:

     2.1.1 网络不可达0——找不到路

     2.1.2 主机不可达1——找到路了,没找到人

     2.1.3 协议不可达2——找到路了,也找到人了,暗号不对

     2.1.4 端口不可达3——找到路了,也找到人了,暗号对上了,只是二者的意图不一致。人家要水,我给人家送的是馒头

     2.1.5 需要分片,但是不允许分片4——解答题目,有多种方法,A方法行不通,但是不允许使用其他方法解决。

2.2 源站抑制:发送的报文的数量过多

2.3 网络超时:超过网络包的生存时间还是没有把包发送到目的地

2.4 路由重定向:下次优化网络包的发送路径。

差错报文的结构相对复杂,除了IP头、ICMP的前8个字节相同外,后面紧跟的是出错报文的IP头与与IP包的前8个字节。

我们可以通过ICMP的前8个字节查看报文是如何失败的,具体的报文信息可以通过后面查看(IP头及IP的前8个字节)。

traceroute的使用,就是差错报文类型的使用

第一个作用:通过故意设置TTL,来追踪去往目的地时的路由器的距离。开始它会将TTL设置成1,当遇到第一个路由器的时候,会返回一个ICMP包,类型是网络超时。然后将TTL设置成2,这个时候遇到第二个路由器又会返回,这个时候就知道第二个路由器的距离了。如此反复进行,通过traceroute就可以知道中间的所有的路由器距离了。

不过有时候路由器压根不返回ICMP包,这就是traceroute一个公网的ip地址的时候,看不到中间的路由器。

第二个作用:traceroute会发送一个UDP报文,故意将端口设置成一个不存在的端口,这个时候报文到达目标机器后,会返回一个“端口不可达”的ICMP报文。如果数据包没有返回,可能是由于网络超时。

第三个作用:故意设置不分片。初始值的分组的长度为MTU,如果中间遇到比MTU小的关卡,则会返回一个“需要分片,但设置不分片”的差错类型报文。然后对其进行分组,直至到达目标机器。

我们可以在windows通过tracert命令来查看中间的路由器。

tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [180.97.33.107] 的路由:

  1     8 ms     1 ms     7 ms  192.168.1.1
  2    43 ms    15 ms     4 ms  10.0.0.1
  3    40 ms    11 ms     *     222.176.30.241
  4    19 ms     9 ms    11 ms  222.176.5.185
  5    50 ms    51 ms    54 ms  202.97.28.105
  6    36 ms    63 ms    35 ms  202.102.69.6
  7     *        *        *     请求超时。
  8   100 ms  1068 ms    42 ms  180.97.32.2
  9     *        *        *     请求超时。
 10    33 ms    29 ms    34 ms  180.97.33.107

跟踪完成。

 

 

 

 



2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.009 s.
京ICP备10005923号