Update 'selected/http_to_phy.md'

This commit is contained in:
cloin 2022-06-18 20:52:26 +00:00
parent 054b3aafc4
commit 506708aa05
1 changed files with 25 additions and 7 deletions

View File

@ -24,26 +24,35 @@ Good learning resources for HTTP:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview [NOTE(hayden): This link mentions proxies -- do those proxies use TCP to transfer the HTTP messages?]
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages#http_requests
[NOTE(cloin): Do we want to grab images from the mdn HTTP guide, and only point users to specific sections? Find better intro materials? Proxies and "HTTP is simple" are pretty in the weeds at this point]
<-- Link to expanded, less curated library of topical info -->
<-- Branch into REST/GraphQL here -->
## IP and TCP -- Designed for Delivery
## IP -- What's My Address?
Starting with IP (Internet Protocol), it sits before the TCP section, and contains important information for routing across larger networks, like where the packet is coming from (the source IP address), and where the packet needs to go (the destination IP address).
Routers use IP addresses to route the packet across the internet.
Good learning resources for IP:
- https://www.youtube.com/watch?v=rPoalUa4m8E [NOTE(hayden): Should point to point links, 'frames', and MAC addresses be covered before this point? -- (cloin) probably needs to be swapped with another video, IP *shouldn't* need to cover those, those *should* live in the ethernet content]
- https://www.youtube.com/watch?v=VWJ8GmYnjTs
<-- Link to expanded, less curated library of topical info -->
<-- Branch into TUN via link here -->
## TCP -- Retry Retry Retry
TCP (Transmission Control Protocol) comes right after IP. TCP's job is to ensure messages get to their destination
as reliably as possible. TCP provides a few nice guarantees which make writing network code a little easier.
as reliably as possible.
[NOTE(cloin): rephrase me?]
The internet has a big problem to deal with. Messages don't always arrive as expected.
TCP does a handful of important things to make communication possible.
https://www.youtube.com/watch?v=IP-rGJKSZ3s
TCP provides a few nice guarantees which make writing 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 holding on to your packets until it can send them to your program properly, in order. TCP also
handles congestion control, monitoring network capacity and using that to automatically scale how fast it sends messages.
missed packets and holding on to your packets until it can send them to your program properly, in order. TCP also
handles congestion control, monitoring network capacity and using that to automatically scale how fast it sends messages.
TCP contains an important bit of information, called a port, that your operating system uses to send packets to the right program on your machine. If you listen on a port, like 80 (the typical port used for HTTP),
your OS will direct all traffic tagged with port 80, to you. Likewise, you can send to a specific port, and the destination will
@ -52,7 +61,6 @@ use that to route it to the right program.
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 [NOTE(hayden): I think this link in particular needs further context (although I do understand why it is relevant, especially given the previous video) -- (cloin) check in on this at the meeting]
<-- Link to expanded, less curated library of topical info -->
<-- Branch into UDP, QUIC, TLS, etc. via link here -->
@ -63,7 +71,10 @@ Good learning resources for TCP:
So, how do you *actually* send that cat though? How do you send a real packet yourself?
It's time to make that theory stick.
[Beej's Guide](https://beej.us/guide/bgnet/html/) is probably the best place to start. [NOTE(hayden): This seems like an excellent resource!]
[NOTE(cloin): HTTP Server from Scratch is python, Beej uses C, might cause user confusion. It's worth thinking about article transition, how do we flow from A -> B, and how much prerequiste knowledge we expect]
[Basic HTTP Server from Scratch](https://bhch.github.io/posts/2017/11/writing-an-http-server-from-scratch/)
[Beej's Guide to Sockets](https://beej.us/guide/bgnet/html/) is probably the best place to start. [NOTE(hayden): This seems like an excellent resource!]
## DNS -- Wait, how do I get an IP?
The last really important bit you need to know is DNS. The job of DNS is to help you find IP addresses for domain names,
@ -73,9 +84,14 @@ Here's a great tool for playing with setting up DNS records yourself. Don't worr
there's a bunch of great resources below for grokking the details
- https://messwithdns.net/
[NOTE(cloin): Hey, this one is in Go. Do we want to worry about having a consistent language for these?]
DNS detailed:
- https://wizardzines.com/comics/life-of-a-dns-query/
- https://github.com/jvns/tiny-resolver/blob/main/resolve.go
^ this is the simple DNS resolver mentioned in b0rk's 80 lines of Go tutorial
- https://jvns.ca/blog/2022/02/01/a-dns-resolver-in-80-lines-of-go/
- https://jvns.ca/blog/2022/05/10/pages-that-didn-t-make-it-into--how-dns-works-/
<-- Link to expanded, less curated library of topical info -->
<-- Branch into DNS over HTTPS / DNS Lookup Security via link here -->
@ -83,6 +99,8 @@ DNS detailed:
## Rock Bottom (Ethernet and PHY)
Ok, so you've got some of the basics down, and you're ready for some serious spelunking?
Let's talk bits and bytes.
Watch these up, stopping after video 8 (The Internet Protocol)
- https://www.youtube.com/watch?v=XaGXPObx2Gs&list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW
<br>