目录
二、ICMP(Internet Control Message Protocol,互联网控制消息协议)
2、 Destination Host Unreachable(目标主机不可达):
3、 Network is Unreachable(网络不可达):
前言
在日常生活中我们经常使用ping命令来查看服务器之间的网络是否畅通,但是对于这个命令也只是停留在浅显的使用上,写这篇文章的目的呢,主要是想介绍下ping命令的原理和在实际生产过程中还有什么其他的使用方法,介于个人能力有限,可能介绍的也不是很全面,如有错误或补充可以及时联系沟通。
一、ping命令是什么?
要了解ping命令是什么,我们可以先看下维基百科中对ping命令的解释:
ping是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP的请求回显数据包,并等待接收回显回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。
在1983年12月,迈克·穆斯编写了首个这样的程序,用于在IP网络出现问题时方便探查其根源。因为这个程序的运作原理与潜水艇的主动声纳相似,他便用声纳的声音来为程序取名。戴维·米尔斯曾提出另一个取名:Packet Internet Grouper/Gopher(后者指地鼠)。
网络管理员之间也常将ping用作动词,如“ping一下计算机XXX,看它是否开着。”
从上面的解释可以看出ping 命令 是一种网络诊断工具,广泛用于测试本地主机与远程主机之间的网络连通性。它的全称是 “Packet Internet Groper”。
二、ICMP(Internet Control Message Protocol,互联网控制消息协议)
在了解ping命令使用原理之前,首先我们还需要了解一下什么是ICMP(Internet Control Message Protocol,互联网控制消息协议)
ICMP(Internet Control Message Protocol,互联网控制消息协议) 是一种网络层协议,用于在计算机和网络设备之间发送控制消息,以报告网络状况或错误信息。ICMP 是 TCP/IP 协议栈的重要组成部分,但它并不是用于传输用户数据的,而是用于报告网络层的错误、提供诊断信息以及管理网络的整体运作。
1、ICMP 的关键功能和作用
(1). 错误报告:
• 网络不可达(Network Unreachable):当数据包无法通过某条网络路径到达目标时,路由器会向源主机发送一个 ICMP 消息,告知网络不可达。此时,路由器可能不知道如何转发数据包,或者数据包在传输过程中遇到了物理网络故障。
• 主机不可达(Host Unreachable):如果目标主机在网络上不可达(例如关机或网络接口禁用),中间的网络设备或目标网络中的设备会返回主机不可达的 ICMP 消息。
• 协议不可达(Protocol Unreachable):当目标主机收到的 IP 数据包中包含了一个它不支持的传输层协议(例如,不支持 UDP 的主机收到一个 UDP 数据包),它会返回协议不可达的 ICMP 消息。
• 端口不可达(Port Unreachable):如果目标主机上的某个特定端口没有运行任何服务,且收到一个发向该端口的 TCP/UDP 数据包,目标主机会返回一个端口不可达的 ICMP 消息。
(2). 流量控制(Flow Control):
• 当网络发生拥塞时,网络设备可以使用 ICMP 消息通知源主机降低发送速率。这种消息通常在网络设备发现其缓冲区溢出或其他网络设备过载时发出。
(3). 路径控制(Redirect):
• 当源主机通过非最佳路径发送数据包时,路由器可以使用 ICMP 重定向消息通知源主机选择更好的路径。这有助于优化网络流量,确保数据包通过最有效的路径传输。
2、ICMP 消息类型
ICMP 消息有多种类型,每种类型的消息都用于特定的网络通信目的。以下是几种常见的 ICMP 消息类型:
(1). Echo Request and Echo Reply(回显请求和回显应答):
• 类型码:8(Echo Request),0(Echo Reply)。
(2). Destination Unreachable(目标不可达):
• 类型码:3。
• 当路由器或主机无法将数据包传递到目标时,会返回此消息。其子类型(代码)包括:
• 0: 网络不可达
• 1: 主机不可达
• 3: 端口不可达(例如,目标主机未开启请求的服务)
• 13: 通信被管理员禁止(可能是防火墙阻止)
(3). Time Exceeded(时间超时):
• 类型码:11。
• 当数据包的 TTL(Time to Live)值降为 0 时,路由器丢弃该包并发送一个 Time Exceeded 消息给源主机。这通常用于 traceroute 工具来检测路径中的每个路由器。
(4). Redirect(重定向):
• 类型码:5。
• 用于告知主机选择不同的路由来发送数据包。例如,当路由器发现有一条更优的路径时,会发送一个 Redirect 消息给源主机,以便下次数据传输时选择更优的路径。
(5). Source Quench(源抑制):
• 类型码:4。
• 过去用于请求发送方降低数据发送速率,但现在已被废弃,因为它在应对网络拥塞方面效果不佳。
3、ICMP消息结构
一个典型的 ICMP 消息由以下几个部分组成:
1. Type(类型):表明消息的类型,如 Echo Request 或 Destination Unreachable。
2. Code(代码):提供有关该消息的更详细的描述,如具体的不可达原因。
3. Checksum(校验和):用于确保 ICMP 消息的完整性。
4. Additional Information(附加信息):根据不同的消息类型,包含其他与该消息相关的特定信息。
4、ICMP在网络中的作用
ICMP 是网络通信中不可或缺的一部分,主要用于报告错误、诊断网络问题,以及引导数据包在网络中选择合适的路径。尽管 ICMP 本身不传输用户数据,但它在维持网络的正常运作、监控网络健康状态和排除故障方面起到了至关重要的作用。
三、ping命令的详解
我们先使用ping命令ping一个地址然后根据返回值来讲解下面的工作原理会更加直观
1、ping命令的基本用法
在命令行界面(如 Windows 的 cmd,Linux 和 macOS 的终端)中,ping 命令的基本用法如下:
ping [选项] [目标主机]
- 目标主机:可以是目标主机的 IP 地址或域名。
- 选项:用于控制
ping
命令的行为,如发送数据包的数量、间隔时间等。
2、ping命令的工作原理
ping 命令的工作原理基于 ICMP(Internet Control Message Protocol,互联网控制消息协议)。
ping命令是网络管理中最常用的工具之一,用来测试主机之间网络连通性。通过发送 Internet Control Message Protocol(ICMP)回显请求(echo request)数据包到目标主机,ping
可以测量发送请求和接收到回复之间的时间,并报告传输成功或失败的情况。
当你使用 ping 命令时,以下步骤会依次发生:
(1). 发送ICMP回显请求:ping 命令会向目标主机发送一个 ICMP Echo Request(回显请求)报文。这个报文包含目标主机的 IP 地址、请求的序列号、时间戳以及一定数量的用户数据(通常为56字节)。Echo Request 报文的类型码为 8,表示这是一个请求消息。
(2). 目标主机响应:当目标主机收到 Echo Request 报文后,它会生成一个 ICMP Echo Reply(回显应答)报文,并将其发送回源主机。Echo Reply 报文的类型码为 0,表示这是一个应答消息。回显应答报文会保留原始请求报文中的序列号和时间戳,以便源主机计算往返时间(RTT)。
(3). 源主机接收应答并计算网络延迟:当源主机收到 Echo Reply 报文时,它会与最初发送 Echo Request 报文时记录的时间戳进行比较,从而计算出往返时间(RTT, Round-Trip Time)。同时,源主机还会记录收到的应答包的序列号、TTL(生存时间)、数据包的大小等信息,并将这些信息显示在终端上。
(4). 输出结果:
• ping 命令在每次收到 Echo Reply 报文后,都会在终端上输出该报文的相关信息:
• bytes:ICMP 数据包的大小。
• IP 地址:目标主机的 IP 地址。
• ICMP请求次数:一共发送了多少ICMP请求包。
• TTL:数据包在网络中经过的路由器数量(每经过一个路由器,TTL 值减 1)。
• time:从发送请求到接收应答的往返时间(RTT)。
• 当达到指定次数或用户中断操作(如 Ctrl+C)后,ping 命令会输出统计信息,在下图中 --- www.a.shifen.com ping statistics --- 是 ping 命令的统计信息部分的开头,用于分隔并引导后续统计数据的输出。这段内容表明 ping 命令已经结束了对指定目标的所有ICMP请求,并准备输出总结统计信息。
• packets transmitted:指 ping 命令总共发送了10个ICMP回显请求包。
• packets received:表示目标主机成功接收了这10个请求,并且都发送了应答包,表明所有的请求都得到了响应。
• 0.0% packet loss:这一项表明在发送的10个ICMP请求中,没有任何一个包丢失。丢包率为0%,表示网络连接非常稳定,没有数据丢失。
• round-trip (RTT) : 这一行数据提供了关于往返时间(RTT)的统计信息,用于评估从本地主机到目标主机的通信延迟。
• min/avg/max/stddev = 10.195/10.722/11.431/0.388 ms:
• min(最小RTT):10.195 ms,这是10次请求中响应时间最短的一次。这意味着,在所有请求中,最快的一个包往返用了10.195毫秒。
• avg(平均RTT):10.722 ms,这是所有请求的平均响应时间。这个值代表了整体的网络延迟情况。
• max(最大RTT):11.431 ms,这是7次请求中响应时间最长的一次。这意味着,在所有请求中,最慢的一个包往返用了11.431毫秒。
• stddev(标准偏差):0.388 ms,这是所有往返时间的标准偏差,表示RTT的波动程度。标准偏差较低(0.388 ms),意味着每次Ping的往返时间非常接近,网络延迟非常稳定。
3 、ping命令的常用参数
Ping命令提供了多个参数,可以用于控制发送的ICMP包数量、数据负载大小、发送间隔时间等。
(1). 指定发送次数:
• 在Windows中使用-n参数,在Linux和macOS中使用-c参数来指定要发送的ICMP包数量。
• Windows:
ping -n 5 www.baidu.com
• Linux/macOS:
ping -c 5 www.baidu.com
可以看到上面的ping命令在发送了五个ICMP包后就自动停止了发送,并输出了统计信息
(2). 指定数据包大小:
• 使用-l(Windows)或-s(Linux/macOS)参数来指定ICMP请求中的数据负载大小,以字节为单位。
• Windows:
ping -l 1000 www.baidu.com
• Linux/macOS:
ping -s 1000 www.baidu.com
可以看到上面的ping命令发送了一个个包含1000字节数据的ICMP请求。
(3). 设置超时时间:
• 使用-w(Windows)或-W(Linux/macOS)参数来设置每个请求的超时时间,Windows中以毫秒为单位,Linux/macOS以秒为单位。
• Windows:
ping -w 1000 192.168.50.179
• Linux/macOS:
ping -W 1 192.168.50.179
因为我们这里要测试的是超时时间,所以我们找一个访问不到的ip地址使用ping命令即可。
(4). 持续Ping:
• 在Linux和macOS中,默认情况下Ping命令会一直运行,直到手动停止(通常按Ctrl+C终止)。在Windows中,默认发送4个包后停止,但可以使用-t参数让Ping持续运行。
• Windows:
ping -t www.baidu.com
• Linux/macOS无需额外参数,默认持续发送,使用Ctrl+C停止。
(5). 设置Ping的TTL值:
• 使用-i参数设置Ping包的生存时间(TTL,Time to Live),用于限制数据包在网络中能够传输的次数(也叫跳数)。
ping -i 128 www.baidu.com
由于这个参数Windows和Linux/macOS一致所以只给一个示例。
四、ping
命令的使用场景
1、检测网络连接:用 ping
测试本地主机与远程主机之间的网络连通性。
2、测量网络延迟:通过 ping
的往返时间(time
),可以初步判断网络延迟情况。
3、检查 DNS 配置:使用 ping
域名来检查 DNS 解析是否正常。
4、验证网络路径:使用 ping
的 TTL 选项,可以测试数据包经过的网络跳数,结合 traceroute
工具进一步分析。
五、ping
命令的各种返回信息
成功返回的示例上面已经举了很多,这里只展示一些不正常的返回示例
1、Request Timed Out(请求超时):
• 说明:未收到目标主机的回应
• 原因:
• 目标主机关闭或网络不通。
• 防火墙阻止了 ICMP 请求或响应。
• 网络配置错误,如路由不正确。
2、 Destination Host Unreachable(目标主机不可达):
• 说明:源主机的路由器或中间设备未能找到到达目标主机的路径
• 原因:
• 网络配置错误。
• 路由器或网关未配置好。
• 目标主机不可用或已关闭。
3、 Network is Unreachable(网络不可达):
• 说明:没有可用的路由去访问目标主机。
• 原因:
• 通常是由于网络配置问题,如未配置网关或默认路由,或网络连接已断开。
4、 Unknown Host(未知主机):
• 说明:DNS 解析失败,无法将域名解析为 IP 地址。
• 原因:
• DNS 服务器配置错误。
• 域名输入错误或域名不存在。
5、General failure(一般性故障):
• 说明:一般性网络错误,通常与网络适配器或系统配置有关。
• 原因:
• 网络适配器未启用。
• 本地网络配置有误。
六、Ping命令的局限性
虽然Ping命令是一个非常有用的工具,但它也有一些局限性:
• ICMP可能被禁用:有些网络环境中,防火墙或安全策略可能会禁止ICMP请求,从而导致Ping请求失败,即使目标主机是可达的。
• 不适用于所有协议:Ping只测试IP层的连通性,不能直接用于测试应用层协议(如HTTP、FTP等)的服务质量。
• 不准确的延迟测量:Ping命令测量的是ICMP包的延迟,这不一定与实际应用层的延迟相同,因为不同类型的数据包在网络中可能会有不同的处理优先级。
总结
本文详细介绍了ping 命令通过发送 ICMP Echo Request 报文并接收 Echo Reply 报文,来检测两台设备之间的网络连通性的过程。通过
ping
命令,我们可以快速定位网络问题的来源,是网络诊断中非常有用的工具。
本文内容仅作为参考和学习交流使用,如有错误请麻烦指正。