使用 Linux 的 ping 命令诊断网络连接问题
source link: https://www.51cto.com/article/740228.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
如今,联网计算机变得十分普遍,以至于我们大多数人都理所当然地认为,房间一侧的计算机可以连接上房间另一侧的计算机,更不用说能连接上世界的另一端的计算机了。如此,网络使互联网、云、文件共享、媒体流、远程管理、打印等服务成为可能。但是当网络出现问题时,有时很难诊断到底是其中哪一环节出现了问题。下面,我们就来介绍:网络连接最基本的诊断工具之一—— 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 1PING 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 0msrtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms
在你确认本地网络栈已启动并运行后,接下来,你可以 ping
你的路由器的 IP 地址。路由器的 IP 地址通常以 192.168
或 10
开头。实际的 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.8PING 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 ms64 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 1000msrtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms
当你连不上一个网站时,你可以查询全球 DNS 网络,以找出其主机服务器的地址,然后 ping
该服务器。这至少可以告诉你,网站不通的原因是主机已关闭,或者只是 Web 服务器问题。
例如,假设你尝试访问 example.com
,但是发现失败了。首先,使用 host
命令找到 example.com
的 IP 地址:
$ host example.comexample.com has address 93.184.216.34example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946example.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 也有;甚至还有一个图形界面的 ping
:gping
,它可用于 Linux、macOS 和 Windows。你可以在 GitHub 上找到更多有关 gping
的信息。
一起来学习吧
ping
命令很简单,但它可以帮你诊断网络连接问题。下次再遇到网络连接问题时,让 ping
命令成为你解决问题的第一个工具吧。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK