CCNA – Part7:网络层 – ICMP 应该是你最熟悉的协议了

ICMP 协议

在之前网络层的先容中,我们知道 IP 提供一种无毗邻的、尽力而为的服务。这就意味着无法举行流量控制与差错控制。因此在 IP 数据报的传输历程中,泛起种种的错误是在所难免的,为了通知源主机 IP 数据报传输历程中遇到的问题,因此设计了因特网控制报文协议(ICMP)。

虽然说 ICMP 协议将 IP 协议封装在内部,以是大多数人将 ICMP 视为传输层的协议,但实际上 ICMP 是 IP 协议的主要组成部门,以是将其放在网络层更为合适。

ICMP 的报文一样平常有两种,查询报文和查询报文

查询报文:例如我们在使用 ping 下令,子网掩码查询,时间戳查询等情形时,都市发送查询报文。

差错报文:而差错报文是在当对应的路由器或者终端设备收到查询报文后,发生了一系列问题。把泛起的问题,回复给发起者的报文就是差错报文。

但考虑到整体网络资源的占用上,在如下情形下,是不会发生差错报文的:

  1. 差错报文不会发生差错报文 – 防止 ICMP 无限发生和传送差错报文
  2. 目的地址是广播或多播的 IP 数据包
  3. 链路层广播的数据包
  4. 不是 IP 分片的第一片 – IP 是尽力而为,自然不需要可靠性
  5. 源地址不是某个主机的数据包

ICMP 类型

由于 ICMP 自己就是为了填补 IP 协议不可靠的特征,起到排错目的,以是它的 Header 并不庞大。

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

正如图中所示的,对于 ICMP Header 来说,对照主要的就是 Type (8 bit)和 Code (8 bit) 字段,用来示意种种错误的情形。

其中完整的先容可以参考这篇 wiki,下面就先容上常用的部门。

Type code Description
0 0 Echo 回复报文,如 Ping 下令的回复报文。
3 0 网络不可达
3 1 主机不可达
3 3 协议不可达
3 4 端口不可达
3 6 网络不知道
3 7 主机不知道
8 0 Echo 请求报文,如 Ping 下令的请求报文。
13 0 时间戳请求报文

下面我们抓个包,来看一下。

Ping 下令测试网络连通性

这里在主机上 Ping 下百度,通过 Wireshark 抓到的数据包如下:

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

先看一下 Echo Request 包,对应 Type 为8,Code 为0:

xss小游戏源码分析

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

Echo Reply 包 – Type 为 0,Code 为 0:

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

Traceroute 测试网络连通性

在 IP 协议中,为了防止泛起环路而设置了 TTL 字段。该字段也在 traceroute 中起到了很大的作用,通过设置 TTL 的数值,来获取数据报的通报历程。

TTL:当 IP 数据包举行传送时,每经由一个路由器,TTL 指就会减一,当 TTL = 0 时,该 IP 数据报会被抛弃。

下面就来了解下 Traceroute 的通讯历程,用到的拓扑如下:
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

当主机收到目的主机的 IP 后,会给目的主机发送一个 TTL = 1 的 UDP 数据包。
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

而经由第一个路由器后,TTL – 1 酿成 0.这时路由器会把数据报抛弃,然后把抛弃的数据包的 IP 头部封装起来,回复主机一个差错报文。如下:
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

这个历程主机会发三次,也就是说会发生 3 个 TTL =1 的 UDP,如下
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

接着会在再次发送 3 个 TTL = 2 的 UDP 报文,如下
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

第二个路由器,会再次向主机发送一个差错报文,如下:
CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

这里需要注重的:由于第二台路由器已经相当于是目的地,以是将数据包拆到传输层,但由于传输层上的端口标识了应用层的应用,而在该路由器上不在该应用,进而回复了端口不可达的报文。

由于图中只经由 2 个路由器,以是停止发送到 TTL = 2

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

而且我们可以从 TTL = 2 的回复差错报文看出,只有两个差错报文。其中有个差错报文泛起了丢失,而且没有给主机回复差错报文丢失的情形

原创文章,作者:dddof新闻网,如若转载,请注明出处:https://www.dddof.com/archives/29912.html