web

2026/04/07

计算机网络系统学习计划(实验驱动版)

📋 Context

针对有基础学习者定制的实验驱动型学习计划,每周5-10小时,以Stanford CS144为核心,通过从零实现TCP/IP协议栈来系统掌握计算机网络知识。

🎯 学习目标

  1. 核心目标:从零实现一个完整的TCP/IP协议栈
  2. 系统掌握计算机网络的五层协议栈
  3. 通过实践理解Internet核心协议的工作原理
  4. 培养网络问题分析与排查能力
  5. 提升系统级编程能力(C++)

📚 核心学习资源

🚀 主线课程:Stanford CS144

课程信息:

实验列表(8个Lab):

  1. Lab 0: Networking warmup - 网络编程热身
  2. Lab 1: Finishing TCP - 完成TCP接收端
  3. Lab 2: TCP retransmitter - TCP超时重传
  4. Lab 3: The TCP sender - TCP发送端
  5. Lab 4: The network interface - 网络接口层
  6. Lab 5: Network interfaces and routing - 网络接口与路由
  7. Lab 6: IP forwarding router - IP转发路由器
  8. Lab 7: NAT-based web proxy - NAT网络代理

学习资源:

📖 配套阅读资料

  1. 《计算机网络:自顶向下方法》 - 选读相关章节

  2. CS144中文学习指南

    • 详细的学习路线和踩坑经验
    • 每个Lab的要点分析

🔧 实验工具

视频课程

  1. 中国科学技术大学课程(B站)

    • 链接:Bilibili
    • 基于第7版教材的完整课程
  2. Stanford CS144讲座

    • YouTube播放列表,112个视频
    • 作者:Philip Levis & Nick McKeown

实验工具

  1. Wireshark - 网络协议分析器

  2. Mininet - 网络仿真平台

    • 创建虚拟网络拓扑
    • 支持Wireshark集成
  3. Packet Tracer - Cisco网络模拟器

    • 图形化网络设计工具

📅 16周学习计划(每周5-10小时)

阶段0:环境准备(第0周)

任务:

  1. 安装实验环境
  2. 熟悉C++基础
  3. 克隆CS144仓库

环境配置:

# 安装依赖(Ubuntu/WSL)
sudo apt update
sudo apt install -y build-essential cmake git

# 克隆实验框架
git clone https://github.com/cs144/minnowboard
# 或使用课程提供的staging仓库

参考阅读:


阶段1:TCP实现(第1-8周)

第1-2周:Lab 0 + Lab 1

Lab 0: Networking Warmup

Lab 1: TCP Receiver

配套阅读:


第3-4周:Lab 2 + Lab 3

Lab 2: TCP Retransmitter

Lab 3: TCP Sender

配套阅读:


第5-6周:Lab 4

Lab 4: The Network Interface

配套阅读:


第7-8周:Lab 5 + Lab 6

Lab 5: Network Interfaces and Routing

Lab 6: IP Forwarding Router

配套阅读:


阶段2:应用层与进阶(第9-12周)

第9-10周:Lab 7

Lab 7: NAT-based Web Proxy


第11-12周:补充实验与深化

选项1:Wireshark实验

选项2:性能优化

选项3:扩展功能


阶段3:综合项目(第13-16周)

最终项目选择(选一):

项目A:完整协议栈测试

项目B:网络应用开发

项目C:协议分析

🔧 实验环境搭建

开发环境

推荐配置:

VS Code插件推荐:

依赖安装(Ubuntu/WSL):

sudo apt update
sudo apt install -y \
    build-essential \
    cmake \
    git \
    gdb \
    clang-format \
    valgrind

CS144实验框架

获取方式:

  1. 课程官方会提供staging仓库
  2. 或者使用公开的参考实现学习

测试工具:

可选辅助工具

  1. Wireshark - 抓包分析
  2. netcat (nc) - 网络调试
  3. tcpdump - 命令行抓包
  4. iperf - 网络性能测试

💡 学习方法建议

实验驱动的学习流程

  1. 阅读实验文档(30分钟)

    • 理解实验目标
    • 查看接口定义
  2. 运行测试(15分钟)

    • 先运行现有代码看失败情况
    • 理解测试用例
  3. 实现代码(2-4小时)

    • 小步迭代
    • 频繁测试
  4. 调试优化(1-2小时)

    • 使用gdb调试
    • 查看日志输出
  5. 写实验报告(30分钟)

    • 记录遇到的问题
    • 总结学到的知识

调试技巧

# 使用gdb调试
gdb --args your_program

# Valgrind检查内存泄漏
valgrind --leak-check=full ./your_program

# 网络抓包
sudo tcpdump -i any -n tcp

时间分配建议(每周8小时)

活动时间
阅读资料2小时
编码实现4小时
调试测试1.5小时
总结笔记0.5小时

📝 学习方法建议

  1. 理论实践结合:每章理论学习后立即完成对应实验
  2. 主动学习:尝试用自己的话解释概念
  3. 问题驱动:带着问题去学习,遇到问题主动查找资料
  4. 记录笔记:建立个人知识库
  5. 参与社区:加入相关学习社区讨论

✅ 验证与测试

每个Lab的验收标准

每个Lab都有自动化测试:

# 运行测试
make check

# 或使用tmate进行自动评分

学习进度检查

每周自问:

  1. 这个Lab解决了什么问题?
  2. 我的实现如何处理边界情况?
  3. 与标准协议实现有何差异?

最终成果展示

完成所有Lab后,你将拥有:

📚 关键文件参考

CS144核心文件

Lab框架:

关键接口(需要实现的类):

🆘 常见问题与资源

学习资源

中文社区与指南:

官方资源:

参考书籍(按需阅读)

🎓 学习成果

完成本计划后,你将能够:

  1. 深度理解 TCP/IP协议栈的每个层次
  2. 从零实现 一个可用的TCP/IP协议栈
  3. 掌握 C++网络编程技能
  4. 具备 网络协议设计与实现能力
  5. 理解 网络性能优化的关键点
  6. 为深入 网络安全、分布式系统、云原生打下坚实基础

📌 快速开始检查清单