Files
NE_YuR/network/arpicmplab/check.md
2025-12-25 14:33:29 +08:00

62 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

以下是具体的验证步骤:
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)。