<返回更多

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

2022-03-23    网络小弗
加入收藏
24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

ICMP

IP 是尽力传输的网络协议,提供的数据传输服务是不可靠的、无连接的,不能保证数据包能成功到达目的地。那么问题来了:如何确定数据包成功到达目的地?

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

这需要一个网络层协议,提供错误检测功能和报告机制功能,于是出现了 ICMP(互联网控制消息协议)。ICMP 的主要功能是,确认 IP 包是否成功送达目的地址通知发送过程中 IP 包被丢弃的原因。有了这些功能,就可以检查网络是否正常、网络配置是否正确、设备是否异常等信息,方便进行网络问题诊断

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

举个栗子:如果在传输过程中,发生了某个错误,设备便会向源设备返回一条 ICMP 消息,告诉它发生的错误类型。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

ICMP 消息是通过 IP 进行传输,但它的目的并不是让 IP 成为一种可靠的协议,而是对传输中发生的问题进行反馈。ICMP 消息的传输同样得不到可靠性保证,也有可能在传输过程中丢失。因此 ICMP 不是传输层的补充,应该把它当做网络层协议

ICMP 消息封装

ICMP 消息使用 IP 来封装,封装格式如下图。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

其中 type(类型)字段表示 ICMP 消息的类型,code(代码)字段表示 ICMP 消息的具体含义。例如:type 值为 3 表示目的不可达消息( Destination Unreachable Message ),若 code 值为 0 表示目的网络不可达(.NETwork Unreachable )。常见的 ICMP 消息类型如下图。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

从功能上,ICMP 的消息可分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

常见的 ICMP 消息类型

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

ICMP 的应用

ICMP 被广泛应用于网络测试,最常用的 ping 和 tracert 网络测试工具,都是使用 ICMP 协议实现的。

ping

ping 是 ICMP 最著名的一个应用,通过 ping 可以测试网络的可达性,即网络上的报文能否成功到达目的地。使用 ping 命令时,源设备向目的设备发送 Echo request 消息,目的地址是目的设备的 IP 地址。目的设备收到 Echo request 消息后,向源设备回应一个 Echo reply 消息,可知目的设备是可达的。也可以通过 ping 命令来判断目标主机是否启用。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

如果中间某个路由器没有到达目的网络的路由,便会向源设备回应一个 Destination Unreachable 消息,告知目的设备不可达。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

如果源主机在一定时间内无法收到回应报文,就认为目的设备不可达,并显示超时。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

需要注意的是 ping 过程是双向的消息通信,只有双向都成功传输时,才能说明通信是正常的。另外主机也可能因为防火墙拦截,导致 ping 不通。

tracert

ping 工具只能测试目的设备的连通性,但是看不到数据包的传输路径。所以在网络不通的情况下,无法知道网络问题发生在哪个位置。tracert 工具可以查看数据包的整条传输路径,包括途中经过的中间设备

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

IP 头部的 TTL 字段是为避免数据包循环转发而设计的。每经过一个路由器,数据包头中的 TTL 值减 1 。如果 TTL 值为 0 则丢弃报文,并向源设备回应一个 Time Exceeded 消息,告知错误类型。tracert 就是基于 TTL 字段和 ICMP 协议实现的。在 windows 中命令是 tracert ,在 Unix 、macOS 中命令是 traceroute 。

使用 tracert 命令时,源设备的 tracert 逐跳发送数据包,并等待每一个响应报文。发送第一个数据包时,TTL 值设为 1 。第一个路由器收到数据包后 TTL 值减 1 ,随即丢弃数据包,并返回一个 Time Exceeded 消息。源设备的 tracert 收到响应报文后,取出源 IP 地址,即路径上的第一个路由器地址。然后 tracert 发送一个 TTL 值为 2 的数据包。第一个路由器将 TTL 值减 1 ,并转发数据包。第二个路由器再将 TTL 值减 1 ,丢弃数据包并返回一个 Time Exceeded 消息。tracert 收到响应报文后,取出源 IP 地址,即路径上的第二个路由器地址。类似步骤,tracert 逐跳获得每一个路由器的地址,并探测到目的设备的可达性。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

tracert 过程也是双向的消息通信,只有双向都成功传输时,才能正确探测路径。另外主机安装了防火墙,也可能造成路径探测失败。

网络实战

ping

在 Windows 电脑上使用 ping 命令,并查看返回信息。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

同步抓包进行验证。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

还可以直接使用 ping 命令,查看 ping 命令的使用方法

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

tracert

在 Windows 电脑上使用 tracert 命令,并查看返回信息。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

同步抓包进行验证。

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

也可以直接使用 tracert 命令,查看 tracert 命令的使用方法

24 张图搞定 ICMP:最常用的网络命令 ping 和 tracert

 

饮水思源:

TCP/IP详解 卷1:协议 - Kevin R.Fall

网络基础 - 田果

图解TCP/IP - 竹下隆史

路由交换技术 - 杭州华三通信技术有限公司

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>