介绍
在本实验中,你将探索 Linux 环境下网络层(Layer 3)与数据链路层(Layer 2)之间的基本交互。你将使用常用的 ping 和 arp 命令行工具来观察地址解析协议(ARP)的运行。主要目标是理解你的系统如何为本地网络上的设备解析 IP 地址到物理 MAC 地址,以及如何处理与远程主机的通信。
你将首先检查 ARP 缓存的状态。然后,你将使用 ping 与本地设备(你的默认网关)和远程设备 (google.com) 进行通信。通过观察这些操作之前和之后的 ARP 缓存,你将了解你的系统如何使用 MAC 地址进行本地通信,以及如何依赖默认网关进行远程流量传输。
使用 arp -a 查看初始 ARP 缓存
在此步骤中,你将检查系统地址解析协议 (ARP) 缓存的初始状态。ARP 缓存是至关重要的网络组件,它存储同一本地网络上设备之间的第 3 层 (IP) 地址与其对应的第 2 层 (MAC) 地址之间的映射关系。
首先,让我们使用 arp 命令检查 ARP 缓存的当前状态。-a 标志指示命令显示所有当前条目。
在你的终端中,它已位于 ~/project 路径下,执行以下命令:
arp -a
你可能会看到一个或多个条目。默认网关通常已存在于缓存中。你的输出可能类似于:
_gateway (172.16.50.253) at ee:ff:ff:ff:ff:ff [ether] on eth0
? (172.16.50.251) at ee:ff:ff:ff:ff:ff [ether] on eth0
值得注意的是,由于 LabEx 环境的虚拟化特性,并非总是能够完全清除 ARP 缓存。因此,你很可能会从一开始就看到一个预先填充的缓存。在典型的非虚拟化设置中,在第一次通信之前,你更有可能看到一个空的或
<incomplete>条目用于网关。
此输出显示了我们 ARP 缓存的初始状态。它将作为我们下一步操作的基准,届时我们将触发网络活动并观察此表的使用方式。
Ping 本地设备以触发 ARP 请求
在此步骤中,你将使用 ping 命令与本地网络上的另一台设备发起通信。如果需要,此操作将使用地址解析协议(ARP)映射。当你的系统尝试向本地 IP 地址发送数据包时,它会首先检查其 ARP 缓存。如果找不到相应的 MAC 地址,它会广播一个 ARP 请求。如果条目已存在,它将使用缓存的 MAC 地址。
要执行此操作,我们首先需要确定本地网络上设备的 IP 地址。在此环境中,最可靠的目标是你的默认网关(虚拟路由器)。你可以通过检查路由表来找到其 IP 地址。
在你的终端中,运行以下命令来显示路由表:
ip route show
输出将显示你的默认路由。查找以 default via 开头的行。那里列出的 IP 地址就是你的网关。
default via 172.16.50.253 dev eth0 ...
...
从上面的示例输出中,网关的 IP 地址是 172.16.50.253。现在,使用此 IP 地址发送几个 ping 数据包。-c 4 选项告诉 ping 发送 4 个数据包然后停止。将 172.16.50.253 替换为你找到的实际网关 IP。
ping -c 4 172.16.50.253
你应该会看到每个数据包都有成功的回复,这证实了你的系统能够与网关通信。
PING 172.16.50.253 (172.16.50.253) 56(84) bytes of data.
64 bytes from 172.16.50.253: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 172.16.50.253: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 172.16.50.253: icmp_seq=3 ttl=64 time=0.055 ms
64 bytes from 172.16.50.253: icmp_seq=4 ttl=64 time=0.045 ms
--- 172.16.50.253 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3060ms
rtt min/avg/max/mdev = 0.045/0.056/0.066/0.007 ms
这个简单的操作已经迫使你的系统执行了一次 ARP 查询。在下一步中,我们将再次检查 ARP 缓存以查看结果。
验证 ARP 缓存中的本地 IP-MAC 地址解析
在此步骤中,你将重新检查 ARP 缓存,以查看你之前执行的 ping 命令的直接结果。由于你的系统成功与本地网关通信,它必须拥有一个有效的 IP 到 MAC 地址映射。让我们看看表是否发生了变化。
让我们再次检查 ARP 缓存。在你的终端中,运行与第一步相同的命令:
arp -a
这一次,只有当条目尚未完成时,输出才会不同。在我们的例子中,由于条目在步骤 1 中已经解析,输出将是相同的。
_gateway (172.16.50.253) at ee:ff:ff:ff:ff:ff [ether] on eth0
? (172.16.50.251) at ee:ff:ff:ff:ff:ff [ether] on eth0
将此输出与步骤 1 的输出进行比较。它们是相同的。这是因为在发送 ping 之前,网关的 ARP 条目已经完整。你的系统不需要执行新的 ARP 请求;它只是依赖于缓存中已有的信息。
这展示了一个关键原则:ARP 缓存可防止重复的 ARP 请求。如果条目是 <incomplete> 或缺失的,这个 ping 命令就会填充它,你就会在输出中看到变化。
Ping 外部主机以涉及默认网关
在此步骤中,你将从与本地设备通信转向与互联网上的主机通信。这展示了一个基本的网络概念:你的计算机如何使用其默认网关来访问其自身本地网络之外的目的地。
当目标 IP 地址与你的计算机不在同一子网时,你的系统知道它无法直接发送数据包。相反,它必须将数据包发送到其指定的默认网关。网关(路由器)负责将数据包转发到互联网上的最终目的地。
为了实际演示这一点,你将 ping 一个知名的外部主机 google.com。
在你的终端中,执行以下命令:
ping -c 4 google.com
你将看到域名 google.com 被解析为一个 IP 地址,然后你将收到来自该地址的回复。
PING google.com (142.250.189.174) 56(84) bytes of data.
64 bytes from sfo03s24-in-f14.1e100.net (142.250.189.174): icmp_seq=1 ttl=118 time=4.38 ms
64 bytes from sfo03s24-in-f14.1e100.net (142.250.189.174): icmp_seq=2 ttl=118 time=4.40 ms
64 bytes from sfo03s24-in-f14.1e100.net (142.250.189.174): icmp_seq=3 ttl=118 time=4.35 ms
64 bytes from sfo03s24-in-f14.1e100.net (142.250.189.174): icmp_seq=4 ttl=118 time=4.39 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 4.353/4.380/4.401/0.017 ms
尽管你成功地与 google.com 通信了,但你的计算机并没有为 Google 的 IP 地址执行 ARP 请求。它只需要其本地网关的 MAC 地址,而这个地址它已经在之前的步骤中找到了。在下一步中,你将分析 ARP 缓存以确认此行为。
分析 ARP 缓存以进行远程通信
在最后一步中,你将再次分析 ARP 缓存,以确认你的系统如何处理与远程主机的通信。这将巩固本地和远程网络通信之间的区别,并强调默认网关的作用。
既然你已成功 ping 了 google.com,让我们再次检查 ARP 缓存。在你的终端中,运行 arp -a 命令:
arp -a
仔细检查输出。它应该与之前步骤中的缓存状态相同。
_gateway (172.16.50.253) at ee:ff:ff:ff:ff:ff [ether] on eth0
? (172.16.50.251) at ee:ff:ff:ff:ff:ff [ether] on eth0
你会注意到,没有 google.com 或其 IP 地址(例如 142.250.189.174)的条目。唯一存在的关键条目仍然是你的默认网关的条目。
这是本次实验的关键收获。ARP 在第 2 层(Layer 2)运行,仅用于查找本地网络段上的 MAC 地址。当你的计算机向远程目的地发送数据包时,它知道目的地不是本地的,因此它将数据包发送到下一跳设备的 MAC 地址——即你的默认网关。然后,路由器负责将 IP 数据包转发到其最终目的地。你的计算机不需要知道 google.com 的 MAC 地址;它只需要知道可以为其转发数据包的设备的 MAC 地址。
总结
在本次实验中,你通过在 Linux 中使用 ping 和 arp 命令,探索了第 3 层(IP)和第 2 层(MAC)网络之间的基本交互。你首先使用 arp -a 检查了地址解析协议(ARP)缓存的状态,观察到它可能已经包含默认网关等关键设备的条目。通过 ping 本地网关,你确认了系统使用此缓存信息进行本地通信,避免了冗余的地址查找。
此外,你还研究了与远程主机的通信有何不同。当你 ping 一个外部 IP 地址时,你观察到系统不会为最终目的地执行 ARP 请求。相反,它会将数据包发送到默认网关,以便在本地网络之外进行路由。对 ARP 缓存的最终分析强化了这一概念,表明没有为远程主机添加条目。唯一相关的条目仍然是默认网关的条目,突显了它作为所有发往外部网络流量的中间件的关键作用。



