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