Stanford CS144: Introduction to Networking
Descriptions
- Offered by: Stanford University
- Prerequisites: Computer architecture basics, C++ basics
- Programming Language: C++
- Difficulty: 🌟🌟🌟🌟
- Website: cs144.github.io
Stanford CS144 is Stanford's networking course, distinguished by its lab-driven approach. You implement a complete TCP/IP protocol stack — from the network interface layer to the transport layer — and your implementation must pass real network communication tests.
Course Resources
- Website: cs144.github.io
- Lectures: YouTube
- Lab code: CS144 Labs
Lab List
| Lab | Content | Difficulty |
|---|---|---|
| Lab 0: Networking warmup | Network programming basics | 🌟 |
| Lab 1: Webget | Implement a simple HTTP client | 🌟🌟 |
| Lab 2: TCP receiver | Implement TCP receiver | 🌟🌟🌟 |
| Lab 3: TCP sender | Implement TCP sender | 🌟🌟🌟🌟 |
| Lab 4: TCP connection | Complete TCP connection | 🌟🌟🌟🌟 |
| Lab 5: Network interface | Network interface layer | 🌟🌟🌟 |
| Lab 6: Router | Implement a router | 🌟🌟🌟🌟 |
| Lab 7: Putting it all together | Complete protocol stack | 🌟🌟🌟🌟🌟 |
Self-Study Tips
Solid C++ skills required. The course uses C++; familiarity with pointers, memory management, and OOP is essential.
Do labs in order. Each lab depends on the previous lab's code; you can't skip ahead.
Verify with Wireshark. After each lab, use Wireshark to capture packets and verify your implementation is correct.
Notes
CS144 has some of the best lab design in networking courses. After completing all labs, your understanding of TCP/IP will surpass most practitioners.