以下是具体的验证步骤: 1. 环境准备 1. 配置 IP 地址: * 确保你的物理机(运行你程序的主机)有一个网络接口的 IP 地址在 192.168.254.0/24 网段,例如 192.168.254.1。 * 设置一台虚拟机(如 VirtualBox 或 VMWare),将其网络模式设置为“桥接模式”并桥接到你物理机上一步设置的网卡。 * 在虚拟机中,手动配置 IP 地址,使其与你的物理机在同一网段,例如 192.168.254.3。 █ █ 2. 测试连通性: █ * 在物理机上 ping 虚拟机的 IP (ping 192.168.254.3)。 █ * 在虚拟机上 ping 物理机的 IP (ping 192.168.254.1)。 █ * 确保两者可以互相 ping 通。 █ █ 3. 编译并准备运行: █ * 确保你的代码已经编译,并且可执行文件位于 start/xnet_tiny/build/xnet。 █ █ 2. 验证 ARP 协议 ▀ ARP 协议负责将 IP 地址解析为 MAC 硬件地址。 1. 启动抓包: 在你的物理机上打开 Wireshark,选择连接虚拟机的那个网络接口,开始抓包。你可以使用过滤条件 arp 来只看 ARP 包。 2. 运行你的程序: 打开一个终端,进入 network 目录,然后运行你的可执行文件: 1 ./start/xnet_tiny/build/xnet 3. 验证无回报 ARP (Gratuitous ARP): * 预期行为: 程序启动时,会立刻发送一个 ARP 请求来宣告自己的 IP 地址 (192.168.254.2)。 * 验证方法: 在 Wireshark 中,你应该能立刻看到一个源地址是你本机 MAC、内容为 "Who has 192.168.254.2? Tell 192.168.254.2" 的 ARP 包。 4. 验证 ARP 响应: * 预期行为: 当其他设备请求你程序的 IP 地址时,你的程序应该回复其 MAC 地址。 * 验证方法: 在虚拟机中,ping 你程序模拟的 IP 地址: 1 ping 192.168.254.2 * 在 Wireshark 中,你应该能看到: 1. 一个来自虚拟机的 ARP 请求:"Who has 192.168.254.2? Tell 192.168.254.3"。 2. 一个来自你程序的 ARP 响应:"192.168.254.2 is at [你的MAC地址]"。 * 同时,检查你程序的终端输出,看是否打印出了 "learned mac addr" 的信息,表示它学习到了虚拟机的 MAC 地址。 5. 验证 ARP 超时重传: * 预期行为: 文档中设置的 ARP 缓存条目超时时间为 10 秒 (XARP_CFG_ENTRY_OK_TMO)。超时后,程序会重新发送 ARP 请求来确认对方是否还在。 * 验证方法: 完成上一步后,让你和虚拟机的程序都保持运行。在 Wireshark 中,你应该能观察到你的程序大约每隔 10 秒就会发送一个 ARP 请求到虚拟机的 IP (192.168.254.3)。 3. 验证 ICMP (Ping) 协议 ICMP 协议用于网络控制和诊断,ping 就是基于 ICMP 的。 1. 启动抓包: 在 Wireshark 中,使用过滤条件 icmp。 ▄ █ 2. 运行程序并 Ping: 保持你的 xnet 程序运行。在虚拟机中,ping 你程序的 IP 地址: █ █ 1 ping 192.168.254.2 █ █ 3. 验证 ICMP 响应: █ * 预期行为: 你的程序应该能响应来自虚拟机的 ICMP Echo Request (ping 请求)。 █ * 验证方法: █ 1. 在虚拟机的终端里,你应该能看到 ping 命令成功接收到回复,没有丢包。 █ 2. 在 Wireshark 中,你应该能看到成对的 ICMP 包: █ * Echo (ping) request 从虚拟机 (192.168.254.3) 发往你的程序 (192.168.254.2)。 * Echo (ping) reply 从你的程序 (192.168.254.2) 回复给虚拟机 (192.168.254.3)。