Since computer networking is a vast and deep subject, I wanted to at least get a start understanding how it all works under the hood. I also wanted to take a programming approach as it seems like the standard advice is to build projects that implement various RFCs or play around with Wireshark.
- Beej's Guide to Networking Programming
- Online courses (pick one)
- Supplement that with readings, projects, and assignments.
In terms of online courses, the two best are:
Stanford teaches it top-down, starting at the application layer, moving to the physical layer. Wetherall teaches it bottom-up, starting at the physical layer and moving upwards. I have personally been working through Wetherall as I find his teaching style more in line with how I like to learn.
Update (2024-06-08): Unfortunately, both courses have been taken down. I've replaced the links with archived Youtube playlists of the lectures.
Standard advice says that I should be using Computer Networking: A Top-down Approach. [PDF warning]
Readings:
- Unit 1: Sections 1.1-1.3; 1.5; 2.1
- Unit 2: Sections 3.1-3.5
- Unit 3: pp. 22-31; 640-648
- Unit 4: pp. 259-265; 269-279
- Unit 5: pp. 83-114
- Unit 6: pp. 305-379
- Unit 7: pp. 433-443
- Unit 8: pp. 671-693
I will be using the assignments from the following:
I will also be implementing small, commonly used networking programs (ping, traceroute, etc.) as well as any other parts of a network that seem interesting (such as spanning tree protocol).
I have been recommended the book High Performance Browser Networking multiple times but I have not had time to go through it.