CS168 SP25 Project2 Distance-Vector Routing 笔记
本文最后更新于 2026年4月1日 下午
前言
由于本学期学习课程安排有计算机网络,加之以寒假本来计划学习计网(本来打算是 CS144)的计划因为自己太怠惰而泡汤了,所以开学之后在csdiy找到了这门课程进行学习,首先总结一下这门课目前学习下来的一些体验和感受:
- 课程讲的非常好,我看的是 b 站上 Spring2025 的版本,Peyrin Kao 也是 UCB CS 的经典讲师,是我刷的为数不多的公开课里面觉得讲得最清晰最易懂的老师了。我其实是一个不太喜欢看网课的人,因为我觉得网课的吸收效率不如直接读 Textbook / 文档来得快,但是这位讲师的水平还是让我折服了,他的英语也很清晰易懂,我甚至两倍速无字幕都能听懂,这方面十分推荐。
- 课程的脉络是以 Internet 为主,基本不同于国内大部分高校自底而上的讲法,Intro 章节是对计算机网络的整体进行一个概述,第二章是网络层(主要是 Routing 的原理,第三章是传输层,后面也没有完全分层讲解,而是穿插了许多杂七杂八的点,可以看[课程教材](Home | CS 168 Textbook)目录感受一下。
- 课程能做的只有 3 个 Python Project,其中 Project1B 因为没有公开的 Gradescope,且在本地进行完整的测试不太可能,我是没去做的,而且 Project 的难度相对而言也不高,打算在这里学习完计算机网络知识之后,再去刷一下 CS144 的 Lab。
- 再评价一下 Project,工作量非常小,感觉做完也没法完全回顾知识点,更多可能得靠自己总结,这一点上我认为是没那么成功的。
- 综合上面两点,我认为这门课十分适合速通掉计算机网络的知识点,形成一个大概的知识图景。
Project 回顾
这个 Project 给我一种做 CS61A 的 Project(尤其是 Scheme)时候的感觉,整个项目的文件目录相对庞大,但学生需要完成的却只有一个文件中的几个函数的TODO,简而言之——做填空题。其实我还蛮喜欢类似于 Gitlet 那种基本自己整体从零开始做的 Project。
通过这个项目,可以回顾 Routing 章节的一些知识点。比如说 Distance-Vector Protocols,但是不需要自己实现 Bellman-Ford 算法,更多是在回顾一些核心的要素,比如 Five Rules,尤其是 Resending, Expiring, Split Hoeizon, Poison Reverse 等核心特性。
但我感觉也就仅限于此了,因为工作量实在不大,基本是填空题,分 10 个 Stage,每个 Stage 的代码量顶多是六七行。重点还是复习回顾一下计算机网络的繁杂概念的知识图景。
Tasks
由于实在是不难,问 LLM 基本能秒杀,这里只提几个容易错的点。
- 在 Lecture 和 Textbook 里面举出的例子,都是“我的目的地是 xx 路由”,但是在这个 Project 里面,更多体现的是“我的目的地是 xx 端口”。
- “端口链路延迟”和“路由条目总延迟”,务必区分清楚。
- 搞清楚如何获取所有邻居的端口集合,和
self.table里面的端口的区别。 - Stage4 里面,处理 Advertisement 的时候,必须分清楚情况,具体而言,先考虑
route_dst的存在性。 - 仔细考虑
expire_time的含义。 - 到底是"poison the entry",还是"delete the entry",需要审视清楚。