A comprehensive hands-on project for learning computer networking concepts through practical exercises and simulations.
This project uses a modular architecture with clear separation between:
- Core Networking Environment: Basic networking tools and practice containers (managed by main
docker-compose.yml) - Specialized Modules: Advanced services like DNS servers, HTTP servers, etc. (managed by individual module
docker-compose.ymlfiles)
Core Environment (./bin/container-practice.sh start):
net-practice: Main learning container with all networking toolsclient: Testing client containerrouter: Network routing simulationfirewall-test: Firewall testing containerdatabase: PostgreSQL for multi-tier testing
Module Services (started separately):
- DNS Server:
cd modules/05-dns-server && docker-compose up -d - HTTP Servers:
cd modules/06-http-servers && docker-compose up -d - Advanced Topics:
cd modules/07-advanced && docker-compose up -d - Security Topics:
cd modules/08-security && docker-compose up -d
networking/
├── README.md # This file
├── package.json # Project metadata
├── requirements.txt # Python dependencies
├── docker-compose.yml # Docker services for network simulation
├── bin/ # Executable scripts
│ ├── install.sh # Cross-platform installation
│ ├── setup.sh # Local development setup
│ ├── container-practice.sh # Containerized practice script
│ ├── test-installation.sh # Installation testing
│ └── version.sh # Version management
├── docs/ # Documentation
│ ├── legal/ # Legal and licensing
│ │ ├── LICENSE # MIT License
│ │ ├── VERSION # Version file
│ │ ├── CHANGELOG.md # Release history
│ │ └── CONTRIBUTING.md # Contribution guidelines
│ └── guides/ # User guides
│ ├── INSTALLATION.md # Detailed installation guide
│ ├── CONTAINER_REQUIREMENTS.md # Container requirements
│ ├── CONTAINER_PRACTICE.md # Container practice guide
│ ├── COURSE_SYLLABUS.md # Course syllabus
│ └── LEARNING_PATH.md # Learning path guide
├── scripts/ # Python and shell scripts
│ ├── interface-analyzer.py # Network interface analysis
│ ├── dns-analyzer.py # DNS analysis tool
│ ├── http-analyzer.py # HTTP/HTTPS analysis
│ ├── ssh-analyzer.py # SSH analysis tool
│ ├── ntp-analyzer.py # NTP analysis tool
│ └── ... # Additional analysis tools
├── modules/ # Learning modules
│ ├── 01-basics/ # Basic networking concepts
│ │ ├── ping-traceroute/ # Network connectivity tools
│ │ ├── network-interfaces/ # Interface configuration
│ │ ├── ipv4-addressing/ # IPv4 addressing and subnetting
│ │ ├── osi-model/ # OSI model analysis
│ │ └── basic-commands/ # Essential networking commands
│ ├── 02-protocols/ # Network protocols
│ │ ├── tcp-udp/ # Transport layer protocols
│ │ ├── http-https/ # Application layer protocols
│ │ ├── dns/ # Domain Name System
│ │ ├── ssh/ # Secure Shell
│ │ ├── ntp/ # Network Time Protocol
│ │ └── dhcp/ # Dynamic Host Configuration Protocol
│ ├── 03-docker-networks/ # Container networking
│ │ ├── bridge-networks/ # Docker bridge networks
│ │ ├── overlay-networks/ # Multi-host networking
│ │ └── custom-networks/ # Custom network configurations
│ ├── 04-network-analysis/ # Network monitoring and analysis
│ │ ├── wireshark/ # Packet capture and analysis
│ │ ├── tcpdump/ # Command-line packet capture
│ │ ├── tshark/ # Command-line Wireshark
│ │ ├── nmap/ # Network discovery and port scanning
│ │ └── netstat-ss/ # Network statistics
│ ├── 05-dns-server/ # DNS server configuration
│ │ ├── coredns-configs/ # CoreDNS configuration files
│ │ ├── zones/ # DNS zone files
│ │ ├── dns-lab.sh # Interactive DNS lab
│ │ ├── DOCKER_EXPLAINED.md # Docker setup explanation
│ │ └── README.md # DNS server documentation
│ ├── 06-http-servers/ # HTTP server management
│ │ ├── nginx-configs/ # Nginx configuration files
│ │ ├── html/ # Sample web content
│ │ ├── ssl-certs/ # SSL certificate examples
│ │ ├── http-lab.sh # Interactive HTTP server lab
│ │ ├── docker-compose.yml # HTTP server containers
│ │ ├── DOCKER_EXPLAINED.md # Docker setup explanation
│ │ ├── README.md # HTTP server documentation
│ │ └── quick-reference.md # Quick reference guide
│ ├── 07-advanced/ # Advanced networking topics
│ │ ├── routing/ # Static and dynamic routing
│ │ ├── load-balancing/ # Load balancing techniques
│ │ └── monitoring/ # Network monitoring tools
│ ├── 08-security/ # Network security
│ │ ├── firewalls/ # Firewall configuration
│ │ ├── vpn/ # Virtual Private Networks
│ │ └── ssl-tls/ # Encryption protocols
├── tools/ # Additional utility tools
│ ├── network-scanner.py # Network discovery tool
│ ├── dns-analyzer.py # DNS analysis tool
│ └── dns-troubleshoot.sh # DNS troubleshooting script
└── admin/ # Administrative documentation
├── README.md # Admin overview
├── ARCHITECTURE.md # System architecture
├── DEVELOPMENT.md # Development guidelines
├── DEPLOYMENT.md # Deployment procedures
├── MAINTENANCE.md # Maintenance procedures
├── progress-tracker.md # Project progress tracking
├── project-expansion-plan.md # Project expansion planning
└── chatlogs/ # Development session logs
New to Docker? Check out these beginner-friendly explanations:
- Main Project Docker Setup - Overview of the entire project's Docker configuration
- HTTP Servers Docker Setup - Web server configurations explained
- DNS Server Docker Setup - DNS server configurations explained
These guides explain Docker concepts in simple terms, perfect for networking learners who are new to containerization.
Cross-platform installation script:
# Clone the repository
git clone https://github.com/your-username/networking-learning.git
cd networking-learning
# Run automated installation
./bin/install.shPerfect for safe learning during meetings or training sessions!
# Start the networking practice environment
./bin/container-practice.sh start
# Enter practice container
./bin/container-practice.sh enter
# Run practice exercises
./bin/container-practice.sh exercisesWhy Use Containers?
- ✅ Safe Environment: Practice without affecting your host system
- ✅ Meeting-Safe: Learn during Zoom sessions without risk
- ✅ Easy Reset: Just restart containers to clean state
- ✅ Full Tools: All networking tools pre-installed
- ✅ Cross-Platform: Works on macOS, Linux, and Windows
For development and local testing:
# Run setup script
./bin/setup.sh
# Or manually install dependencies
pip3 install -r requirements.txtSystem Requirements:
- Python: 3.8+ with pip
- Memory: 2GB RAM (4GB recommended)
- Storage: 1GB free space
- Network: Internet connection for package downloads
- Platform: macOS 10.15+, Linux (Ubuntu 20.04+), Windows 10+ (WSL2)
# Install Homebrew (if not installed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install dependencies
brew install python3 docker docker-compose wireshark tcpdump nmap
# Clone and setup
git clone https://github.com/your-username/networking-learning.git
cd networking-learning
./bin/install.sh# Install dependencies
sudo apt update
sudo apt install -y python3 python3-pip docker.io docker-compose
# Clone and setup
git clone https://github.com/your-username/networking-learning.git
cd networking-learning
./bin/install.sh# Install WSL2
wsl --install
# In WSL2 Ubuntu terminal:
sudo apt update
sudo apt install -y python3 python3-pip docker.io docker-compose
# Clone and setup
git clone https://github.com/your-username/networking-learning.git
cd networking-learning
./bin/install.shSee docs/guides/INSTALLATION.md for detailed installation instructions.
To completely remove the project and all its components:
# Remove project components (keeps Git repository)
./bin/uninstall.sh
# Remove everything including Git repository
./bin/uninstall.sh --git
# Skip confirmation prompt
./bin/uninstall.sh --forceThe uninstaller will:
- Stop and remove all Docker containers, images, networks, and volumes
- Remove the Python virtual environment
- Clean up build artifacts and temporary files
- Optionally remove the Git repository
- Start with
01-basics/to understand core concepts - Practice with ping, traceroute, and basic commands
- Learn about network interfaces and configuration
- Dive into
02-protocols/to understand how data travels - Practice with TCP/UDP, HTTP/HTTPS, DNS, SSH, NTP, and TLS/SSL
- Use packet capture tools to see protocols in action
- Learn certificate management and TLS security analysis
- Explore
03-docker-networks/for modern networking - Learn about bridge, overlay, and custom networks
- Practice with Docker Compose for multi-container setups
- Use
04-network-analysis/tools for troubleshooting - Master nmap for network discovery and port scanning
- Master tshark for packet capture and analysis
- Implement security measures in
08-security/ - Learn about firewalls, VPNs, and encryption
- Master
07-advanced/concepts like routing and load balancing - Build monitoring solutions
- Create complex network topologies
-
Prerequisites
# Install required tools brew install docker docker-compose wireshark tcpdump nmap # Install Python dependencies pip install -r requirements.txt
-
Start with basics
cd modules/01-basics/ping-traceroute ./ping-test.sh -
Launch network simulation
docker-compose up -d
- Docker & Docker Compose: Container networking simulation
- Wireshark: Packet analysis and protocol inspection
- tcpdump: Command-line packet capture
- nmap: Network discovery and port scanning
- Python: Custom networking tools and utilities
- Linux networking tools: ping, traceroute, netstat, ss, ip
By the end of this project, you will understand:
- ✅ How data flows through networks (OSI model)
- ✅ TCP/IP protocol stack and common protocols
- ✅ Network addressing (IPv4/IPv6, subnets, routing)
- ✅ Container networking concepts
- ✅ Network security principles
- ✅ Troubleshooting and monitoring techniques
- ✅ Modern networking architectures
This is a personal learning project. Feel free to add your own exercises and experiments!
- Version: 1.0.0
- License: MIT License
- Changelog: See docs/legal/CHANGELOG.md
- Contributing: See docs/legal/CONTRIBUTING.md
# Show current version
./bin/version.sh show
# Update to specific version
./bin/version.sh update 1.1.0
# Increment version
./bin/version.sh patch # 1.0.0 → 1.0.1
./bin/version.sh minor # 1.0.0 → 1.1.0
./bin/version.sh major # 1.0.0 → 2.0.0
# Create release
./bin/version.sh release 1.1.0