前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你知道 ping 命令是如何工作的吗?

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

作者头像
IT咸鱼
发布于 2025-05-20 10:33:23
发布于 2025-05-20 10:33:23
16300
代码可运行
举报
运行总次数:0
代码可运行

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

我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?ping命令是基于ICMP协议工作的。

一、介绍ICMP协议

因特网控制报文协议ICMP(Internet Control Message Protocol)是一个「差错报告机制」 ,其主要用在IP机器与路由器之间传递控制信息,其一般用于报告主机是否可达、路由是否可用。

二、为什么需要ICMP?

在网络数据包的传输过程中,经常会遇到各种各样的问题,IP协议提供Best-Effort(尽力而为)的服务,尽力而为的意思是当网络发生拥塞的时候,会立刻丢弃网络数据包,一直到网络拥塞现象减轻时。所以经常有些数据包中途被丢弃,可能还有其他更多的问题,所以需要网络数据包在出现问题时,机器向上层协议报告异常,以便进行流量控制和差错控制,使用ICMP就可以实现这一功能。

三、ICMP的格式

ICMP的格式

上图是ICMP的格式,IP数据报由IP头和ICMP报文组成。ICMP报文由8位的类型、8位的代码、16位的校验和ICMP都数据部分组成。

ICMP的数据部分根据类型和代码不同而不同,如果是请求与响应的数据包,那么数据部分由16位的标识符、16位的序号以及数据组成。如果是差错报文,那么数据部分由两个16位的unused部分和IP头、8字节的正文组成。

ICMP报文分类大家可以看华为的文档,我这里不在叙述:《什么是ICMP?ICMP如何工作?》https://info.support.huawei.com/info-finder/encyclopedia/zh/ICMP.html

四、查询报文

我们的ping命令就是查询报文,如果一切顺利,我们发送8.echo请求,然后会收到0.echo响应,这就证明两机器之间是连通的。

但是这个数据包比原生的ICMP,多了两个字段——标识符、序号。

怎么理解呢?如果你搞过装修,你应该知道建材店之间组成的销售联盟,联盟派出去两拨人,一批是跑业务的,一批是做广告的,都穿着同样的广告衫,需要一个标识区分这两批人。而派出去的人需要编号,如果到了吃午饭的时间,出去跑业务的20个人回来一小部分,说明情况不妙,如果全部回来,说明情况很好。

「选项数据」 中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

五、差错报文

根据《什么是ICMP?ICMP如何工作?》https://info.support.huawei.com/info-finder/encyclopedia/zh/ICMP.html这篇文章我们可以了解下面几种常见的ICMP差错报文:

  • 3-目的不可达
  • 4-原点抑制消息
  • 11-ICMP超时
  • 5-重定向

3-目的不可达

当类型3目的不可达,有以下几种常见代码:

Code

描述

查询/差错

0

目标网络不可达报文

差错

1

目标主机不可达报文

差错

2

目标协议不可达报文

差错

3

目标端口不可达报文

差错

4

要求分段并设置DF flag标志报文

差错

出现目标网络不可达报文的情况是数据包到达路由器,但是路由表中没有数据包中IP地址的网络号。

目标主机不可达报文是路由器中没有找到目标主机的信息,也有可能是目标主机没有连接到网络。

目标协议不可达报文情况当你给目标主机发送UDP报文时,目标主机的防火墙禁止UDP协议数据包进入,于是ICMP通知目标协议不可达。

目标端口不可达报文是你的数据包要进入目标主机的22端口,建立SSH连接,而目标主机的22端口没有开放,这时候ICMP就会返回目标端口不可达报文给源主机。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
要求分段并设置DF flag标志报文`的情况如下:源主机发送的IP数据包首部的**「分片禁止标志位」**设置为1之后,路由器遇到超过MTU大小的数据包会直接抛弃,不会分片,然后ICMP给源主机发送`要求分段并设置DF flag标志报文

4-原点抑制消息

如果网络中遇到拥塞,就能向源主机发送一个ICMP原点抑制消息,收到该消息的机器就会增大数据包的传输间隔。是为原点抑制。

11-ICMP超时

为了限制IP数据包在计算机网络中的存在的时间,我们给数据包设计一个值TTL,能够避免IP包在网络中的无限循环和收发,节省了网络资源。

但是为了能使IP包的发送者能收到告警消息,ICMP开始大显身手,路由器会发送一个 ICMP 「超时消息」 给源主机。

5-重定向

如若路由器发现源主机不是使用「最优路径」 发送数据,路由器就会发送重定向消息给源主机。

六、ping 的发送和接收过程

我们使用ping命令去请求同一个子网的目的主机。

1. 向目的主机发送回显请求

首先,机器会构建一个类型为8、代号为0的Echo请求报文。

向目的主机发送回显请求

通过上图,我们可以了解,ICMP的类型是8,代码是0等数据。

2. 目的服务器发送回显应答

目的服务器发送回显应答

通过比较,我们可以看到在ICMP报文层,Echo请求报文与Echo响应报文除了Type、Code(看起来没变化,其实含义已经不同)发生变化,其他基本上都是一样的。

ICMP报文

3. 源主机显示相关信息

源主机显示相关信息

源主机显示相关信息

发送回显请求数据包的时间,与接收到回显应答数据包的时间差,就能计算出数据包一去一回所需要的时间。

七、ICMP—Traceroute命令

Traceroute能够利用ICMP的规则,故意制造一些产生错误的场景。

Traceroute 的第一个作用为「故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。」

思路很骚啊~我给你慢慢道来:

先设置TTL为1,数据包到第一个路由器就嗝屁,临死前把第一个路由器的IP搞到手了。返回时间超时的ICMP差错报文。

然后设置TTL为2,数据包到第二个路由器嗝屁,临死前把第二个路由器的IP搞到手。

再设置TTL为3...

以此类推,直到到达目的主机,如此就拿到了线路上所有路由器的IP。

那么Traceroute怎么知道自己发送的UDP包到达目的主机呢?

思路也很骚啊!!!

它用不可能出现的值作为UDP的端口号,数据报达到目的主机,就会返回ICMP 差错报文,类型为端口不可达。

「Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。」

这个很容易想到啊,一旦返回类型为“需要进行分片但设置了不分片位”的ICMP差错报文就减小分组长度,直到达到目的主机,这不就测试出了整个路径的MTU吗?

好家伙好家伙,思路真棒!点赞!别忘了给咱家点个赞啊!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天、实时音视频等)时,如果发现网络连接超时,第一时间想到的就是使用Ping命令Ping一下服务器看看通不通。甚至在有些情况下通过图形化的Ping命令工具对目标网络进行长测(比如:《两款增强型Ping工具:持续统计、图形化展式网络状况 [附件下载]》、《网络测试:Android版多路ping命令工具EnterprisePing[附件下载]》),可以得出当前网络通信的网络延迟、网络丢包率、网络抖动等等有价值信息。
JackJiang
2018/09/21
1.6K0
你知道ping命令是如何工作的吗?
我们用来测试一台机器与另一台机器的网络连通性一般会使用ping命令,那么你知道ping命令是如何工作的吗?ping命令是基于ICMP协议工作的。
Regan Yue
2023/07/10
4750
你知道ping命令是如何工作的吗?
一文吃透ICMP协议:网络诊断与故障排查的关键利器
ICMP(Internet Control Message Protocol)即网际控制报文协议,是 TCP/IP 协议族的重要成员,工作在网络层,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成了 TCP/IP 模型中的网络层 。它就像是网络世界中的 “交通警察” 和 “维修工人”,主要负责在 IP 主机、路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等,以确保网络数据传输的顺畅与稳定。
用户11396661
2025/02/28
3330
一文吃透ICMP协议:网络诊断与故障排查的关键利器
ICMP报文详解
3>16位的检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。
全栈程序员站长
2022/06/29
2.7K0
ICMP报文详解
当你「ping 一下」的时候,你知道它背后的逻辑吗?
我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?
奎哥
2018/10/09
1.8K0
当你「ping 一下」的时候,你知道它背后的逻辑吗?
网络世界中的侦察兵----ICMP
学习了IP协议后,都知道IP协议本身是不提供可靠性保障的,那么数据包在这么复杂的互联网环境中传输,总会遇到问题,如果遇到问题后,被丢弃、无回应,可能作为工程师的我们来说都不知道发生了什么事,更别提普通用户了,所以数据包发送出去如果被丢弃、或者某些原因造成的不可达,需要一种协议来进行通知原因,这个协议就是这篇要讲解的ICMP。
网络之路一天
2024/01/08
2730
网络世界中的侦察兵----ICMP
ping 与 traceroute 的工作原理分析
ping 程序的主要目的是测试主机是否可达,它发送 ICMP 回显请求报文给目的主机,并等待返回 ICMP 回显应答
全栈程序员站长
2022/09/16
8990
ping 与 traceroute 的工作原理分析
traceroute的工作原理
traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推…….当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。
全栈程序员站长
2022/09/16
4460
icmp重定向攻击
当发送一份差错报文时,报文始终包含 IP 的首部和产生 ICMP 差错报文的 IP 数据报的前 8 位字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联系起来。 下面各种情况不会导致产生 ICMP 差错报文:
De4dCr0w
2019/02/27
3.5K1
ping, tracert, traceroute, netstat命令详解
ping可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了 tcp/ip 协议后才可以使用。
阳光岛主
2019/02/19
4.5K0
听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理!
在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。
小林coding
2020/03/31
8470
网络诊断工具:ICMP、Ping 和 Traceroute 的原理与应用
在网络通信中,确保数据有效地传输到目的地至关重要。为了诊断网络连接问题,我们常用一些基础工具,如ICMP、Ping和Traceroute。这些工具不仅有助于检测网络问题,还能帮助确定连接故障的具体位置。本文将深入讨论这些工具的工作原理以及它们在网络诊断中的应用。
陆业聪
2024/10/23
6410
网络诊断工具:ICMP、Ping 和 Traceroute 的原理与应用
ICMP 协议分析
ICMP是(Internet Control Message Protocol)Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
用户8418197
2021/07/03
1.6K0
ICMP协议是什么
我们经常用ping命令,但是可能不知道ping命令的底层协议是ICMP,那到底什么是ICMP
opencode
2022/12/26
1.1K0
ICMP协议是什么
所谓 ICMP,不过将军与士卒而已
关于这点我们在 IP 协议那篇文章中提过一嘴,IP 协议作为一种提供不可靠数据交付的网络层协议,在传输的过程中,其 IP 数据报可能会发生丢失、重复、延迟和乱序等各种情况, 但是 IP 协议对这些糟糕的情况并不拥有有效的检测和弥补措施,当然更不会将这些结果通知收发双方。
飞天小牛肉
2021/05/14
4830
所谓 ICMP,不过将军与士卒而已
Linux 命令 | traceroute
读者需要注意有些目标主机会过滤掉 ICMP 报文,这时候可以尝试使用 UDP 或 TCP 协议。
小林C语言
2023/09/02
4630
Linux 命令 | traceroute
ICMP详解「建议收藏」
ICMP(Internet Control Message Protocol)网际控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
全栈程序员站长
2022/09/14
1.6K0
【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
② ARP 协议 : ARP 协议 是 网络层 与 数据链路层 之间的协议 , 通过 IP 地址查找 物理地址 ;
韩曙亮
2023/03/28
8.3K0
【计算机网络】网络层 :  ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
互联网医生-ICMP协议
在《IP协议详解》入门文章中,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是网际报文控制协议(InternetControl Message ProtocoL,ICMP )。
网络工程师笔记
2021/05/17
8320
互联网医生-ICMP协议
用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!
无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题。那台机器明明就在那里,你甚至都可以通过机器的终端连上去看。它看着好好的,可是就是连不上去,究竟是哪里出了问题呢?
网络技术联盟站
2020/09/22
9060
用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!
相关推荐
脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验