写点什么

云小课丨网络好不好,ping 一下就知道

发布于: 2021 年 03 月 05 日

摘要:在测试和部署网络通信应用时,我们经常会遇到网络不通的问题,一般都会想到 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,它会在报文的数据部分插入发送时间。


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

  2. 加入 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 一下就知道》,原文作者:云小萌。获取更多安全组信息,请戳这里


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


发布于: 2021 年 03 月 05 日阅读数: 50
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
网络好不好,ping一下就知道