使用 Linux 的 ping 命令诊断网络连接问题
创始人
2024-03-02 13:21:25
0

在本文中,我们将讨论网络连接最基本的诊断工具之一:ping 命令。

如今,联网计算机变得十分普遍,以至于我们大多数人都理所当然地认为,房间一侧的计算机可以连接上房间另一侧的计算机,更不用说能连接上世界的另一端的计算机了。如此,网络使互联网、云、文件共享、媒体流、远程管理、打印等服务成为可能。但是当网络出现问题时,有时很难诊断到底是其中哪一环节出现了问题。下面,我们就来介绍:网络连接最基本的诊断工具之一—— ping 命令。

基本的 ping 命令

当你无法访问本地网络上的计算机或互联网上的服务器时,你可以 ping 它的 IP 地址。ping 将 互联网控制报文协议 Internet Control Message Protocol (ICMP)数据包发送到目标 IP 地址。当我们要对网路连接状况进行判断时,ICMP 是个非常有用的协议,本质上 ICMP 是一个响应和应答信号。

让我们由近及远地进行故障排除。请先 ping 你自己的计算机,以确保你的计算机正在运行 网络栈 networking stack 。你正在操作的计算机称为 主机 localhost ,本地回环地址是:127.0.0.1

ping 命令能用主机的 主机名 hostname 、IP 地址(即 127.0.0.1)或者仅仅用简写 0 来表示 “主机”。

你可以使用 -c 选项,来控制发送数据包的 次数 count 。

$ ping 0 -c 1
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms

--- 0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms

在你确认本地网络栈已启动并运行后,接下来,你可以 ping 你的路由器的 IP 地址。路由器的 IP 地址通常以 192.16810 开头。实际的 IP 地址取决于路由器的配置。

当你没有指定要发送多少次请求时,你可以用 Ctrl+C,来终止 ping 的运行。

$ ping 192.168.0.1 
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.100: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=3 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=4 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=5 Redirect Host(New nexthop: 192.168.0.1)
^C

如果你能 ping 通路由器,则表示你的有线或无线连接能正常工作。

对于你的局域网上的其他主机呢?你可以 ping 各种设备,但是并非所有设备都能保证响应,因为一些设备会丢弃 ICMP 数据包,但许多设备会做出响应。例如,我可以 ping 我的打印机:

$ ping 192.168.0.4 

ping 路由器以外的其他服务器

在确定你自己的网络内部都能连通以后,你还可以 ping 通到路由器以外的其他服务器。同样地,并非所有服务器都能接收 ICMP 数据包,更不用说响应 ICMP 数据包了。然而,也有一些服务器可以接收并响应 ICMP 数据包,而在互联网中的一个重要服务器是 域名服务器 nameserver 。

谷歌的 域名解析服务器 DNS server 的 IP 地址很容易记住,而且它会响应 ping 请求:

$ ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.5 ms

--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms

当你连不上一个网站时,你可以查询全球 DNS 网络,以找出其主机服务器的地址,然后 ping 该服务器。这至少可以告诉你,网站不通的原因是主机已关闭,或者只是 Web 服务器问题。

例如,假设你尝试访问 example.com,但是发现失败了。首先,使用 host 命令找到 example.com 的 IP 地址:

$ host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0

然后,ping 该网站的的 IP 地址:

$ ping 93.184.216.34 -c 1

使用 IPv6

ping 不仅可以使用 IPv4,还能使用 IPv6。可以通过指定 -4-6 选项,来只使用 IPv4 或 IPv6。

设置数据包大小

你可以使用 -s 选项,来更改要发送的 ICMP 数据包的 大小 size 。默认的数据大小为 56 字节,加上 8 字节包头,总共得到 64 字节的 ICMP 数据包。以下的示例将发送的 ICMP 数据包大小修改为 35+8=43 个字节:

$ ping -s 35 -c 5 8.8.8.8

你可以使用 -D 选项,使得在终端中的每个 ping 回复之前,先打印出当前的时间戳。该时间戳为 UNIX 时间戳,加上微秒:

$ ping -D 8.8.8.8 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1634013430.297468] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
[1634013431.298738] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.1 ms

设置时间间隔/长短

你可以使用 -i 选项,来更改两次 ping 请求之间的 时间间隔 interval 。以下的示例将 ping 间隔更改为 2 秒:

$ ping -i 2 

你也可以使用 -w 选项,来在一段时间后终止 ping,单位为秒。

$ ping -w 6

ping 的变体

ping 有很多变体。例如,iputils 包提供了 ping 命令;Busybox 也有ping 命令;BSD 也有;甚至还有一个图形界面的 pinggping,它可用于 Linux、macOS 和 Windows。你可以在 GitHub 上找到更多有关 gping 的信息。

一起来学习吧

ping 命令很简单,但它可以帮你诊断网络连接问题。下次再遇到网络连接问题时,让 ping 命令成为你解决问题的第一个工具吧。


via: https://opensource.com/article/21/10/linux-ping-command

作者:Seth Kenlon 选题:lujun9972 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

Ubuntu连不上网,pi...
一、问题 ping: baidu.com: 未知的名称或服务 pi...
2025-06-01 05:13:47
虚拟机和主机ping不通的...
​  虚拟机和主机之间的网络连接是许多虚拟化应用程序的一个重要组成...
2025-05-29 07:08:49
如何在CentOS中使用P...
网络故障排查是运维人员和开发者必备的基础技能,在CentOS系统中...
2025-03-07 06:51:32
捕捉无法回应PING请求的...
在Python中,可以使用ping3库来实现发送PING请求并捕获...
2025-01-12 18:00:28
不写JSON:无限递归(S...
在使用Jackson库将对象转换为JSON时,如果对象之间存在循环...
2025-01-10 10:31:02
不能在端口9200上使用c...
如果无法使用curl命令在端口9200上获取响应,但可以通过pin...
2024-12-27 09:00:59

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...