摘要:在测试和部署网络通信应用时,我们经常会遇到网络不通的问题,一般都会想到ping一下。本文将带您了解ping命令的作用和原理~

在测试和部署网络通信应用时,我们经常会遇到网络不通的问题。一般都会想到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命令来测试弹性云服务器间的通信状况了。

安全组规则配置如下:

获取更多安全组信息,请戳这里。

本文分享自华为云社区《【云小课】基础服务第65课 网络知识一箩筐——网络好不好,ping一下就知道》,原文作者:云小萌。

点击关注,第一时间了解华为云新鲜技术~

云小课|网络好不好,ping一下就知道相关推荐

  1. 云小课|RDS实例连接又失败?看我祭出杀手锏!

    摘要:自从购买了RDS实例,连接失败的问题就伴随着我,我真是太难了.不要害怕,不要着急,跟着小云妹,读了本文,让你风里雨里,实例连接自此畅通无阻! 顺着以下几个方面进行排查,问题就可以迎刃而解~ 本文 ...

  2. 云小课|云数据库RDS实例连接失败了?送你7大妙招轻松应对

    摘要:自从购买了RDS实例,连接失败的问题就伴随着我,真是太难了.不要害怕,不要着急,跟着小云妹,读了本篇云小课,让你风里雨里,实例连接自此畅通无阻! 顺着以下几个方面进行排查,问题就可以迎刃而解~ ...

  3. 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?

    摘要:CDN(Content Delivery Network,内容分发网络)通过将源站资源缓存到遍布各地的边缘节点服务器上,用户可以就近获取资源,从而达到加速的效果. 本文分享自华为云社区<[ ...

  4. 云小课|打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:逻辑集群是基于No ...

  5. 云小课 | 使用ROMA API,API管理从此不用愁

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:ROMA API致 ...

  6. 云小课|VMware备份上云学习专列来了,快加入吧~

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:华为云云备份CBR ...

  7. 云小课 | 华为云KYON之VPC终端节点

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:在华为云KYON( ...

  8. 云小课 | 区块链关键技术之一:共识算法

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:区块链是一种去中心 ...

  9. 云小课|MRS基础原理之ClickHouse组件介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:在2016年开源的 ...

最新文章

  1. 2021年大数据Flink(十):流处理相关概念
  2. Linux操作系统(一:基本操作)
  3. 超酷实用的jQuery焦点图赏析及源码
  4. HTML 30分钟入门教程
  5. 计算机基础及ms office应用,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
  6. JS----JavaScript中的递归函数
  7. ofstream的使用方法--超级精细。C++文件写入、读出函数(转)
  8. PHP单例模式经典讲解
  9. adb devices出现no permissions
  10. SyncBird Pro的PhoneCare功能如何使用
  11. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse...
  12. MAC编译jogl/gluegen很顺利
  13. php 微信支付md5签名,微信支付V3支付签名无效解决方案
  14. 使用 OpenSSL 创建ssl证书
  15. 访问chm文件出现 已取消到该网页的导航的解决方法
  16. Redis学习之publish命令
  17. 虚拟路由器冗余协议(VRRP)
  18. 仿八大行星绕太阳3D旋转效果
  19. 美团后台开发一面算法题
  20. iPhone12基带确认,果粉放心

热门文章

  1. 一个基于Node.js的本地快速测试服务器 1
  2. android布局添加布局,Android中添加布局和初始化布局总结
  3. 三.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---1.项目文件介绍(除主要源码部分)
  4. oracle查询数据库日志大小,Oracle的日志缓冲区大小查询方法———学习笔记 | 学步园...
  5. linux中wait()系统调用的例子,linux进程管理之wait系统调用
  6. python 打包 太大 精简_极简 Python 打包指南
  7. map的key可以试一个数组吗?_二维数组的 DP
  8. GIT学习----第六节:撤销修改
  9. Flask之Flask实例有哪些参数
  10. HDU 1223 还是畅通工程(最小生成树prim模板)