xiaofu OS

Stanford CS144: Computer Network

收藏与进度仅保存在当前浏览器。

先修知识

一定的计算机系统基础,CS106L

先修原文提及的本站课程:

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 将 checkpoint 0 中 webget 使用的 Linux Kernel tcp_socket 替换为自行实现的 TCP 协议,并分析实际网络流量,可使用 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 你真的理解了吗?

如果你是计算机网络 (System Programming) 的初学者,别忘了我们还有 O1, Claude, DeepSeek 这些 LLM 的帮助,这比十几年前 RTFM 的效率和效果都好太多了!

计算机的世界里没有魔法,去试试吧!

课程资源

比较不幸的是,目前 (2025.1) 这门课的 GitHub Repository 会随着每一年的进度被直接清空,如果你没有先前自己 fork 一份,那就只能跟着现在的进度走了。

课程网站通常随学期更新。历史版本可参考 Wayback Machine 中的 2024 Winter 备份。

资源汇总

有关 2024 年以后相对较新的,这门课的详细入门/通关指南,可以参考 @xzhseh 的这篇 Standford CS144 (24 Winter) Computer Network - 可能是年轻人最好的现代 C++ 入门课。

↑ 返回上一级:完整指南目录