测试网络连接性

LinuxBeginner
立即练习

介绍

网络连接是任何现代计算系统的基本方面。当出现问题时,知道如何诊断它们是任何开发者或系统管理员的一项关键技能。本 Lab 将指导你使用一系列基本的 Linux 命令来系统地测试和排查网络连接问题。

你将学习如何使用 ping 来检查基本可达性,使用 traceroute 来映射数据在网络上传输的路径,使用 nslookup 来验证 DNS 解析,以及使用 ip route 来检查系统的路由表。完成本 Lab 后,你将对诊断常见的网络问题有一个坚实的基础。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 97%。获得了学习者 100% 的好评率。

使用 ping 127.0.0.1 命令测试本地回环地址

在此步骤中,你将使用 ping 命令来测试本地机器上的网络堆栈(network stack)。这是任何网络故障排除过程中最基本和最关键的第一步。

ping 命令向目标主机发送 ICMP (Internet Control Message Protocol) ECHO_REQUEST 数据包并等待 ECHO_RESPONSE。地址 127.0.0.1 是标准的“localhost”或“loopback”(本地回环)地址,它始终指向你当前所在的机器。成功 ping 本地回环地址确认了你系统的网络软件正在正常运行。

我们将使用 -c 4 选项,仅发送 4 个数据包,以防止该命令无限期运行。

在你的终端中执行以下命令:

ping -c 4 127.0.0.1

你应该会看到类似以下的输出,表明数据包已成功发送和接收。

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.047 ms

--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3074ms
rtt min/avg/max/mdev = 0.045/0.047/0.049/0.001 ms

0% packet loss(0% 数据包丢失)这一行确认了本地网络接口工作正常。

使用 ping 172.60.0.1 命令测试网关

在此步骤中,你将测试与本地网络网关(gateway)的连通性。网关是连接你的本地网络到其他网络(包括互联网)的路由器。成功 ping 网关确认了你的机器可以与本地网络通信。

首先,你需要找到默认网关的 IP 地址。你可以使用 ip route 命令并过滤出 "default" 路由来实现这一点。

运行以下命令来查找你的网关:

ip route | grep default

输出将显示你的默认路由。紧跟在 via 后面的 IP 地址就是你的网关地址。在本 Lab 环境中,它通常是 172.60.0.1

default via 172.60.0.1 dev eth1

现在,使用 ping 命令来测试到该网关地址的连通性。记得使用 -c 4 选项。

ping -c 4 172.60.0.1

成功的输出将如下所示:

PING 172.60.0.1 (172.60.0.1) 56(84) bytes of data.
64 bytes from 172.60.0.1: icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from 172.60.0.1: icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from 172.60.0.1: icmp_seq=3 ttl=64 time=0.052 ms
64 bytes from 172.60.0.1: icmp_seq=4 ttl=64 time=0.053 ms

--- 172.60.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3060ms
rtt min/avg/max/mdev = 0.051/0.057/0.075/0.010 ms

这个结果确认了你的机器可以与本地网络网关通信。

使用 traceroute google.com 命令进行路由跟踪

在此步骤中,你将使用 traceroute 来追踪从你的机器到外部目标(如 google.com)的网络路径。此命令有助于识别连接路径中可能发生故障的位置。

traceroute 命令默认可能未安装。首先,更新你的软件包列表,然后安装它。在安装新软件包之前运行 sudo apt-get update 是一个好习惯。

sudo apt-get update

现在,安装 traceroute 实用程序。-y 标志会自动对任何提示回答“是”。

sudo apt-get install -y traceroute

安装完成后,你可以运行 traceroutegoogle.com。这将向你显示数据包到达目标所经过的路由器(跳数,hops)序列。

traceroute google.com

输出将列出每一跳、其 IP 地址以及数据包到达该点的往返时间(round-trip time)。输出会有所不同,但大致如下所示(为简洁起见我们已截断):

traceroute to google.com (142.250.191.46), 30 hops max, 60 byte packets
 1  uswest5 (172.60.0.1)  0.031 ms  0.010 ms  0.010 ms
 2  10.220.8.54 (10.220.8.54)  0.289 ms 10.220.8.38 (10.220.8.38)  0.275 ms 10.220.8.54 (10.220.8.54)  0.263 ms
 3  11.73.4.217 (11.73.4.217)  2.134 ms 11.73.4.241 (11.73.4.241)  2.141 ms 11.73.4.185 (11.73.4.185)  1.409 ms
 ...
 8  142.251.65.127 (142.251.65.127)  4.316 ms  2.849 ms  4.335 ms
 9  nuq04s42-in-f14.1e100.net (142.250.191.46)  4.296 ms  1.556 ms  2.964 ms

每一行代表路径上的一个路由器。星号 * * * 表示该路由器未及时响应探测(probe)。

使用 nslookup google.com 命令检查 DNS 解析

在此步骤中,你将检查域名系统(DNS)解析。DNS 是互联网的电话簿;它将人类可读的域名(如 google.com)转换为机器可读的 IP 地址(如 142.250.199.14)。如果 DNS 无法工作,即使你的网络连接其他方面都正常,你也无法通过名称访问网站。

nslookup 命令是用于查询 DNS 服务器以获取此信息的工具。

运行以下命令来查找 google.com 的 IP 地址:

nslookup google.com

输出会告诉你哪个 DNS 服务器响应了你的请求,以及与该域名关联的 IP 地址。

Server:  127.0.0.11
Address: 127.0.0.11#53

Non-authoritative answer:
Name: google.com
Address: 142.250.191.46
Name: google.com
Address: 2607:f8b0:4005:80f::200e

ServerAddress 行显示了你的系统正在使用的 DNS 解析器(resolver)。Non-authoritative answer 部分提供了 google.com 的 IPv4(Address: 142.250.191.46)和 IPv6(Address: 2607:...)地址。像这样的成功响应确认了 DNS 解析正在正常工作。

使用 ip route show 解决连接问题

在此步骤中,你将检查内核的 IP 路由表(routing table)。路由表是一组规则,你的系统使用这些规则来确定网络流量的发送目的地。不正确或缺失的路由是连接问题的常见原因。

ip route show 命令(或其简写别名 ip r)会显示主路由表。这是诊断底层网络问题最重要的命令之一。

执行以下命令查看你的路由表:

ip route show

输出将列出你的系统所知道的所有路由。

default via 172.60.0.1 dev eth1
172.60.0.0/16 dev eth1 proto kernel scope link src 172.60.1.160

最关键的一行是 default 路由。

  • default via 172.60.0.1 dev eth1: 此行表示,对于表中未明确列出的任何目标,流量将通过网络接口 eth1 发送到网关 172.60.0.1(你在步骤 2 中 ping 的地址)。

如果缺少此默认路由,你的系统将不知道如何将流量发送到互联网,并且像 ping google.com 这样的命令会以“Network is unreachable”(网络不可达)错误失败。理解此表是解决此类问题的关键,通常需要使用 sudo ip route add default via <gateway_ip> 这样的命令来添加正确的默认路由。

总结

恭喜你完成此实验(Lab)!你学习了一种系统化的方法来测试和诊断 Linux 系统上的网络连接问题。

你练习使用了以下基本命令:

  • ping: 用于测试到本地机器和网络网关的可达性。
  • ip route: 用于查找你的默认网关并检查系统的路由表。
  • traceroute: 用于追踪数据包到达远程主机所经过的路径,以识别潜在的故障点。
  • nslookup: 用于验证域名系统(DNS)是否正确地将主机名解析为 IP 地址。

这种逻辑顺序——从自身,到本地网络,再到互联网,最后检查名称解析——为你排查可能遇到的几乎任何网络问题提供了一个强大的框架。