A comprehensive collection of practical implementations exploring the foundations of modern computer networking.
This repository contains a series of practical assignments developed as part of COS 332 (Computer Networks) at the University of Pretoria.
The focus of this module is on low-level networking concepts, where protocols are not just used — but implemented from scratch.
Unlike typical high-level development, this work emphasizes:
- Direct socket-level communication
- Manual handling of network protocols
- Understanding how systems communicate across layers
⚠️ The core philosophy: "Don’t use the protocol — build the protocol."
- Client–Server architecture
- Socket programming (TCP-based communication)
- Stateful vs stateless communication
- Protocol design and parsing
- HTTP (custom servers & browser interaction)
- SMTP (sending email manually)
- POP3 (mail retrieval systems)
- FTP (file transfer & synchronization)
- LDAP (directory services)
- Building and deploying servers
- Working with Unix/Linux environments
- Virtual machines & isolated networking setups
- Network debugging and traffic inspection
- Firewall concepts (Layer 3 vs Layer 7)
- Application proxies
- Traffic filtering and inspection
Each component in this repository is designed to:
- Reinforce theoretical networking concepts
- Translate RFC specifications into working systems
- Encourage problem-solving at protocol level
Rather than relying on frameworks or libraries, implementations:
- Use raw sockets
- Handle message construction and parsing manually
- Simulate real-world network interactions
- Java / Low-level languages
- TCP Sockets
- HTTP, SMTP, FTP, POP3, LDAP
- Linux / Unix / Virtual Machines
- Wireshark, Telnet, Apache
This repository is designed to be run in a network-capable environment, typically:
- Linux / Unix-based systems
- Virtual machines (e.g. VirtualBox)
- Localhost or LAN-based communication
- Optional: Raspberry Pi / external host setup
/src → Source code implementations
/docs → Notes and references
/scripts → Setup helpers
/tests → Testing utilities
- Deep understanding of network protocols
- Ability to implement client-server systems from scratch
- Experience with real-world networking constraints
- Debugging communication at packet/message level
- Translating RFC documentation into working code
- No high-level networking libraries are used for core functionality
- All protocol communication is handled manually
- Focus is on understanding, not just functionality
Ayush Beekum
Computer Science Student — University of Pretoria
This repository represents a deep dive into how the internet works under the hood.
From raw sockets to full protocol flows — everything here is built, not abstracted.