0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Linux爱好者 来源:Linux爱好者 2023-08-01 15:08 次阅读

462e0dc6-301f-11ee-9e74-dac502259ad0.png

ICMP

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

463f5770-301f-11ee-9e74-dac502259ad0.png

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

4657d890-301f-11ee-9e74-dac502259ad0.png

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

46672192-301f-11ee-9e74-dac502259ad0.png

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

ICMP 消息封装

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

468d0042-301f-11ee-9e74-dac502259ad0.png

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

46a02014-301f-11ee-9e74-dac502259ad0.png

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

46cdd4dc-301f-11ee-9e74-dac502259ad0.png

常见的 ICMP 消息类型

回送请求消息( Echo Request ):是由源设备(主机或路由器等)向一个指定的目的设备发出的请求。这种消息用来测试目的地是否可达。

回送响应消息( Echo Reply ):对 Echo Request 的响应。目的设备发送 Echo Reply 来响应收到的 Echo Request 。最常用的 ping 命令就是使用 Echo Request 和 Echo Reply 来实现的。

46ddf59c-301f-11ee-9e74-dac502259ad0.png

目的不可达( Destination Unreachable ):路由器无法将 IP 包发送给目的地址时,会给源设备返回一个 Destination Unreachable 消息,并在消息中显示不可达的具体原因。

46fdb51c-301f-11ee-9e74-dac502259ad0.png

实际情况下,经常会遇到的错误代码是 1 ,表示主机不可达,它是指路由表中没有目的设备的信息,或目的设备没有连接到网络。

4715aaa0-301f-11ee-9e74-dac502259ad0.png

参数问题( Parameter Problem ):路由器发现 IP 包头出现错误或非法值后,向源设备发送一个 Parameter Problem 消息。这个消息包含有问题的 IP 头,或错误字段的提示信息。

472d6fdc-301f-11ee-9e74-dac502259ad0.png

重定向( Redirect ):如果路由器发现一条更优的路径发送数据,那么它就会返回一个 Redirect 消息给主机。这个消息包含了最合适的路由信息和源数据。

实际情况下,这种 Redirect 消息会引发路由问题,所以不进行这种设置。比如:路由器的路由表不准确时,ICMP 有可能就无法正常工作。

4743fbee-301f-11ee-9e74-dac502259ad0.png

超时( Time Exceeded ):IP 包中有一个字段是 TTL(生存周期),它的值每经过一次路由器就减 1 ,直到减到 0 时 IP 包会被丢弃。这时,路由器会发送一个 Time Exceeded 消息给源设备,并通知 IP 包已被丢弃。

设置 TTL 的主要目的,是当路由发生环路时,避免 IP 包无休止的在网络上转发。还可以用 TTL 控制 IP 包的可达范围,比如设置一个较小的 TTL 值。

475bff0a-301f-11ee-9e74-dac502259ad0.png

时间戳请求/时间戳响应( Timestamp Request / Timestamp Reply ):时间戳可以记录 ICMP 消息一次往返所需的时间。源设备发送一个带有发送时间的 Timestamp Request 消息,目的设备收到后,发送一个带有原设备发送时间、目的设备接收时间以及目的设备发送时间的 Timestamp Reply 消息。源设备收到 Timestamp Reply 时,并同时记录到达时间。这些时间戳可以估计网络上的传输时间。

476fddd6-301f-11ee-9e74-dac502259ad0.png

ICMP 的应用

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

ping

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

4786602e-301f-11ee-9e74-dac502259ad0.png

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

479a7b4a-301f-11ee-9e74-dac502259ad0.png

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

47c038f8-301f-11ee-9e74-dac502259ad0.png

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

tracert

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

47cadba0-301f-11ee-9e74-dac502259ad0.png

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 逐跳获得每一个路由器的地址,并探测到目的设备的可达性。

47dd1cf2-301f-11ee-9e74-dac502259ad0.png

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

网络实战

ping

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

48026174-301f-11ee-9e74-dac502259ad0.png

同步抓包进行验证。

4813fc0e-301f-11ee-9e74-dac502259ad0.png

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

48478eca-301f-11ee-9e74-dac502259ad0.png

tracert

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

48613de8-301f-11ee-9e74-dac502259ad0.png

同步抓包进行验证。

4871fa2a-301f-11ee-9e74-dac502259ad0.png

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

48ed26c8-301f-11ee-9e74-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络协议
    +关注

    关注

    3

    文章

    262

    浏览量

    21493
  • ICMP
    +关注

    关注

    0

    文章

    51

    浏览量

    14903
  • Ping
    +关注

    关注

    0

    文章

    69

    浏览量

    15928

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

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在家里可以常用网络测试命令

           在家里可以常用网络测试命令先按开始-运行 然后输入cmd进入命令提示然后输入以下
    发表于 06-02 18:23

    [原创]网管一定要知道----网络管理中的常用命令

    网管一定要知道----网络管理中的常用命令1.最基本,最常用的,测试物理网络ping 192.168.0.8 -t ,参数-t是等待用户
    发表于 09-07 12:09

    四个ping命令搞定网络故障

    四个ping命令搞定网络故障如果你的电脑不能上网或者突然不能上网了怎么办?请专业人员来维修还是自己瞎急一通呢,下面给大家介绍如何准确地判断电脑不能上网问题出在哪里?又如何能快捷地解决这
    发表于 04-13 14:24

    必须学的几个网络测试命令

    必须学的几个网络测试命令ping ping是测试网络联接状况以及信息包发送和接收状况非常有用的工具,是
    发表于 02-25 15:09

    【我是电子发烧友】常用网络命令汇总

    解决 NetBIOS 名称问题7. 使用 netstat 用于显示与IP、 TCP、 UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。8. 使用 tracert 跟踪
    发表于 06-15 22:48

    巧用Ping和Traceroute命令排除网络故障

    在分析Ping 和Traceroute 命令工作原理和影响因素的基础上,详细介绍了使用Ping 和Traceroute 命令检查网络连接性、
    发表于 08-11 08:25 35次下载

    icmpping的区别

    ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送ic
    发表于 11-03 09:41 6w次阅读
    <b class='flag-5'>icmp</b>和<b class='flag-5'>ping</b>的区别

    ping命令的使用方法及功能

    ping是Windows、Unix和Linux系统下的一个命令ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping命令
    发表于 11-23 15:22 7.2w次阅读
    <b class='flag-5'>ping</b><b class='flag-5'>命令</b>的使用方法及功能

    ICMP协议Ping命令的应用是什么

    Ping命令利用ICMP回射请求报文和回射应答报文来测试目标系统是否可达。ICMP回射请求和ICMP回射应答报文是配合工作的。当源主机向目标
    发表于 12-08 15:22 7821次阅读

    ping命令的使用大全(Windows下ping命令的使用)

    ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,下面就给大家讲一些ping命令的运用。
    的头像 发表于 02-24 10:29 1.4w次阅读

    ping命令的作用和原理是什么?

    在测试和部署网络通信应用时,我们经常会遇到网络不通的问题。一般都会想到ping一下。那么ping命令的作用和原理到底是什么呢?
    的头像 发表于 03-18 17:21 9507次阅读

    双绞线的两种接法,网络测试最常用PING命令

    今天和大家一起复习常用网络基础知识,包括双绞线;光模块;交换机;还有网络测试最常用PING命令
    的头像 发表于 03-21 10:39 1.1w次阅读

    如何利用Python实现快速Ping一个IP网段地址?

    ping 命令是我们检查网络最常用命令,作为网络人员,基本上每天都会用到,可以很好地帮助我们
    的头像 发表于 06-29 15:59 3673次阅读
    如何利用Python实现快速<b class='flag-5'>Ping</b>一个IP网段地址?

    你知道ping命令是如何工作的吗?

    我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?
    的头像 发表于 05-31 11:40 1014次阅读
    你知道<b class='flag-5'>ping</b><b class='flag-5'>命令</b>是如何工作的吗?

    Ping命令的基本用法

    当谈到网络故障排除工具时,Ping(Packet Internet Groper)是其中最常用和最基本的之一。
    的头像 发表于 10-17 13:58 1778次阅读