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

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

3天内不再提示

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

dyquk4xk2p3d 来源:稀土掘金技术社区 2023-05-31 11:40 次阅读

前几天一个读者和我聊天,谈起现在的面试,有时候面试官的问题问的真的非常的刁钻,比如:有一次三面面试官问他:当你运行 ping xxx 的时候发生了什么?搞的他一脸懵逼。。。

其实,像这类问题,是最能考查应聘者的基础理论扎不扎实的。所以,今天民工哥就带大家一起深入探讨一下这个问题。

话不多唠,直接上干货!!!!!

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

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

介绍 ICMP 协议

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

为什么需要 ICMP?

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

ICMP 的格式

aeb1ea06-fca4-11ed-90ce-dac502259ad0.png

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

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

查询报文

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

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

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

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

差错报文

我们可以了解下面几种常见的ICMP差错报文:

3-目的不可达

4-原点抑制消息

11-ICMP超时

5-重定向

3-目的不可达

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

aeb8f882-fca4-11ed-90ce-dac502259ad0.png

出现目标网络不可达报文的情况是数据包到达路由器,但是路由表中没有数据包中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命令去请求同一个子网的目的主机。

向目的主机发送回显请求

首先,机器会构建一个类型为8、代号为0的Echo请求报文。aeca9eb6-fca4-11ed-90ce-dac502259ad0.png

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

目的服务器发送回显应答

aed6991e-fca4-11ed-90ce-dac502259ad0.png

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

aef87f84-fca4-11ed-90ce-dac502259ad0.png

源主机显示相关信息

af00f0b0-fca4-11ed-90ce-dac502259ad0.png
af10e16e-fca4-11ed-90ce-dac502259ad0.png

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

ICMP—Traceroute命令

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

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

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

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

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

再设置TTL为3...

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

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

思路也很骚啊!!!

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

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

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

审核编辑:汤梓红

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

    关注

    0

    文章

    50

    浏览量

    14809
  • Ping
    +关注

    关注

    0

    文章

    66

    浏览量

    15803
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • 数据包
    +关注

    关注

    0

    文章

    229

    浏览量

    24095
  • 报文
    +关注

    关注

    0

    文章

    31

    浏览量

    3968

原文标题:面试官:运行 ping xxx 的时候发生了什么?问倒一大片。。。

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

收藏 人收藏

    评论

    相关推荐

    四个ping命令搞定网络故障

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

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

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

    三种不同的“防 Ping”技巧

    三种不同的“防 Ping”技巧 浅析三种不同的“防 Ping”方法   众所周知,Ping命令是一个非常有用的网络命令,大家常用它
    发表于 04-14 13:53 1040次阅读

    Ping程序的C语言编程

      大部分人用ping命令只是作为查看另一个系统的网络连接是否正常的一种简单方法。在这篇文章中,作者将介绍如何用C语言编写一个模拟ping命令功能的程序。   
    发表于 08-18 15:36 1050次阅读

    ping命令的使用方法及功能

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

    DOS-ping和ipconfig命令详解下载

    DOS-ping和ipconfig命令详解下载
    发表于 01-16 16:13 3次下载

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

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

    ping命令入门详解

    Ping是潜水艇人员的专用术语,表示回应的声纳脉冲,在网络中Ping 是一个十分好用的TCP/IP工具。它主要的功能是用来检测网络的连通情况和分析网络速度。 Ping有好的善的一面也有恶的一面。先说
    发表于 10-06 14:09 3009次阅读

    ping原理及应用介绍

    Ping程序的实质是利用了ICMP请求回显和回显应答报文,但ARP请求和应答报文也在其中起了非常重要的作用。 Ping的逻辑过程以从PC1 ping PC2(命令
    发表于 10-06 14:25 8004次阅读

    ping是什么?ping背后的逻辑是什么样的?是如何实现的?

    我们在遇到网络不通的情况,大家都知道ping 一下,看一下网络状况。那你知道ping命令后背的逻辑是什么吗?
    的头像 发表于 10-03 12:25 7750次阅读

    说说PING命令涉及端到端的理论

    任何靠 IT 行业讨饭吃的人,无论在哪个范畴工作,都一定懂得 Ping 这个指令。差不多任何作业系统都具备 Ping命令,用来做简单的 Troubleshooting。但究竟
    的头像 发表于 01-01 17:26 2853次阅读

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

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

    Ping命令的7个基础用法

    IT行业中ping命令经常被用到,今天整理了一下关于网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功
    的头像 发表于 10-12 09:16 2575次阅读

    PING命令还能这么用?

    今天和你聊聊PING命令。 一般来说,网工们通常会用它来直接ping ip地址,来测试网络的连通情况。 类似这种,ping ip地址或网关,然后pi
    的头像 发表于 05-18 16:43 712次阅读
    <b class='flag-5'>PING</b><b class='flag-5'>命令</b>还能这么用?

    Ping命令的基本用法

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