教授:Keith Winstein
评论贡献者:WangAShao
课程信息
计算机网络:计算机网络的基础课程,实验很厉害。
下面简单介绍一下实验做了些什么:
-
lab0:配置环境,telnet命令的使用,使用OS提供的网络api接口编写一个网络应用程序,同时带你熟悉Sponge的文档
-
lab1:我们知道TCP是面向字节流的,所以数据是乱序到达接收方,这个实验就是将失序的数据按序重组,同时处理重叠等情况。
- lab2:我们实现的是一个用户态TCP协议,TCP协议是用来传输数据的,那么必然有一个发送方和接收方,我们这个实验就是来实现接收方的,想想你会怎么解析这个到来的包呢?期待吧!
- lab3:这个实验就是实现我们的发送方喽?想不想知道我们的用户态TCP协议是怎么把数据发出去的呢?啃底层源码吧!
- lab4:这个实验就是把前面的内容全部整合起来,一个真正的TCP协议就此诞生了
后面三个lab我没写,我是简单浏览了一下文档后说的
- lab5:貌似是实现ARP协议
- lab6:实现基于最长前缀匹配规则的路由器转发功能
- lab7:把前面的整合在一起
适合人群
这门课属于基础课程的性质,所以计网0基础的同学也是可以学习这门课程的,不用担心跟不上来,我当初学这门课的时候计网就是基本0基础。
另外已经有计网基础并且对TCP协议很感兴趣的也可以刷一刷这门课。
课程评价
这门课的视频听说比较捞,听起来很犯困,所以不太推荐。
这门课的PPT我也看过,没什么信息量,而且跟实验貌似没什么关系,也不推荐看。
这门课最为推荐的就是它的实验,下面重点来讲一讲实验:
- 实验指导书:我能想到的最好的一个形容词就是详略得当了
所谓详,是指在指导书当中把整个系统的架构以及你需要做哪些工作,填充哪个函数,这些函数的功能是什么,互相之间怎么交互的说的已经非常清楚了;
所谓略,则是指它省略了很多边界条件没有说,当你发现在这种case下原来需要这样处理,但是为什么指导书却没有说的时候,你可能要骂指导书太垃圾,但我觉得就是这种略让你陷入bug,让你调试,才让你对这个case印象更加深刻,达到了训练的目的。
-
测试用例:测试代码完全开源,并且相当完备。唯一比较坑的地方就是斯坦福的教授为了避免你面向测试编程,所以在lab1~3给出的测试用例并不完备,然后在lab4的时候才给出更完备的测试用例,导致lab4 debug很痛苦。
-
预计工作量:lab1~3都挺简单,每个大概一天就能做完,代码量我的实现不超过50行。lab4相对难不少,写个差不多对但不完全对的也许要3 ~ 5天。
最后我要泼一盆冷水,这个实验即使做完了,你在计算机网络上其实还只是一个入门汉,因为TCP协议只是计算机网络中很小的一部分,所以计网学习的脚步不能就此停下来,推荐看一下《计算机网络 自顶向下》。
非官方资料推荐
- CS144QQ学习群,群号:485077457
- 我本人在做实验的过程中记录了一些笔记,里面主要包括我当时0基础做实验的心路历程以及测试用例的解读和遇到的坑,里面没有贴任何具体实现的代码,所以可以放心观看。
后续课程推荐
暂无
评价2
教授:Keith Winstein& Nick McKeown
评论贡献者:Jinming Hu
-
Videos:有mooc版本的,我觉得讲得不好,这里就不贴了
课程信息
计算机网络导论。前五个lab是从零开始写一个能用的TCP,后面的lab则是实现了计算机网络其他层的内容。
适合人群
适合学完数据结构+操作系统的同学,适合作为第一门计算机网络的课程。
课程评价
我不太适应MOOC的授课视频。所以这门课的精髓在lab上,前4个lab难度不大,主要是测试不够强,很多问题到lab4的时候才会暴露出来,所以lab4和lab7会需要花比较多的时间。个人觉得是非常好的lab,对TCP和计算机网络的知识的掌握帮助很大。美中不足的是这门课开得时间不长,所以lab的文档的问题比较多,经常需要“面向测试编程”。视个人基础,大概需要100到200小时左右的学习时间。
需要注意的坑点
- 有一些设计的选择细节并没有在PDF里给出,我有的时候需要去看test case才会知道Lab希望怎样去设计。不过也许这些内容在上课的时候会提到。
- Lab2和Lab3的test case不够多,导致错误或者是与Lab期望的设计不符的实现也能通过全部的test case。然后在Lab4里,这些问题会全部暴露出来......结果就是在做Lab4的时候完全不能信任自己在Lab2和Lab3里的相应实现,这样也大大增加了debug难度。
- Lab4里有两个test case即fsm_ack_rst和fsm_ack_rst_relaxed期待的行为是完全相反的。实际上在官方的FAQ页面上给出的状态机是与fsm_ack_rst期待的行为一致,但Lab4默认启用的却是fsm_ack_rst_relaxed......类似的问题挺多的,所以有些情况下不得不去读test case才知道需要实现什么样的功能。
- 官方提供的VirtualBox Image中的GDB是有bug的,在cmake_build_type=Debug生成的binary上不能正确地打断点。在Lab4之前我还能靠肉眼调试,但是Lab4实在是肉眼调不动了,不得不寻求解决方案。后来问了一位之前也做过这个Lab的清华大佬,他告诉我说他用的是LLDB。我就赶紧换了LLDB,这才能愉快的进行调试。
非官方资料推荐
- 暂无
后续课程推荐
- 暂无