首先,让我们从ping命令的基础说起。ping是基于ICMP(互联网控制报文协议)的。想要理解ping,我们先得了解ICMP协议。
ICMP是网络层的一个辅助协议,它在IP协议基础上运行。由于IP协议是无连接且不可靠的,它无法确保数据包的准确送达。这就需要ICMP协议来弥补这一缺陷,当数据包传输出现问题时,ICMP能将异常信息反馈回来,使我们能据此调整传输策略。
ICMP协议通过IP协议发送报文,封装在IP数据包内部。一个ICMP数据包包括类型、代码和校验和字段,以及一些可选的数据。ICMP报文主要分为查询报文和差错报文两大类。
查询报文主要用于ping测试、子网掩码查询和时间戳查询等。以ping命令为例,当主机A向主机B发送ping请求时,会在主机A上构建一个ICMP请求数据包,其类型字段设置为8(回送请求)。当主机B接收到这个请求后,会构建一个类型字段为0(回送应答)的ICMP数据包,并发送回主机A。如果主机A在预定时间内收到主机B的应答,就表明两台主机之间的网络是可达的。
而差错报文则主要在数据传输出现错误时产生,如目标不可达、超时、参数问题等。例如,当IP路由器无法将数据包发送给目标地址时,它会返回一个目标不可达的ICMP消息,并说明具体原因。
那么,ping命令的工作过程是怎样的呢?假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),我们要检测它们之间的网络是否可达。在主机A上执行命令ping 192.168.0.2,以下是工作流程:
1. 主机A构建ICMP请求数据包,包括类型字段和序号等。 2. IP层接收这个数据包,加上源地址和目标地址等信息,构建IP数据包。 3. 数据链路层通过ARP映射表获取目标IP对应的MAC地址,组装成数据帧并发送出去。 4. 主机B接收到数据帧后,提取IP数据包并交给ICMP协议处理。 5. 主机B构建ICMP应答包并发送给主机A。
如果主机A在一定时间内收到应答包,就表示网络可达;否则,网络不通。
了解了ICMP协议和ping命令的工作原理,我们如何在云环境中测试弹性云服务器之间的通信状况呢?其实,弹性云服务器的数据流量需要遵守安全组规则。我们可以在安全组中添加允许ICMP协议的规则,这样就可以通过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命令来测试弹性云服务器间的通信状况了。
安全组规则配置如下:
原文标题:爆文速递| 网络好不好,ping一下就知道
文章出处:【微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。
责任编辑:haq