Network Router, Client and Server
Designed to accommodate HTTP requests, pinging, trace route algorithms, & network protocols: Ethernet, IP, UDP, TCP, ICMP, RIP, ARP. Written in C.
Design Decisions
For this project, the goal was to build and emulate the various networking protocols we learned in our Networks class with Professor Maria Gorlatova. We started with lower level protocols (closer to the bottom of the ISO stack): Ethernet. After learning how to construct a packet at the Ethernet level, we then learned how to encapsulate these into larger packets at higher levels of the OSI stack. To be honest, design-wise, things were fairly "by the book". The majority of our troubles actually came from pointer management in C, and also being mindful of implementing offsets (and offsets of offsets of offsets!)correctly.
Key Learnings & Takeaways
I think it was really enlightening to see how each of these protocols build together to form the foundation of the Internet. It was also great to see how trace route algorithms come together to help nodes on opposite sides of the world to connect with each other and enable all of the wonderful modern applications we have today.