Linux中ping命令简介
1. 概述
在这个快速教程中,我们将探索 Linux **ping **命令如何帮助我们诊断和解决网络问题。
2. 语法
让我们先来看看基本语法:
ping [OPTIONS] DESTINATION
ping (Packet INInternet Groper)命令使用 ICMP(Internet 控制消息)协议将数据包发送到服务器。
为了说明ping命令,让我们尝试 ping www.blogdemo.com :
$ ping www.blogdemo.com
PING www.blogdemo.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=203.928 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=181.025 ms
^C
--- www.blogdemo.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 181.025/192.476/203.928/11.452 ms
首先,ping命令根据给定的域名确定 IP 地址。
接下来,它**开始向服务器发送 ICMP 数据包。**当我们的数据包到达目的地时,服务器会做出响应,ping命令会在我们的控制台上打印一行。
默认情况下,它会打印包含以下信息的行:
- 发送的字节数,默认为64个ICMP数据字节
- 目标 IP 地址,在本例中为104.18.63.78
- ICMP 数据包序列号,例如icmp_seq=0
- Time to live (TTL),表示丢包前的跳数,这里是54
- Ping 命令往返时间,在本例中为203.928 毫秒
因此,我们可以看到它连续发送 ICMP 数据包,我们必须使用Control + C (Windows) 或Command + C (Mac) 手动停止发送数据包。
此外,它还显示由于网络问题而丢失的数据包百分比。
3. 基本用法
现在我们已经看到了默认输出,是时候看看一些实际的选项了。
3.1. 指定数据包之间的间隔
默认情况下,** ping命令每秒发送一个新数据包。** 让我们使用 -i 标志来更改 ping 间隔:
$ ping -i 3 www.blogdemo.com
PING www.blogdemo.com (104.18.62.78): 56 data bytes
64 bytes from 104.18.62.78: icmp_seq=0 ttl=54 time=190.037 ms
64 bytes from 104.18.62.78: icmp_seq=1 ttl=54 time=186.061 ms
64 bytes from 104.18.62.78: icmp_seq=2 ttl=54 time=187.458 ms
^C
--- www.blogdemo.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 186.061/187.852/190.037/1.647 ms
现在没有输出可以证明这一点,但是通过运行,我们可以看到我们每三秒得到一个新的行输出。
3.2. 控制数据包数量
在实践中,我们经常使用*-c*选项来指定我们想要发送到目标服务器的 ICMP 数据包的数量:
$ ping -c 3 www.blogdemo.com
PING www.blogdemo.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=191.813 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=177.645 ms
64 bytes from 104.18.63.78: icmp_seq=2 ttl=54 time=186.750 ms
--- www.blogdemo.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 177.645/185.403/191.813/5.862 ms
正如我们在上面看到的,我们只发送了 3 个 ICMP 数据包,而不是一个连续的数据包流。
3.3. 指定数据包大小
此外, ping还允许我们使用*-s*标志指定数据包大小:
$ ping -s 40 -c 4 www.blogdemo.com
PING www.blogdemo.com (104.18.63.78): 40 data bytes
48 bytes from 104.18.63.78: icmp_seq=0 ttl=54 time=180.801 ms
48 bytes from 104.18.63.78: icmp_seq=1 ttl=54 time=181.822 ms
48 bytes from 104.18.63.78: icmp_seq=2 ttl=54 time=175.019 ms
48 bytes from 104.18.63.78: icmp_seq=3 ttl=54 time=172.405 ms
--- www.blogdemo.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 172.405/177.512/181.822/3.927 ms
在这里,我们在上面的示例中同时使用了*-s和-c*选项。结果,它只发送了四个数据包,每个数据包大小为 40 字节(ICMP:48 字节)。
这可用于确定网络中不同数据包大小的延迟。例如,在许多复杂的网络中,当数据包大小超过 1500 字节时,我们就会遇到问题。通过更改数据包大小,我们可以确定我们系统的理想数据包大小。
4. 高级用法
现在让我们看一下更高级的选项。
4.1. 指定超时
在实践中,在拥塞的网络上,等待特定持续时间后使响应超时可能很有用。我们可以使用*-W*选项来做到这一点:
$ ping -c 4 -W 2 www.blogdemo.com
PING www.blogdemo.com (104.18.63.78): 56 data bytes
--- www.blogdemo.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss, 4 packets out of wait time
round-trip min/avg/max/stddev = 192.397/195.137/198.573/2.480 ms
首先,我们将请求发送到服务器。然后,我们等了两秒钟才收到响应。
由于我们网络中的低延迟,我们成功接收了所有数据包,没有任何数据包丢失。
4.2. 使用 Ping 淹没网络
有时我们想通过发送尽可能多的数据包来测试网络性能。
为了说明,让我们使用*-f选项运行ping*命令 :
$ ping -f localhost
PING localhost (127.0.0.1): 56 data bytes
..Request timeout for icmp_seq 250
.Request timeout for icmp_seq 251
.Request timeout for icmp_seq 252
.Request timeout for icmp_seq 253
...
^C
--- localhost ping statistics ---
271 packets transmitted, 250 packets received, 7.7% packet loss
round-trip min/avg/max/stddev = 0.010/0.019/0.049/0.005 ms
在这种特殊情况下,我们发送了 271 个数据包,平均往返时间为 0.019 秒。
4.3. 检索网络摘要
接下来,我们可以在*-q*标志的帮助下使用命令检索网络摘要 :
首先,让我们使用*-c和-q标志运行ping*命令:
$ ping -c 4 -q www.blogdemo.com
PING www.blogdemo.com (104.18.62.78): 56 data bytes
--- www.blogdemo.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 180.232/189.512/206.033/10.120 ms
因此,此选项用于在安静模式下运行命令。在这里,我们只得到一个摘要,我们看不到正在发送的单个数据包的详细信息。
4.4. 听得见的 Ping 使用情况
让我们使用*-a标志以可听模式运行ping*实用程序:
$ ping -a www.google.com
PING www.google.com (172.217.163.164): 56 data bytes
64 bytes from 172.217.163.164: icmp_seq=0 ttl=54 time=107.001 ms
64 bytes from 172.217.163.164: icmp_seq=1 ttl=54 time=52.143 ms
64 bytes from 172.217.163.164: icmp_seq=2 ttl=54 time=54.163 ms
^C
--- www.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 52.143/71.102/107.001/25.398 ms
在这里,每当我们的客户端可以访问主机服务器时,我们都会听到哔声。