Build a TCP/IP Stack from Scratch · Module 01

Introduction & Learning Objectives

Module 1 — Building Your Networking Lab

Introduction & Learning Objectives

Welcome to the first hands-on module!

From this point onward, you'll start building the environment where your custom TCP/IP stack will live, run, and interact with real packets.

Before writing any networking code, we need a safe, repeatable sandbox — a place where you can intercept Ethernet frames, reboot freely, and break things without affecting your real machine.

That's exactly what we'll create in this module.

The Mini Network

You'll build a mini network using Docker containers that mimics a small LAN:

[ client container ] <── Docker bridge ──> [ stack container ]
  • The client container behaves like an ordinary computer. You'll use standard tools (ping, curl, ip addr, tcpdump) to send real packets.
  • The stack container is where your user-space TCP/IP stack will eventually live. For now, it's just an empty box with network privileges — but by the end of this course, it will be speaking Ethernet, ARP, IP, TCP, and HTTP.

Learning Objectives

By the end of this module, you will:

  1. Understand how Docker creates virtual networks and bridges containers together.
  2. Build a minimal lab composed of two containers on the same subnet.
  3. Test connectivity between them using ping and tcpdump.
  4. Visualize the packet flow and identify ARP and ICMP frames.
  5. Version your setup with a Git tag so it becomes the foundation for all future modules.

This setup becomes your permanent playground — you'll use it for every protocol layer you implement from now on.