commit b643d4291aa9a7868898b216595bff5582c5a33b Author: Colin Davidson Date: Sun Feb 13 20:54:41 2022 -0800 add HTTP->PHY draft diff --git a/http_to_phy.md b/http_to_phy.md new file mode 100644 index 0000000..70561fd --- /dev/null +++ b/http_to_phy.md @@ -0,0 +1,131 @@ +# So You Want to Make Internet Lasagna? + +## The Recipe + +| Communication | Discovery | +| ------------- | --------- | +| HTTP | | +| TCP | DNS | +| IP | DHCP | +| Ethernet | ARP | + +
+ +## Starting from HTTP + +HTTP (Hypertext Transfer Protocol), is what browsers use talk to web servers to send and receive web pages, +do basic transactions, like sending a form from your browser to the server, requesting some database +information for display, or updating your account settings. + +Good learning resources for HTTP: +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview +- https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages#http_requests + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into REST/GraphQL here --> + +## Diving into the meat and potatoes with TCP and IP + +HTTP responses and requests are a sequence of bytes, chunked up and sent in packets, +often through a protocol called TCP (Transmission Control Protocol). TCP provides a few +nice guarantees which make writing reliable network code a little easier. +When a message gets sent via TCP, it ensures that chunks get passed to the application +in order. If packets get dropped along the way, or arrive out of order, TCP handles resending + missed packets and buffering before the application gets the packet, until order can be restored. + +Good learning resources for TCP: +- https://www.youtube.com/watch?v=4IMc3CaMhyY +- https://www.youtube.com/watch?v=F27PLin3TV0 +- https://www.youtube.com/watch?v=IP-rGJKSZ3s + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into UDP, QUIC, TLS, etc. via link here --> + +IP (Internet Protocol) sits directly below TCP, but often gets bundled together. IP is a +small header attached right above the protocol header, and contains important information, +like where the packet is coming from, and where the packet needs to go, so network hardware +along the way can route it from A->B to reach it's destination + +Good learning resources for IP: +- https://www.youtube.com/watch?v=rPoalUa4m8E +- https://www.youtube.com/watch?v=VWJ8GmYnjTs + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into TUN via link here --> + +
+ +## Making it Tractable + +So, how do you take all that theory and make it stick? How do you send a real packet yourself? +Some good outlets for exercises: +- https://beej.us/guide/bgnet/html/ +- https://github.com/shuveb/zerohttpd + +## Taking the Real Plunge + +Ok, so you've got some of the basics down, and you're ready for some serious spelunking? +Let's talk Ethernet and PHY. +- https://www.youtube.com/watch?v=XaGXPObx2Gs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW + +
+ +## Buttoning up with Discovery Protocols + +So, how does the computer get an IP address? How do we know what the router's IP is? +How do find the IP address of "https://handmade.network/" so we can send it a request? +Discovery protocols to the rescue! + +## Putting on the ARP Goggles + +At the bottom of the protocol stack, ARP (Address Resolution Protocol) is how your computer +reaches out and understands the local network it lives on. When an ethernet cable gets plugged into +your computer, it broadcasts an ARP packet, gathering responses to know how to address +messages directly to specific local machines. The initial ARP packet contains the MAC +address of the computer sending, and responses from all machines that want to be discovered +get fired back with their MAC addresses in tow. + +Good learning resources for ARP: +- https://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/ + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into TAP via link here --> + +## Finding the Mailman with DHCP + +DHCP sits near the middle, but is incredibly important. When you want to send a packet to a network +beyond your own, somebody has to deliver that packet. To find the packet post office, your computer +broadcasts a DHCP discover packet, and collects IP offers from all DHCP servers on the network. +At that point, typically it will fire off a request for the first IP it recieves, and get a +confirmation or denial for that request. DHCP acks typically also contain the IP address of the router, +the local DNS server, and more + +Good learning resources for DHCP: +- https://docs.microsoft.com/en-us/windows-server/networking/technologies/dhcp/dhcp-top + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into PXE Booting via link here --> + +## Using the DNS Phonebook + +DNS sits at the top acting as a final, important, icing on the cake. The job of DNS is primarily to +provide lookup services for domain names. To resolve "https://handmade.network/" into an IP address +so we can send it an HTTP request, we send a lookup request to the DNS server, and it will do the requisite +forwarding until it either has an IP address to send back, or fails. + +Good learning resources for DNS: +- https://www.cloudflare.com/learning/dns/what-is-dns/ + +<-- Link to expanded, less curated library of topical info --> +<-- Branch into DNS over HTTPS / DNS Lookup Security via link here --> + +## Fun Tangents + +- Network Bridging +- DHCP Robin Hood +- PXE Booting +- SMTP +- Routing and Switching +- BGP +- TLS/SSL +- Inspection and Testing Tools: tcpdump, wireshark, netcat and more