介绍
在本实验中,你将探索 Linux 环境下的 IP 地址和网络可达性的基本概念。你将使用 ping 和 ip a 等常用命令行工具执行基本的网络诊断。这些练习将指导你测试本地 TCP/IP 堆栈的环回地址,识别你机器的私有 IP 地址,并验证公共互联网连接。
此外,你还将学习测试本地网络内的可达性,并通过探索组播通信来了解特殊用途的地址。通过完成这些步骤,你将掌握用于排查网络配置和验证 Linux 系统上不同层级 IP 可达性的实用技能。
使用 ping 127.0.0.1 测试本地 TCP/IP 堆栈
在此步骤中,你将学习如何使用环回地址测试你系统的网络配置。这是确保 TCP/IP 软件堆栈已安装并正常运行的基本诊断步骤,即使在检查任何物理网络连接之前也是如此。
环回地址(loopback address),几乎总是 127.0.0.1,是一个计算机用来指代自身的特殊 IP 地址。当你向 127.0.0.1 发送网络流量时,它不会流向任何网络硬件(如 Wi-Fi 或以太网卡)。相反,流量会在操作系统内部“环回”。这对于测试非常有用。
我们将使用 ping 命令,这是一个常用的网络工具,用于测试 IP 网络上主机的可达性。
现在,让我们 ping 环回地址。在你的终端中,当前位于 ~/project 目录,输入以下命令并按 Enter。
ping 127.0.0.1
你将看到来自 127.0.0.1 的连续回复。这表明你系统的 TCP/IP 堆栈正在按预期工作。每一行代表从本地机器收到的一个成功的“回显回复”(echo reply)。
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.050 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.052 ms
...
ping 命令将持续运行,直到你停止它。要停止命令,请按 **Ctrl+C**。停止后,你将看到 ping 统计信息的摘要。
这个成功的测试证实了你的虚拟机上的网络软件是可运行的。
使用 ip a 命令识别你的私有 IP 地址
在此步骤中,你将识别你虚拟机的私有 IP 地址。在确认内部 TCP/IP 堆栈使用环回地址正常工作后,下一步是找到你的系统用于与同一本地网络上的其他设备通信的地址。
大多数本地网络(例如此虚拟机所在的网络,或你的家庭/办公室网络)使用私有 IP 地址(private IP addresses)。这些是特殊的 IP 地址范围,无法从公共互联网访问。它们保留供内部使用。此系统可防止 IPv4 地址耗尽,并增加一层安全性。
要在现代 Linux 系统上查找你的 IP 地址,你可以使用 ip a 命令(它是 iproute2 套件的一部分,取代了旧的 ifconfig 命令)。
在你的终端中,运行以下命令:
ip a
输出将列出你系统上的所有网络接口。你正在寻找你的主网络接口,它通常命名为 eth0 或 ens...。IP 地址显示在以 inet 开头的行上。
以下是输出可能样子的示例。你的 IP 地址和接口名称可能会有所不同。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:0a:71:39 brd ff:ff:ff:ff:ff:ff
inet 172.16.50.171/24 brd 172.16.50.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe0a:7139/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:ae:2a:df:b8 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
在上面的示例中,私有 IP 地址是 172.16.50.171。现在,识别你系统的 inet 地址,并检查它是否属于标准的私有 IP 地址范围之一:
- Class A:
10.0.0.0to10.255.255.255 - Class B:
172.16.0.0to172.31.255.255 - Class C:
192.168.0.0to192.168.255.255
我们示例中的 IP 地址 172.16.50.171 属于 Class B 私有范围。你的 LabEx VM 也将拥有其中一个范围内的 IP 地址。
使用 ping 8.8.8.8 测试公网连通性
在此步骤中,你将验证你的虚拟机是否可以与公网通信。你已经确认了本地 TCP/IP 堆栈正常工作,并且找到了你的私有 IP 地址。现在,让我们看看你是否能够访问本地网络之外的服务器。
公有 IP 地址(Public IP addresses)是全局唯一的、可以在互联网上路由的地址。你的虚拟机使用其私有 IP 地址,无法直接在互联网上使用该地址。相反,网络上的路由器或网关会执行**网络地址转换 (NAT)**。当向互联网发送流量时,它会将你虚拟机的私有 IP 地址转换为公有 IP 地址,反之亦然,用于返回流量。
为了测试这一点,我们将 ping 一个知名的公有 IP 地址:8.8.8.8。这是 Google 的一个公共 DNS 服务器的地址,该服务器可用性很高,是测试互联网连接的标准选择。
在你的终端中,输入以下命令并按 Enter:
ping 8.8.8.8
你应该会看到一系列成功的回复。请注意,time= 的值通常比你 ping 环回地址时要高,因为数据包需要穿越互联网到达 Google 的服务器并返回。
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=58 time=2.34 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=2.30 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=2.35 ms
...
这些回复证实了你的虚拟机已成功连接到公网。按 Ctrl+C 停止 ping 命令。
通过 ping 未分配 IP 测试本地网络连通性
在此步骤中,你将尝试与本地网络上未分配给任何设备的 IP 地址进行通信。这表明通信要成功,目标 IP 不仅必须在正确的网络上,还必须由能够响应的主机(host)实际占用。
你已经找到了自己的私有 IP 地址。现在,你将选择同一子网(subnet)中一个几乎肯定未被使用的地址。子网是 IP 网络的一个逻辑细分。例如,如果你的 IP 地址是 172.16.50.171,掩码为 /24,那么你的子网包含从 172.16.50.1 到 172.16.50.254 的所有地址。
让我们选择一个不太可能被使用的 IP 地址。基于此环境中常见的 IP 地址 172.16.50.171,我们将尝试 ping 172.16.50.250。
在你的终端中,输入以下命令并按 Enter:
ping 172.16.50.250
这次,你将看不到任何回复。该命令似乎会挂起,发送数据包但没有响应。这是因为该 IP 地址上没有设备来响应 ping 请求。几秒钟后,按 Ctrl+C 停止该命令。你将看到一个指示 100% 数据包丢失的摘要。这种超时是确定主机在网络上不可达的常用方法。
PING 172.16.50.250 (172.16.50.250) 56(84) bytes of data.
^C
--- 172.16.50.250 ping statistics ---
23 packets transmitted, 0 received, 100% packet loss, time 22510ms
此输出确认 IP 地址必须在网络上处于活动状态才能被访问。按 Ctrl+C 停止该命令。
使用 ping 224.0.0.1 探索组播地址
在最后这个步骤中,你将探索一种不同的 IP 地址类别:组播(multicast)。到目前为止,你已经接触了单播地址(unicast addresses),其中通信是点对点(one-to-one)的(例如,你的机器到环回地址,你的机器到公网服务器等)。
组播(Multicast)是一种一对多(one-to-many)的通信方式。一个数据包从一个源发送到一个特殊的组播地址,网络基础设施会将其传递给所有“订阅”了该地址的设备。这比向每个单独的目的地发送单独的数据包要高效得多。
从 224.0.0.0 到 239.255.255.255 的 IP 地址范围保留给组播(D 类地址)。我们将使用一个特殊的、广为人知的组播地址:224.0.0.1。这是“所有主机”(all-hosts)组地址。本地网络段上任何支持组播的主机都应该响应发送到此地址的流量。
让我们看看当你 ping 它时会发生什么。在你的终端中,运行:
ping 224.0.0.1
理论上,本地网络上的任何支持组播的主机都应该响应发送到“所有主机”组的 ping。你可能会期望看到来自你自己的机器的回复。然而,在许多现代 Linux 环境中,出于安全或网络性能原因,默认情况下会忽略发送到组播地址的 ICMP echo 请求。
观察输出。你很可能会看到没有回复。几秒钟后,按 Ctrl+C 停止该命令。摘要将显示 100% 的数据包丢失。
PING 224.0.0.1 (224.0.0.1) 56(84) bytes of data.
^C
--- 224.0.0.1 ping statistics ---
14 packets transmitted, 0 received, 100% packet loss, time 13312ms
这个结果展示了一个重要的实际网络原理:理论标准(如响应所有主机组播)在实践中并非总是被实现或启用。系统配置、防火墙或内核设置可能会改变预期的行为。按 Ctrl+C 停止 ping。
总结
在此实验中,你使用常见的命令行工具,在 Linux 环境中探索了基础的 IP 地址和网络可达性概念。你学会了如何通过 ping 环回地址(loopback address)127.0.0.1 来验证本地 TCP/IP 堆栈的完整性,以及如何使用 ip a 命令来识别你系统的私有 IP 地址,以便进行本地网络通信。
此外,你还通过 ping 公网 IP 地址 8.8.8.8 来测试与公共互联网的可达性,并观察了 ping 未分配的本地 IP 地址时的响应,从而练习了诊断网络连接。实验最后,你还探索了特殊地址类型,特别是使用 ping 224.0.0.1 来理解网络上用于一对多通信的组播地址(multicast addresses)的功能。



