Files
NE_YuR/network/check.md
2025-11-17 22:22:52 +08:00

9.3 KiB
Raw Blame History

以下是具体的验证步骤:

  1. 环境准备

  2. 配置 IP 地址:

    • 确保你的物理机(运行你程序的主机)有一个网络接口的 IP 地址在 192.168.254.0/24 网段,例如 192.168.254.1。
    • 设置一台虚拟机(如 VirtualBox 或 VMWare将其网络模式设置为“桥接模式”并桥接到你物理机上一步设置的网卡。
    • 在虚拟机中,手动配置 IP 地址,使其与你的物理机在同一网段,例如 192.168.254.3。 █ █
  3. 测试连通性: █

    • 在物理机上 ping 虚拟机的 IP (ping 192.168.254.3)。 █
    • 在虚拟机上 ping 物理机的 IP (ping 192.168.254.1)。 █
    • 确保两者可以互相 ping 通。 █ █
  4. 编译并准备运行: █

    • 确保你的代码已经编译,并且可执行文件位于 start/xnet_tiny/build/xnet。 █ █
  5. 验证 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 地址。

    1. 验证 ARP 超时重传:
      • 预期行为: 文档中设置的 ARP 缓存条目超时时间为 10 秒 (XARP_CFG_ENTRY_OK_TMO)。超时后,程序会重新发送 ARP 请求来确认对方是否还在。
      • 验证方法: 完成上一步后,让你和虚拟机的程序都保持运行。在 Wireshark 中,你应该能观察到你的程序大约每隔 10 秒就会发送一个 ARP
        请求到虚拟机的 IP (192.168.254.3)。
  5. 验证 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)。