调试
本地测试¶
在编写 TFTP 协议的客户端和服务端的时候,可以在本机搭建一个虚拟的和评测一样的网络拓扑,这样就可以在虚拟网络中按照评测流程一步一步进行,同时观察程序的行为,可以大大地加快代码的调试。
本地测试主要分为两个部分:首先,搭建网络拓扑,将网络中各个设备连接好;其次,在各个设备上,运行相应的软件,并配置好网络。
网络拓扑的具体过程见附录中的拓扑搭建文档。
快捷脚本¶
实验仓库中,在 Setup/tftp
目录下提供了 netns 配置脚本以及评测脚本,你可以参考里面的内容进行配置。
具体来说,可以按照下列的顺序在本地进行评测:
- 在
Homework/tftp/r2/
和Homework/tftp/pc1
目录下用make
命令构建你编写的 TFTP 程序,确认系统内没有正在运行的 TFTP 服务端(进程名为 server)、TFTP 客户端(进程名为 client)以及 tftpd 程序(进程名为 in.tftpd 或者 tftpd); - 打开一个命令行窗口,进入
Setup/tftp/setup
目录,执行sudo ./setup-netns.sh
配置 netns 环境,然后执行sudo ./start-standard-tftpd-r2.sh
在 R2 上启动 TFTP 标准服务端,不要退出; - 再打开一个命令行窗口,进入
Setup/tftp/test
目录,依次执行sudo ./test2.sh
和sudo ./test3.sh
,对应第二项和第三项测试; - 回到第一个命令行窗口,按 Ctrl-C 结束 TFTP 标准服务端,执行
sudo ./start-custom-tftpd-r2.sh
在 R2 上启动你编写的 TFTP 服务端,不要退出; - 回到第二个命令行窗口,依次执行
sudo ./test5.sh
,sudo ./test6.sh
到sudo ./test9.sh
,对应第五项到第九项测试; - 所有项目评测完毕后,可以退出 R2 上的 TFTP 服务端。
在评测过程中,如果发现某一步结果不对,可以使用 tcpdump 或者 wireshark 来进行抓包。具体地,如果要在某个 netns 中抓包(例如 PC1),需要用如下的命令来运行 tcpdump 或者 wireshark:
sudo ip netns exec PC1 tcpdump [some arguments]
sudo ip netns exec PC1 wireshark
最后更新:
2023年12月19日
作者: