CS19-计算机网络
UCB CS 168:Introduction to the Internet: Architecture and Protocols
课程简介
- 所属大学:UC Berkeley
- 先修要求:CS 61B;推荐 CS 61C;具备基础的 Python 编程和 Unix 系统使用经验
- 编程语言:Python,Unix shell
- 课程难度:🌟🌟🌟
- 预计学时:约 140 小时(14 周 × 10 小时/周)
本课程是加州大学伯克利分校开设的“Internet 架构与协议概论”,侧重于 Internet 的设计原则与核心协议,包括分层结构、寻址机制、域内与域间路由、可靠传输、拥塞控制,以及 TCP、UDP、IP、DNS、HTTP 等核心协议,并介绍以太网、无线等网络技术。CS 168 结合理论与实践,通过三个动手项目(Traceroute、路由、TCP传输)让学生学习构建并调试网络协议,体验深入且全面。
尤其是课程配套编写的教材写得非常好,内容全面的同时简洁生动,推荐细致阅读,也可当作手册查阅。
课程资源
- 课程网站:SP2025
- 课程视频:参见课程主页
- 课程教材:https://textbook.cs168.io/
- 课程作业:共三个 Python Projects, 相对简单
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/UCB-CS168 – GitHub 中。
USTC Computer Networking: A Top-Down Approach
课程简介
- 所属大学:中国科学技术大学
- 授课教师:郑烇、杨坚
- 先修要求:操作系统(非必需)
- 编程语言:无
- 课程难度:🌟🌟🌟
- 预计学时:40 小时
这门课应该是中文互联网上比较火的计算机网络课了,教材采用神书计算机网络(自顶向下方法),授课风格更偏向实际而非纯理论(强烈建议先阅读教材预习再看课,否则上课时可能会有些懵圈)。
课程内容包括大部分自顶向下方法里的内容,同时涵盖考试内容,可放心观看。
课程视频是郑烇老师本人在哔哩哔哩上上传的,且从2020年至今一直坚持在评论区答疑,属实负责且认真。
课程资源
- 课程网站:http://staff.ustc.edu.cn/~qzheng/teaching.html
- 课程视频:https://www.bilibili.com/video/BV1JV411t7ow/
- 课程课件:http://staff.ustc.edu.cn/~qzheng/cn.zip
- 课程教材:计算机网络(自顶向下方法 第7版),机械工业出版社,2016
UMASS Computer Networking: A Top-Down Approach
课程简介
- 所属大学:马萨诸塞大学
- 先修要求:有一定的计算机系统基础
- 编程语言:无
- 课程难度:🌟🌟🌟
- 预计学时:40 小时
《自顶向下方法》是计算机网络领域的一本经典教材,两位作者 Jim Kurose 和 Keith Ross 精心制作了教材配套的课程网站,并且公开了自己录制的网课视频,交互式的在线章节测试,以及利用 WireShark 进行抓包分析的 lab。唯一遗憾的是这门课并没有硬核的编程作业,而 Stanford 的 CS144 能很好地弥补这一点。
课程资源
- 课程网站:https://gaia.cs.umass.edu/kurose_ross/index.php
- 课程视频:https://gaia.cs.umass.edu/kurose_ross/lectures.php
- 课程教材:Computer Networking: A Top-Down Approach
- 课程作业:https://gaia.cs.umass.edu/kurose_ross/wireshark.php
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/Computer-Network-A-Top-Down-Approach – GitHub 中。
Stanford CS144: Computer Network
课程简介
- 所属大学:Stanford
- 先修要求:一定的计算机系统基础,CS106L
- 编程语言:C++
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时:100 小时
这门课 (开源版本视频) 的主讲人之一是网络领域的巨擘 Nick McKeown 教授。这位拥有自己创业公司的学界业界双巨佬会在他慕课每一章节的最后采访一位业界的高管或者学界的高人,非常开阔眼界。
在这门课的 Project 中,你将用 C++ 循序渐进地搭建出整个 TCP/IP 协议栈。
checkpoint 0
是让你熟悉一下开发环境的 warmup lab,简单玩一玩一些网络相关的命令 (e.g.,telnet
,netcat
),借助 Linux Kernel 提供的tcp_socket
抽象写一个基础的网络爬虫webget
,最后实现一个 (In-Memory) Reliable Byte Stream。- 接下来你会在
checkpoint 1-3
首先实现一个简易但保留了核心语义且 (almost fully) standards-compliant 的 TCP Protocol,可以与其他 (工业级的) TCP 实现相互通信。 - 在
checkpoint 4
中你会通过框架代码的封装 (TCPMinnowSocket
),将checkpoint 0
中webget
默认使用 Linux Kernel 的tcp_socket
替换为你自己实现的 TCP Protocol;同时会实际分析真实网络 (i.e., RTT >= ~100ms) 的流量模式,需要自己用 python 等语言进行可视化数据分析 – 我很推荐大家认真的去进行数据分析,真的很有意思。 - 过了课程的前半部分,我们会在
checkpoint 5
来到 TCP/IP 协议栈的最底层,你会亲自实现NetworkInterface
,通过 ARP 协议抹平 IP Datagram 和 Ethernet Frame 之间的沟壑。 - 最后在
checkpoint 6
中,你会基于先前实现的“网卡”,也就是NetworkInterface
,实现 IP Router,对接收到的每一个 IP Datagram 进行相对应的转发。 - 与
checkpoint 4
类似,checkpoint 7
会通过框架代码提供好的胶水 (endtoend.cc
),在内存里通过network_thread
模拟底层的网络设施 (Network Infrastructure/Service),把所有你前面实现过的组件串联起来,通过一个中继服务器 (cs144.keithw.org
) 实现 Client 和 Server 之间的、每端使用自己实现的 TCP/IP 协议栈的实时通信。
这门课与其说是计算机网络课,我更愿意称其为一门年轻人最好的现代 C++ 入门课。
如果你只是 “浅尝辄止” 的写完 8 个 checkpoint (其中有两个 lab 你甚至不需要亲自写代码!😂😅),那么这门课大部分的精华你就错过了。
我认为这门课最精华的部分就在于提供给我们的框架代码,如果不自己深入一行行的阅读每个文件,你会发现很多细节的问题一直笼罩在迷雾里,就像魔法一样!
- 比如
checkpoint 4
中我们到底是如何将自己实现的TCPSender
和TCPReceiver
拼装使用成一个 (bi-directionally) reliable byte stream 的? TCPMinnowSocket
到底是如何替换内核里默认的 TCP 实现的?- 我们常说的三次握手去哪里了?
- 多线程的场景怎么办?
checkpoint 7
提供给你的endtoend.cc
你真的理解了吗?
我很喜欢蒋炎岩教授一直强调的,“计算机的世界里没有魔法” 这条 quote,上面的这些问题,你仔细读过框架代码后肯定能找到答案。
如果你是计算机网络 (System Programming) 的初学者,别忘了我们还有 O1, Claude, DeepSeek 这些 LLM 的帮助,这比十几年前 RTFM 的效率和效果都好太多了!
计算机的世界里没有魔法,去试试吧!
课程资源
比较不幸的是,目前 (2025.1) 这门课的 GitHub Repository 会随着每一年的进度被直接清空,如果你没有先前自己 fork 一份,那就只能跟着现在的进度走了。
课程网站也似乎没有官方的 Archive,每一年都是全新的,我在 Wayback Machine 上找到了课程网站上至 2021 年所有版本的独立备份,24 Winter 的网站链接是:https://web.archive.org/web/20241209004804/https://cs144.github.io/。
- 课程网站:https://cs144.github.io/
- 课程视频:https://www.youtube.com/watch?v=r2WZNaFyrbQ&list=PL6RdenZrxrw9inR-IJv-erlOKRHjymxMN
- 课程教材:无
- 课程作业:https://cs144.github.io/,8 个 Project 带你实现整个 TCP/IP 协议栈
资源汇总
有关 2024 年以后相对较新的,这门课的详细入门/通关指南,可以参考 @xzhseh 的这篇 Standford CS144 (24 Winter) Computer Network – 可能是年轻人最好的现代 C++ 入门课。