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

news2024/12/23 18:11:56

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

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

一、介绍ICMP协议

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

二、为什么需要ICMP?

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

三、ICMP的格式

查看源图像

图片来源:https://webeduclick.com/wp-content/uploads/2019/08/ICMP.png

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

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

ICMP报文分类大家可以看华为的文档,我这里不在叙述:什么是ICMP?ICMP如何工作? - 华为 (huawei.com)

四、查询报文

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

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

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

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

五、差错报文

根据什么是ICMP?ICMP如何工作? - 华为 (huawei.com)这篇文章我们可以了解下面几种常见的ICMP差错报文:

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

3-目的不可达

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

Code描述查询/差错
0目标网络不可达报文差错
1目标主机不可达报文差错
2目标协议不可达报文差错
3目标端口不可达报文差错
4要求分段并设置DF flag标志报文差错

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

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

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

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

要求分段并设置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. 目的服务器发送回显应答

image-20220808112620199

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

在这里插入图片描述

3. 源主机显示相关信息

在这里插入图片描述
image-20220808113307820

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

七、ICMP—Traceroute命令

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

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

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

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

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

再设置TTL为3…

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

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

思路也很骚啊!!!

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

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

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

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

参考文献:

[1] 趣谈网络协议 (geekbang.org)

测试出了整个路径的MTU吗?

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

参考文献:

[1] 趣谈网络协议 (geekbang.org)

[2] 什么是ICMP?ICMP如何工作? - 华为 (huawei.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓大作业 咖啡展示App

系列文章 安卓大作业 咖啡展示App 文章目录 系列文章1.背景2.所有截图3.总结4. 源代码获取 1.背景 为了便于用户对于咖啡信息的浏览,我设计了一个咖啡展示的app。可以在这个App中查看到一些咖啡的信息,点…

爬虫语言最好用的是那种?

目前最好用的爬虫语言有多种选择,具体的选择取决于你的需求和个人偏好。Python是较为流行的爬虫语言之一,其生态系统丰富,拥有大量优秀的爬虫框架和工具。另外,JavaScript、Go、Ruby等编程语言也可以用于爬虫开发。总之&#xff0…

设置ubuntu下SVN服务开机自启

目录 0.背景环境 1.开机自启步骤 0.背景环境 1)ubuntu下,已搭建好svn版本库,具体搭建方法参考文末的其他博客链接 2)在搭svn服务器的过程中,发现ubuntu重启后,svn服务就关闭了 svn正常开启时见下图 所以…

为什么大多数企业数字化转型失败率高达80%?

数字化转型失败率为什么这么高? 多年的转型研究表明,企业数字化转型的成功率还不到 30%。 麦肯锡2023年报告显示,只有 16% 的受访者表示他们组织的数字化转型成功地提高了绩效,并使他们能够长期维持变革。 即使是精通数字技术的行…

十五周算法训练营——回溯算法

今天是十五周算法训练营的第十周,主要讲回溯算法专题。(欢迎加入十五周算法训练营,与小伙伴一起卷算法) 解决一个回溯问题,实际上就是一个决策树的遍历过程,只需要思考三个问题: 路径&#xff1…

市值暴涨8000亿,马斯克告诉了美国同行,为啥需要中国市场?

马斯克访华仅仅40多个小时,却带动了股价连涨5天,涨幅最高达到20%,市值飙涨8000亿元人民币,马斯克也因此再度问鼎全球首富之位,凸显出中国之行给他带来的巨大好处。 一、中国市场带动了特斯拉的辉煌 2018年马斯克为产能…

依据换行符分割字符串numpy.char.splitlines()含换行符与回车符的区别

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 依据换行符分割字符串 numpy.char.splitlines() 含换行符与回车符的区别 [太阳]选择题 以下说法错误的是: import numpy as np a "I\nLove\rChina\r\nforever" print(&q…

APACHE-ATLAS-2.1.0 - 安装HIVE HOOK(六)

写在前面 本博文以获取HIVE元数据为例,进行流程和源码的分析。 请提前安装好HADOOP和HIVE的环境,用于测试。 ATLAS官网:https://atlas.apache.org/#/HookHive ATLAS支持的元数据源 什么是Hive Hook(钩子) HOOK是一种…

可视化的三种图结构方案 (canvas、fabric、G6)

原生 canvas、fabric 以及 G6,三种方案各有优劣势 原生 canvasfabricG6优点灵活、自由、可定制化非常强封装了 canvas 的 api,使用简单灵活提供了复杂树、图等 api,只需要按照文档配置即可缺点开发复杂、耗时对于构建大型树、图等复杂、耗时…

chatgpt赋能python:选择函数:Python实现之道

选择函数:Python 实现之道 什么是选择函数? 在 SEO 中,选择函数是指搜索引擎在对网站内容进行排名时所采用的一种规则。选择函数由搜索引擎定义,其目的在于建立一个算法来确定哪些网站会出现在搜索结果的前几页中。对于网站管理…

百度视频质量评测的实践之路

视频编解码技术日新月异,新的编解码技术赋予视频业务新的应用场景和新的用户视听体验。同时,视频作为带宽消耗大户,如何在视听体验和视频带宽之间取得最优的平衡是一个永恒的话题。视频质量评测主要用来回答:体验是否改善、带宽是…

chatgpt赋能python:如何用Python制作动画?

如何用Python制作动画? Python作为一种优秀的编程语言,可以用于不同领域的编程。其中,Python也可以被用于创建动画。使用Python的主要好处之一是其强大的Matplotlib库,它可以帮助我们更轻松地创建可视化效果。 什么是Matplotlib…

chatgpt赋能python:Python如何取出List中的数据

Python如何取出List中的数据 在Python中,列表(List)是一种非常常见的数据类型,它可以存储任意类型的数据,并且可以按照下标索引来访问其中的元素。本篇文章将介绍如何使用Python来取出List中的数据。 常规方法 在Py…

Android BlueToothBLE入门(一)——低功耗蓝牙介绍

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为3150字,预计阅读8分钟 前言 距上篇文章发布都一个多月了,先声明,我可不会停更。这么长时间没更新文章,其实原因就三点: 原因一是工作上事确实多&…

JavaScript之事件(十)

JavaScript之事件 1、事件绑定2、事件类型3、事件的传播4、事件对象1、事件对象常用的属性2、事件对象常用的方法 事件可用于处理、验证用户输入、用户动作和浏览器动作。 1、事件绑定 事件绑定就是给HTML标签绑定特定的事件,当该事件触发,则会执行相应的…

一款射频芯片的layout设计指导案例-篇章2

《一款射频芯片的layout设计指导案例-篇章1》中,我们阐述了RTL8762元件布局顺序、DC/DC电路元件布局走线、电源Bypass布局规范、外部flash布局走线、RF布局走线, 本篇阐述晶振、ESD、板层等相关指导建议—— 40MHz晶振布局走线规范 在没有结构限制情况下…

chatgpt赋能python:Python如何在同一行输入三个数?

Python如何在同一行输入三个数? Python语言是一门广泛使用的编程语言,被广泛应用于数据分析、机器学习、Web开发、科学计算、人工智能等领域。但是,有时候我们需要在同一行输入多个变量或数字,这可能给一些初学者带来一些困惑。本…

暑期实习开始啦「GitHub 热点速览」

作者:HelloGitHub-小鱼干 无巧不成书,刚好最近有小伙伴在找实习,而 GitHub 热榜又有收录实习信息的项目在榜。所以,无意外本周特推就收录了这个实习项目,当然还有国内版本。除了应景的实习 repo 之外,还有帮…

快手 | 后端Java实习生 | 一面

目录 1.Redis缓存和MySQL数据一致性如何保证?2.你使用缓存,在高并发的情况下,如果多个缓存同时过期了怎么办?3.消息队列积压了怎么办?4.jdk1.8之后Java内存模型分别哪几个部分?每个部分用一句话概括一下&am…

GaussDB云数据库SQL应用系列-定时任务管理

前言 GaussDB数据库定时任务主要可以用于实现定期的备份、统计信息采集、数据汇总、数据清理与优化等,它是指在指定的时间间隔内自动执行一次或多次SQL语句的程序。 一、GaussDB数据库定时任务介绍 GaussDB数据库兼容Oracle定时任务功能主要通过DBE_TASK高级功能…