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

    文章

    6211

    浏览量

    138032
  • Ping
    +关注

    关注

    0

    文章

    70

    浏览量

    16476

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第十六章 W55MH32 PING示例

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

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

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

    交换机常用配置命令

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

    常用linux命令

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

    服务器ping不通但是http能请求成功是什么原因

    平时,我们想要知道,自己的机器到目的机器之间,网络通不通,一般会执行ping命令
    的头像 发表于 10-23 09:23 ?1791次阅读
    服务器<b class='flag-5'>ping</b>不通但是http能请求成功是什么原因

    局域网ping不通的原因有哪些

    使用 ping 命令测试两台计算机之间的连接时,如果 ping 不通,可能存在多种原因。以下是一些可能导致局域网 ping 不通的原因: 1. 物理连接问题 物理连接问题通常是最容易发
    的头像 发表于 10-14 15:03 ?8151次阅读

    新加坡服务器的速度测试方法有哪些

    测试新加坡服务器的速度和性能是确保服务器能够满足业务需求的关键步骤。以下是一些常用的方法和工具: Ping测试: Ping命令是一种基本的网络诊断工具,用于测试与服务器的连接延迟和丢包率。在
    的头像 发表于 10-14 14:55 ?552次阅读

    常见的shell命令之网络相关命令

    netmask 255.255.255.0elf@ubuntu:~$ sudo ifconfig ens33 hw ether 22:22:22:22:22:223、ping网络通断检查命令命令
    发表于 08-20 09:50

    恒讯科技分析:如何测试海外静态IP服务的稳定性和速度?

    测试海外静态IP服务的稳定性和速度可以通过以下步骤进行: 1、选择测试工具:使用网络测试工具,如ping命令、traceroute(或 racert)、网络速度测试网站(例如
    的头像 发表于 08-14 14:58 ?734次阅读

    使用Python进行Ping测试

    在网络工程中,Ping测试是一种常用的网络诊断工具,用于检查网络连接的可达性和响应时间。Ping测试通过向目标主机发送ICMP(Internet Control Message Protocol
    的头像 发表于 08-12 17:56 ?1071次阅读
    使用Python进行<b class='flag-5'>Ping</b>测试