| 选课类别:计划内与自由选修 | 教学类型:实验课 |
| 课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
| 课程层次:专业选修 | 学分:1.0 |
网络系统实验是计算机专业网络与信息安全方向的综合实验课程,通过让学生自己动手实现一个真实可用的TCP协议软件和IP路由转发软件,加强学生对TCP/IP核心协议的理解,并培养学生理论联系实际的能力。本实验课程包含循序渐进的7个实验项目,要求通过补充C++函数、类等构建一个完整的TCP实现及一个简单的IP路由器,能够实现端到端可靠数据传输,并满足一定的性能要求。
徐伟老师的《网络系统实验》课程内容复杂,基于Stanford的CS144框架,要求学生在一个复杂的框架中使用C++17实现TCP协议。实验内容颇具挑战性,涵盖了TCP发送器、接收器、完整TCP状态机的实现,以及各种工具的使用。这些实验为学生提供了深入掌握C++和TCP协议的机会。但由于实验难度高,一些学生可能会花费超过50小时才能完成实验。
评论普遍反映,徐伟老师和助教在授课过程中积极支持学生。尽管有个别反馈认为PPT和部分资料略为陈旧,但总体而言,学生认可教师的专业性和对课程优化的期望。老师也积极听取学生建议,希望提高课程质量。
给分相对宽松,符合合理预期。大部分完成实验的学生都能取得不错的绩点。课程仅为一学分,引起了一些争议。学生普遍认为课程内容偏多,学分略低,有望在未来添加更多理论内容,调整学时和学分。
尽管课程难度较高,学生的投入和最终的收获相对丰富。许多学生在完成课程后对TCP协议理解显著加深,有些学生甚至在实习面试中因丰富的项目经验受益。对C++和Linux环境有基础的同学会更容易适应这门课。总体上,课程被认为不仅为学生提供扎实的实践经验,而且有助于职业发展。
总的来说,该课程适合对计算机网络和系统编程有浓厚兴趣的学生,尤其是那些想要在项目中锻炼自己C++编程和调试能力的同学。需要注意的是,对自己编程信心不足或对时间紧缺的同学来说,课程可能会带来较大压力。
课程的实验框架来自 Stanford 的 CS144 课程,具体内容可以参考 Stanford 这门课的主页 CS 144: Introduction to Computer Networking ,本门课程的框架和流程都和链接里给出的资料差不多。
实验方面:
CS144 的实验框架设计的还是蛮精巧的,有许多眼前一亮的设计,用到的技术也比较新颖,完成这个试验后可以收获不少 C++ 和 TCP 相关的知识。
不过毕竟是实验课,因此四十个学时只有一学分,相对内容来说确实还是偏少了。老师说之后可能加入一些理论的内容,将课程提高到两学分,同时降低实验的工作量,这样的话实验的难度和学分会更匹配一些。对 C++ 和 linux 有一定了解,想要找个 project 练练手的同学可以来选这门课。
这门课是今年第一次开,基本照搬了斯坦福cs144的实验,大概就是在一个复杂框架中用c++17实现tcp协议,会涉及到gdb、bash script、Makefile、tshark和tun tap等工具的使用(后两个工具我到结课也没搞明白)。
内容还是挺难的,估计7个实验至少也要50个小时以上(其实我第五个实验就做了30个小时)。感觉内容确实不止1个学分吧,怎么样也比数电实验折磨多了。
不过毕竟是第一次开,老师也说了之后会降低实验难度和量。抛开做实验过程中的折磨不谈,收获还是不少的,至少对tcp的理解深入了很多。
另外,老师和助教都很好,有问题能及时反馈,下一次开的课应该还是比较推荐选的。
刚面完试,来补个好评,下面就唠唠嗑吧:
首先,这门课很难,并且资料有些古早(老师的PPT做的还是挺好的)、git分支的管理也不太好(每个实验有一个独立仓库,而非新分支,每次得手动merge),,同时其难度难度与学分学时并不匹配。老师非常希望能跟我们共建这门课,因此我在实验的过程中也陆续提了一些建议(当然,最后的汇报部分没做,毕竟实验都不做了),比如Ubuntu22.04支持(修复stdexcept的引入问题,给buffer类加上一个stdexcept的include宏并在cmakelists里检测操作系统即可),还有上面提到的git管理问题。不过对我而言这门课最痛苦的环节还是在于绘制流程图,我可以给你用mermaid画依赖图、调用关系图或者走向图,但是手绘标准流程图真的太痛苦了。
本评课的重点在于:虽然它很难,但是很有用。我因为当时事务比较繁忙,只做完了连接器部分(有序字节流、流重组器、接收器、发送器、连接器),依然拿到了3.7的绩点,说明大家可能都觉得比较难(因此选课的同学请合理评估自己对ubuntu-cxx-cmake项目的coding能力,一般lc的编译原理实验你能拿满那这个也没什么问题)。
而绩点其实并不是最重要的,我本就不打算读研(从大一开始就非常抗拒),因此绩点对我来说毫无用处(当然,我是典型的数学物理学不会的那种),而我本学期(大三下)打算为秋招加个码,做了一下万深王(深度学习导论、实践、原理与实践,人工智能安全,此前DL、ML零基础),以及选修了这门课(事实证明本学期的选择对我而言非常正确,要是计算方法不用考试就好了,实验都挺不错的)。
近期找实习面试的时候发现老板对这一块经历非常感兴趣,本来还以为要面八股(都打算直接说不会了),结果整个一个小时的面试过程几乎全程都是对面在看我的github(因此强烈建议看到本评课的小登老登们好好整理一下自己做过的东西(大作业也行),挑几个最重点的pin到你github的profile上),看到感兴趣的就问一下,最后点评我的码力不错而且跟他们的方向很match。回顾整个过程,对方最关注的几个项目中就有本门课程实验的产物,大致要求一般计科学生会用tcp program就够,这个涉及到的层次更深(一边聊一边看到对面在点头)
类似的还有lc老师编译原理课程实验做的编译器,以及计组实验的五级流水线CPU,完整做完之后你在技术面试时极有可能收获到技术负责人的接连点头夸赞(笑);然后深度学习那一块也是一个面试加分项,老板也很感兴趣(机器学习就有些老了,建议还是主要关注深度学习),因此计科大三下的深度学习导论、实践和人工智能安全这三门选修课我个人都非常推荐。刚才面完之后直接说下周一聊薪资,大概敲定了编译或者网络(带点深度学习)方向,我个人比较喜欢网络这块(也因此我选择了本门课)。
然后本课程后期碰上了编译竞赛,老师也邀请我们几个实验做的比较好的组队参加,现在稍微有些后悔没去(因为我六月份其实是比较闲的,五月份每天平均睡六个小时基本把所有任务全部搞完了,六月份主要就复习+海投简历(13份拿到了四个面试)),小登们再选课的时候可以仔细考虑一下自己的闲暇情况,把这个竞赛作为一个经历写进简历里我认为是非常不错的(我的简历里有深度学习原理与实践和深度学习导论的两个竞赛,面试官也提了一下这个)
ps:专门学了大半年的java,最后还是从抓瓦学弟变成go学长了(笑)妮可计科的教育看来更适合搞技术,java-Web这种业务类的还是比不过人家专门学的
以上,希望这门课越办越好
更:刚面完游卡的游戏服务端,又提到这个了,问了TCP和UDP原理和应用,讲了这个(不然TCP都没啥项目可讲)和HTTP、DNS-relay、王者荣耀发包,讲完这部分之后对面就没再问计网方面的问题了。昨天面java后端倒是没讲这个,对面不咋感兴趣,妮可人的技术栈(也可能只是我)果然还是不太适合搞业务

第一堂课还能大致坐满教室,没过多久就只剩4个人了(乐)
实验难度其实还好吧,比os可是舒服了不是一星半点(os一旦有bug要D就直接开始坐牢,被迫面向正解debug)。个人感觉是如果你编译实验没有感到很困难的话就可以选。
最大的问题就是只有一个学分,妮可特有的轻视实验。然后除非你是天才手打一遍过不然要花的时间肯定是超过40h的,不过嘛,都3春了,时间完全有,天天打游戏完全不耽误(
需要对c++调试比较熟练,因为本来大量时间都是在debug和和面上(特判,面向测试编程)
最好看CS144的英文文档(平台上能下),老师写的ppt确实略微那个
对自己c++ coding有自信的话还是很推荐选的,跟完后确实对TCP协议等计网知识确实会有更深的理解。给分方面不需要担心,1个学分,个位数的人,大概率突破极限。我92