跳转至

总述

第二阶段

第二阶段实验有三个选项,在以下四个选项中选择一个完成即可:

  • 实现 OSPF 协议路由器(推荐)
  • 实现 RIPng 协议路由器
  • 实现 DHCPv6 协议路由器
  • 实现 TFTP 协议客户端和服务端

教学目的

实验本身:

  1. 这一阶段的目的是,让同学理解路由器(核心或者家用)的功能和具体的实现流程。
  2. 让同学理解通常采用的 ping 工具是如何发现网络中的问题的,当出现问题的时候,这个问题是由哪个路由器报告、并且报告什么错误。那么,以后当用 ping 来检查网络的时候,看到错误信息,就可以推断出网络的问题,并且在哪里出现了问题。
  3. 让同学学习和尝试使用 Wireshark 来调试一个模拟的网络环境,之后,可以把同样的调试流程用在真实的网络环境上,比如宿舍的网络、实验室的网络和家里的网络。作为学习完网络原理、做完路由器实验的你,以后遇到同学或者家里人上不了网的问题的时候,就可以挺身而出,尝试定位和解决问题。这时候,你就不怕别人说:“你不是学计算机的吗,难道还不会修网络?”的问题。
  4. 当然了,除了使用网络领域的调试工具,也不要忘记使用调试器(如 GDB)和内存查错工具(如 sanitizer、valgrind)。
  5. 同学可以熟悉 Linux 下的命令行操作和代码管理。

对未来的发展:

  1. 未来的科研和工作中,经常需要和 Linux 打交道,那么熟练使用 Linux 命令行是十分必要的技能。
  2. 未来的科研工作中,经常需要阅读别人开源的代码,那么如何在不熟悉的大型代码中,快速地阅读和理解是很重要的技能。在本次实验中,你需要阅读提供的代码框架,然后结合 RFC,去理解代码在做什么,并且自己需要写什么。在科研中,你就需要阅读开源的代码,结合论文,去理解代码在做什么,道理是一样的。
  3. 未来在配置环境,或者运行别人的代码的时候,经常会遇到环境出问题,或者代码跑不起来的问题,那么这时候就需要有一个严谨的解决思路。本实验会引导你通过 Wireshark 等工具来调试网络环境,并且教会你如何有章法地去调试一个网络问题。那么之后,你也可以用类似的方法,去调试环境,调试代码。如果你没有尝试这些调试工具,而只是单纯地通过修改代码的方式来通过了测试,那就失去了重要的调试技能的锻炼机会。

总而言之,实验设计时考虑到了很多教学目标,但实际上能有多少收获,取决于你在本实验上花了多少精力,是否按照文档所说的方法去做。

在线评测的原理

实验团队部署了树莓派集群,对于一次个人的真机评测,会分配三个树莓派和两个 VLAN,通过配置 VLAN 把树莓派连接到同一个网络中。接着,在树莓派上进行各种配置,包括 netns、veth、forwarding 和 ethtool 等设置。按照评测顺序,运行 BIRD、TFTPD 等软件,下载静态编译好的程序,在容器里运行。接着,就按照测试命令一条一条进行。

特别地,为了安全,程序运行在单独的 chroot 和 user 中,并且限制了 capability。同时为了保证性能的稳定性,把进程绑定到了一个 CPU 核上。另外,为了提升性能,我们把 CPU Scaling Governor 设为 performance,让树莓派在不打开超频的条件下在最大主频下运行。

所以,不要认为在线平台是在一个模拟环境下进行的评测,它后面是一个树莓派集群在工作。


最后更新: 2023年11月14日
作者:Jiajie Chen (94.12%), Haixuan Tong (5.88%)

评论