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

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

3天内不再提示

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

华为开发者社区 来源:华为云社区 作者:云小萌 2021-03-18 17:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在测试和部署网络通信应用时,我们经常会遇到网络不通的问题。一般都会想到ping一下。那么ping命令的作用和原理到底是什么呢?

ping 命令是基于 ICMP 协议来工作的,要明白ping, 先了解下ICMP协议吧~

ICMP协议

ICMP全称为互联网控制报文协议(Internet Control Message Protocol)。那么具体是怎么“控制”的呢?

在复杂的网络传输环境里,数据包常常会遇到各种问题导致传输失败。网络层的IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,因此,我们需要其它的协议,在数据包传发送异常时,能将异常信息传回来,这样才可以调整传输策略,以此来控制整个局面。

ICMP协议格式

ICMP 协议是通过IP协议来发送的,报文封装在 IP 包里面。如下:

ICMP报文格式:

ICMP数据包由8bit的类型字段和8bit的代码字段以及16bit的校验字段再加上选项数据组成。ICMP报文大致分为两类:查询报文类型和差错报文类型。

查询报文类型

查询报文主要应用于ping查询、子网掩码查询、时间戳查询等。ping命令其实就是对ICMP协议查询报文类型的使用。

主机A ping 主机B时,ping命令在主机A构建ICMP请求数据包时,ICMP的类型字段为8(回送请求),当主机B构建ICMP请求数据包时,ICMP的类型字段为0(回送应答)。如果主机A在一定时间内收到了主机B的应答,则表明两台主机之间网络是可达的。

差错报文类型

差错报文主要产生于数据传送发送错误的时候,包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等。

IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因,原因记录在 ICMP 包头的代码字段。

ping命令的工作过程

举一个例子来描述「ping」命令的工作过程:

假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,在主机A上输入命令:ping 192.168.0.2

1.发送端主机构建ICMP请求数据包。ping命令会在主机A上构建一个 ICMP的请求数据包。数据包包含多个字段,主要的有类型和序号。类型:在请求数据包中,类型字段为8;序号:主要用于区分连续 ping 的时候发出的多个数据包。

每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。

2.IP层构建IP数据包。ICMP协议会将这个数据包以及目标IP(192.168.0.2)等信息一同交给IP层协议。IP层协议得到这些信息后,将源地址(即本机IP)、目标地址(即目标IP:192.168.0.2)、再加上一些其它的控制信息,构建成一个IP数据包。

3.加入MAC地址。需要通过ARP映射表找出目标IP(192.168.0.2)所对应的MAC地址。当拿到了目标主机的MAC地址和本机MAC后,一并交给数据链路层,组装成一个数据帧,依据以太网的介质访问规则,将它们传送出出去。

主机B收到数据帧后,进行如下步骤:

1.检查MAC地址,丢弃或接收,提取IP数据包。当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议。

2.IP层检查IP。IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理。

3.构建ICMP应答包。应答包的类型字段为 0,序号为接收到的请求数据包中的序号。

4.应答数据包回发给主机A。

在一定的时间内,如果主机A收到了应答包,则说明它与主机B之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时。

课堂练习

关于ICMP协议与ping命令如何工作我们已经了解了,那对于我们在云上搭建的应用,如何测试弹性云服务器间的通信状况呢?

回忆一下,弹性云服务器数据流量的进出是需要遵守安全组规则的,没有安全组规则的允许,谁都不能访问。

那我们就可以在安全组中添加放通ICMP协议的安全组规则,允许其他云服务器通过 ICMP 协议访问该云服务器,进而实现通过ping命令来测试弹性云服务器间的通信状况了。

安全组规则配置如下:

原文标题:爆文速递| 网络好不好,ping一下就知道

文章出处:【微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    18

    文章

    6314

    浏览量

    139537
  • Ping
    +关注

    关注

    0

    文章

    72

    浏览量

    16765

原文标题:爆文速递| 网络好不好,ping一下就知道

文章出处:【微信号:Huawei_Developer,微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    支持Ping协议!从盲猜到秒判,HMI也能做网络诊断?

    出问题?为了确认问题,工程师不得不打开控制柜、连接笔记本、执行Ping命令,一轮排查下来常常 耗时一两个小时 。 如今,这一切都被 宏集EXOR物联网HMI的内置Ping网络诊断功能 所改变。HMI不再只是“显示与操作终端”,而
    的头像 发表于 10-24 11:47 111次阅读
    支持<b class='flag-5'>Ping</b>协议!从盲猜到秒判,HMI也能做网络诊断?

    宏集案例 | 支持Ping协议!从盲猜到秒判,HMI也能做网络诊断?

    ?为了确认问题,工程师不得不打开控制柜、连接笔记本、执行Ping命令,一轮排查下来常常耗时一两个小时。如今,这一切都被宏集EXOR物联网HMI的内置Pin
    的头像 发表于 10-23 17:02 445次阅读
    宏集案例 | 支持<b class='flag-5'>Ping</b>协议!从盲猜到秒判,HMI也能做网络诊断?

    飞凌嵌入式ElfBoard-Linux系统基础入门-网络相关shell命令

    :~$ sudo ifconfig ens33 hw ether 22:22:22:22:22:22ping网络通断检查命令命令ping功能:检查网络的连接情况,通常情况下只能
    发表于 10-10 15:06

    Linux基础命令which详解

    在Linux系统中,which命令用于查找并显示指定命令的可执行文件路径。这对于系统管理员和开发人员来说是一个非常有用的工具,可以帮助定位命令所在的位置,确认命令是否已正确安装,并且能
    的头像 发表于 07-29 17:58 581次阅读

    第十六章 W55MH32 PING示例

    本文讲解了如何在 W55MH32 芯片上通过 IPRAW 模式实现 ICMP 协议中的 PING 命令,以进行网络连通性测试,通过实战例程展示了从发送 PING 请求、接收并解析回复到统计结果的完整
    的头像 发表于 07-24 11:41 492次阅读
    第十六章 W55MH32 <b class='flag-5'>PING</b>示例

    交换机无法Ping通本机IPv6接口地址问题

    某互联网电视CDN网络ZXR10 5960-56QU-HC(简称5960)交换机下挂CDN服务器,vlan-if接口地址作为服务器网关,在运行中出现服务器无法ping通IPv6网关,并且5960也无法ping通该接口的IPv6地址。
    的头像 发表于 07-22 11:25 2157次阅读
    交换机无法<b class='flag-5'>Ping</b>通本机IPv6接口地址问题

    详解Linux网络管理中的关键命令

    本文档概述了网络管理中的关键命令,如ifconfig配置网络接口,ip管理路由,ping测试连通性,以及nmap进行安全扫描。还介绍了nslookup和dig用于域名解析,tcpdump抓包分析,以及arp操作和nmap的深入应用。
    的头像 发表于 07-04 11:37 616次阅读
    详解Linux网络管理中的关键<b class='flag-5'>命令</b>

    使用openmv示例工程连接得上热点,但是ping不到热点ip,也ping不到baidu.com,怎么解决?

    使用openmv示例工程连接得上热点,但是ping不到热点ip,也ping不到baidu.com,请问应该怎么解决
    发表于 06-13 07:31

    飞凌嵌入式ElfBoard ELF 1板卡-uboot常用命令之网络命令

    网络通信状态,设置好开发板IP和PC机IP之后,使用网线连接好开发板和PC机,使用ping命令:=> ping 192.168.0.102Using FEC1 devicehost
    发表于 05-23 09:33

    为UART、MCXA142实现ISP通信的主机端,发送Ping数据包并收到预期的响应,发送和接收数据包的典型顺序是什么?

    我想为 UART、MCXA142 实现 ISP 通信的主机端。我发送 Ping 数据包并收到预期的响应。发送和接收数据包的典型顺序是什么? 此刻,我的照片是这样的: 1. 发送 Ping 2. 接收 Ping 响应 3. 在成
    发表于 04-03 08:05

    T2081 VSC8572 phy:Ping不起作用的原因?

    我有一个定制的 T2081板VSC8572我们使用地址0x1d的 phy 芯片。当我们遍历 u-boot 代码时,不支持这个 Phy。我们能够使用具有通用 phy 配置的 mii 命令访问 Phy
    发表于 04-01 07:33

    Linux ip命令常用操作

    Linux ip命令常用操作 在Linux系统中,ip命令是用于管理网络接口和路由的强大工具。相比于旧的 ifconfig命令,ip命令提供了更多的功能和更细粒度的控制。本文将详细介绍
    的头像 发表于 02-19 10:23 1067次阅读

    交换机常用配置命令

    在现代网络通信中,交换机作为局域网(LAN)的核心设备,其配置和管理对于网络的性能和稳定性至关重要。本文旨在深入探讨交换机的常用配置命令,从基本命令到高级配置,全面解析这些命令的用法、作用
    的头像 发表于 02-02 16:56 5215次阅读

    常用linux命令

    使用command A | command B | command C命令,将A命令产生的标准输出作为B命令的标准输入(注意只能接收前一个命令的标准输出)。
    的头像 发表于 01-20 14:26 658次阅读

    ADS1291中有个Offset Calibration的命令起什么作用

    我在用ADS1291和AFE4404组合做一个产品,在使用中遇到些问题: 第1:ADS1291中有个Offset Calibration的命令起什么作用?何时使用,是启动时校准一次还是要周期性地
    发表于 01-01 06:47