The intention behind this project is discovery and understanding. The idea is to explore how the internet is put together and use common industry tools to see and understand all the communications necessary to make the services and apps we use work.
We decided to take notes that create a reproducible experience. We document our questions, discovery, and our processes so other people who may want to take a similar journey can have a path to follow. We have broken up our exploration into chapters. Each chapter has a README that documents our exploration and whatever files we create or modify in our exploration. Some chapters have a /final directory that contain the artifacts for the chapter in their final state. If you get lost in a chapter and need a reference point, these may be artifacts to help move you forward. There is, at least as of yet, very little actual software to run from this repo. Instead, the intent is to guide the experience and the learning process.
- a basic undestanding of docker Course link
- a basic understanding of terminals and bash
- a basic understanding of IPv4 and subnets
- optional: understand how
jq
works (if you feel motivated) - optional for the super motivated: understand the communication protocol layers we'll be working with
- get some software installed:
- colima or docker desktop for mac™
jq
by whatever means necessary (e.g.brew install jq
)
We've put some effort into explaining the commands that we're using. However, if we use a command with a flag that doesn't have explanation, check the command's help
for more details; e.g. ping --help
. Alternatively, check the command's manpage; e.g. man ping
.
What if we build a little internet?
- Documenting our process for our future friends
- How to build the internet blog
- Routing/Networking basics
- Layer-2 concepts
- BGP specific routing concepts
- DNS root / federation
- Docker stuffs
- TLS fundamentals
- HTTP fundamentals
- VPN: TCP / UDP differences - maximum segment-size discovery
- What are we doing today ?
- Github projects (Kanban)
- Start with Chapter 1.
- If you want to make changes to this repository (e.g. fixing errors or adding sections), fork this repository and submit a pull-request
- If you have a general question and want someone to talk to, submit an issue
- machines running on 3 or more networks
- packets between machines on different networks
- basic software to be able to view what's happening on the networks
- Application (HTTP servers)
- BGP/IGP:Dozen nodes running BGP
- DNS (root nodes)
- TLS: load/use basic Server/client certificates (generate using openssl)
- Set up a Root CA (Boulder) and import root certificates to Chrome
- Build our own BGP implementation?
- Build our own DNS server?
Here's some interesting topics that came up in the course of our exploration that didn't fit in at the time. We may come back to these?
- DHCP
- Proxy ARP
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.