<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bishwas Adhikari</title><description>Beginner-friendly notes and tutorials. I learn things and write them down so you can learn them too.</description><link>https://bishwas54.com.np/</link><language>en</language><item><title>Lesson 07 — Routing</title><link>https://bishwas54.com.np/tutorials/devops-networking/routing/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/routing/</guid><description>Since Lesson 01, one phrase has carried the whole story: junctions read the address and &quot;pick a direction.&quot; The MAC lesson sharpened it — the IP envelope crosses the world untouched while each hop reads 140.82.121.4 and decides which way to pass it.</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 4 — the local-or-gateway decision, routing tables, the default route ladder, how tables write themselves
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 05 (the gateway from the DHCP bundle), Lesson 06 (MAC envelopes rewritten at every hop)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#the-last-somehow&quot;&gt;The last &amp;quot;somehow&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#junction--router&quot;&gt;Junction = router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-routers-one-question&quot;&gt;The router&apos;s one question&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-decision-starts-at-your-laptop&quot;&gt;The decision starts at your laptop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#inside-the-router--the-table&quot;&gt;Inside the router — the table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-default-route-and-the-ladder-of-defaults&quot;&gt;The default route, and the ladder of defaults&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-top-of-the-ladder--where-routers-must-know&quot;&gt;The top of the ladder — where routers must know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#who-writes-a-million-lines&quot;&gt;Who writes a million lines?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#where-this-appears-in-real-work&quot;&gt;Where this appears in real work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;The last &amp;quot;somehow&amp;quot;&lt;/h2&gt;
&lt;p&gt;Since Lesson 01, one phrase has carried the whole story: junctions read the address and &lt;em&gt;&amp;quot;pick a direction.&amp;quot;&lt;/em&gt; The MAC lesson sharpened it — the IP envelope crosses the world untouched while each hop reads &lt;code&gt;140.82.121.4&lt;/code&gt; and decides which way to pass it. This lesson explains the deciding.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Junction = router&lt;/h2&gt;
&lt;p&gt;A small unification first. These lessons said &amp;quot;junction&amp;quot; for the boxes along the path and &amp;quot;router&amp;quot; for the box in the house. Truth: &lt;strong&gt;they are the same thing.&lt;/strong&gt; Every junction on Earth is a router. The home router is simply the first one on the path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The router&apos;s one question&lt;/h2&gt;
&lt;p&gt;A router&apos;s whole job is one repeated question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;An envelope for address X just arrived. Which of my exits does it leave through?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note the shape: a router has a handful of &lt;strong&gt;exits&lt;/strong&gt; — the home router has two (the house side and the internet side); a big city router has dozens — and it must map any of 4.3 billion possible addresses onto one of them. In a fraction of a millisecond, millions of times per second.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The decision starts at your laptop&lt;/h2&gt;
&lt;p&gt;Before any router touches the envelope, the &lt;em&gt;laptop&lt;/em&gt; makes the first routing decision. It has exactly two options:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option A — the destination is inside the house.&lt;/strong&gt; The laptop &lt;code&gt;192.168.1.47&lt;/code&gt; sends to the TV &lt;code&gt;192.168.1.53&lt;/code&gt;. Same network. No router needed at all: ARP-shout for the TV&apos;s MAC, wrap the Layer 2 envelope &lt;strong&gt;directly to the TV&apos;s chip&lt;/strong&gt;, done. The message never visits the router.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option B — the destination is outside.&lt;/strong&gt; Sending to &lt;code&gt;140.82.121.4&lt;/code&gt;. Not one of the house numbers. The laptop cannot deliver this itself — so it does the only thing it can: wrap the Layer 2 envelope to &lt;strong&gt;the way out&lt;/strong&gt; — &lt;code&gt;192.168.1.1&lt;/code&gt;, the gateway from the DHCP bundle. &amp;quot;Not mine to solve. Router&apos;s problem now.&amp;quot;&lt;/p&gt;
&lt;p&gt;How does the laptop know inside from outside? The DHCP bundle told it — alongside the number came a description of &lt;em&gt;which addresses count as the house&lt;/em&gt; (roughly: &amp;quot;anything starting 192.168.1 is local&amp;quot;). The exact notation for writing such ranges is its own small language — next lesson. For now: the laptop knows the house&apos;s range, and everything else goes to the gateway.&lt;/p&gt;
&lt;p&gt;This two-way choice — &lt;em&gt;deliver directly, or hand to the gateway&lt;/em&gt; — is routing at its smallest. Every computer on Earth makes it for every single message.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Inside the router — the table&lt;/h2&gt;
&lt;p&gt;The envelope is now at the home router. The router keeps the core data structure of this entire lesson: a &lt;strong&gt;routing table&lt;/strong&gt; — a short list of rules, each one saying &lt;em&gt;&amp;quot;addresses like this → leave through that exit.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The home router&apos;s entire table, essentially:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;destinations in 192.168.1.x        →  exit: the house side
everything else                    →  exit: the internet side (toward the ISP)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two lines. &lt;code&gt;140.82.121.4&lt;/code&gt; doesn&apos;t match line one, so line two catches it: out toward the internet provider.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The default route, and the ladder of defaults&lt;/h2&gt;
&lt;p&gt;That second line is the most important idea of the lesson. Its official name is the &lt;strong&gt;default route&lt;/strong&gt; — the rule that catches &lt;em&gt;everything not matched by anything more specific&lt;/em&gt;. It is the router&apos;s version of &amp;quot;not mine to solve, pass it up.&amp;quot; The laptop had a way out; the router has one too — its own gateway, pointing at the ISP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A message leaving the house climbs a ladder of defaults.&lt;/strong&gt; Laptop → home router → ISP&apos;s neighbourhood router → ISP&apos;s city router... each device knowing almost nothing, each one having a &amp;quot;somebody bigger will know&amp;quot; rule.&lt;/p&gt;
&lt;p&gt;Ignorance, organised well, gets you remarkably far.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The top of the ladder — where routers must know&lt;/h2&gt;
&lt;p&gt;Follow the ladder up and an obvious problem appears: at the top — the big routers where continents&apos; traffic meets — there &lt;em&gt;is&lt;/em&gt; no &amp;quot;somebody bigger.&amp;quot; A default route pointing up works until the top; up there, the routers must actually &lt;strong&gt;know&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And they do. A core internet router&apos;s table is not two lines — it is roughly a &lt;strong&gt;million&lt;/strong&gt; lines, looking like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;addresses 140.82.112.x – 140.82.127.x   →  exit 7  (toward GitHub&apos;s provider)
addresses 8.8.8.x                        →  exit 3  (toward Google)
addresses 185.199.108.x – ...            →  exit 7
... about a million more ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The lines describe &lt;strong&gt;ranges&lt;/strong&gt;, not individual addresses — nobody lists 4.3 billion entries. This is where Lesson 01&apos;s block system pays off: IP addresses are handed out in &lt;em&gt;blocks&lt;/em&gt; (IANA → regional registries → providers), so whole blocks live in one place, and one table line covers thousands of computers. GitHub&apos;s block, Google&apos;s block — one rule each.&lt;/p&gt;
&lt;p&gt;The full picture of a journey: &lt;strong&gt;a ladder of defaults going up, until the envelope reaches routers specific enough to know the destination&apos;s block — then increasingly specific hops going down&lt;/strong&gt; into GitHub&apos;s provider, GitHub&apos;s building, GitHub&apos;s computer. Up the ignorance ladder, down the knowledge ladder.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Who writes a million lines?&lt;/h2&gt;
&lt;p&gt;The home router&apos;s two-line table was written by nobody — it is automatic from the DHCP setup. But a million-line core table? No human types that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The routers tell each other.&lt;/strong&gt; GitHub&apos;s provider announces to its neighbouring routers: &lt;em&gt;&amp;quot;blocks 140.82.112–127 live behind me.&amp;quot;&lt;/em&gt; Those neighbours pass the announcement to &lt;em&gt;their&lt;/em&gt; neighbours, noting &amp;quot;...reachable through them.&amp;quot; Announcements ripple outward across the planet, each router assembling its own table from everything it has heard — and when a link dies somewhere, withdrawal announcements ripple the same way and tables update themselves within seconds to minutes.&lt;/p&gt;
&lt;p&gt;The agreed script for these announcements is called &lt;strong&gt;BGP&lt;/strong&gt; — file the name away; the idea is what matters:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The internet&apos;s map is not designed or stored anywhere central. It is continuously gossiped into existence by the routers themselves.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is also the honest reason the internet survives cut cables and dead datacenters: routes are not fixed paths. Every router re-derives &amp;quot;best exit&amp;quot; from current announcements. Today&apos;s envelope for &lt;code&gt;140.82.121.4&lt;/code&gt; might cross a different ocean cable than yesterday&apos;s identical envelope, and nobody planned that — the tables just said so today.&lt;/p&gt;
&lt;p&gt;(One consequence filed for later: big internet outages sometimes contain the phrase &amp;quot;BGP announcement&amp;quot; — a bad announcement ripples exactly as efficiently as a good one. Noted; not this lesson&apos;s depth.)&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Where this appears in real work&lt;/h2&gt;
&lt;p&gt;Soon, and concretely: in the AWS part of this track, routing tables get &lt;strong&gt;written by hand.&lt;/strong&gt; A cloud network is a private little internet, and AWS hands over the table editor: lines saying &amp;quot;this range → stay internal&amp;quot; and &amp;quot;everything else → the internet door.&amp;quot; A wrong line makes half the project unreachable in exactly the ways Lesson 01 promised. Everything in this lesson — table, ranges, default route, gateway — reappears there as things that get typed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Local delivery never touches the router.&lt;/strong&gt; Laptop-to-TV goes chip-to-chip. If two devices in one house can&apos;t reach each other, the router&apos;s internet side is irrelevant to the problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A router only ever picks the next exit.&lt;/strong&gt; No router knows the full path. The &amp;quot;route&amp;quot; a message takes is the accumulated result of independent per-hop decisions, not a plan anyone holds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The default route is a rule, not a failure.&lt;/strong&gt; Matching &amp;quot;everything else&amp;quot; is how almost all traffic almost everywhere is handled. Small routers are &lt;em&gt;supposed&lt;/em&gt; to know nothing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More specific wins.&lt;/strong&gt; When both a specific line and the default could match, the specific line is used. The default only catches what nothing else claimed. (This becomes a daily fact of life in cloud routing tables.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paths are not stable.&lt;/strong&gt; Two identical messages may travel different physical routes minutes apart. Debugging with the assumption &amp;quot;it goes the same way every time&amp;quot; fails.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Junctions pick a direction&amp;quot;&lt;/td&gt;
&lt;td&gt;Vague magic in the middle of the internet&lt;/td&gt;
&lt;td&gt;A table lookup: match the address against range rules, take the exit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The home router&lt;/td&gt;
&lt;td&gt;The internet box&lt;/td&gt;
&lt;td&gt;A two-line routing table plus a gateway of its own — bottom rung of a ladder of defaults&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How the internet knows where things are&lt;/td&gt;
&lt;td&gt;Some central map&lt;/td&gt;
&lt;td&gt;No map exists; routers gossip announcements and each assembles its own table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resilience&lt;/td&gt;
&lt;td&gt;The internet mostly works, somehow&lt;/td&gt;
&lt;td&gt;Routes re-derive continuously from live announcements; broken links get gossiped away&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The laptop&apos;s role&lt;/td&gt;
&lt;td&gt;Sends messages, that&apos;s all&lt;/td&gt;
&lt;td&gt;Makes the first routing decision on every single message: local chip-to-chip, or gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ranges in tables&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;The block system from Lesson 01 is what makes million-line tables possible at all&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;router&lt;/strong&gt; — the official name for every junction; the home &amp;quot;internet box&amp;quot; is one&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;exit (interface)&lt;/strong&gt; — one of a router&apos;s connections; the table maps addresses to exits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;routing table&lt;/strong&gt; — the list of &amp;quot;addresses like this → that exit&amp;quot; rules inside every computer and router&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;default route&lt;/strong&gt; — the catch-everything-else rule; the ladder upward&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gateway&lt;/strong&gt; — where a device&apos;s default route points; the way out (from the DHCP bundle, now fully explained)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;announcement&lt;/strong&gt; — a router telling neighbours which blocks live behind it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BGP&lt;/strong&gt; — the agreed script routers use to gossip announcements; name filed, depth deferred&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The range notation&lt;/strong&gt; — how &amp;quot;192.168.1.x&amp;quot; and block ranges are properly written: subnets and CIDR, next lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NAT&lt;/strong&gt; — still owed; the reply&apos;s journey back into the house, lesson 09&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BGP mechanics and BGP-caused outages&lt;/strong&gt; — the name is enough for now&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Writing routing tables in AWS&lt;/strong&gt; — Part 2, where this lesson becomes hands-on&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IP routing fundamentals&lt;/td&gt;
&lt;td&gt;RFC 1122, section 3.3.1 (routing outbound datagrams)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1122.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc1122.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BGP, the announcement protocol&lt;/td&gt;
&lt;td&gt;RFC 4271&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc4271.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc4271.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live global routing table size (~1M lines)&lt;/td&gt;
&lt;td&gt;CIDR Report (updated continuously)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cidr-report.org/as2.0/&quot;&gt;https://www.cidr-report.org/as2.0/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readable overview&lt;/td&gt;
&lt;td&gt;Cloudflare Learning — What is routing?&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cloudflare.com/learning/network-layer/what-is-routing/&quot;&gt;https://www.cloudflare.com/learning/network-layer/what-is-routing/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; the CIDR Report link shows the actual current size of the global routing table — the &amp;quot;million lines&amp;quot; figure can be checked live there.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 07. Next: subnets and CIDR — the little language ranges are written in.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 05 — DHCP</title><link>https://bishwas54.com.np/tutorials/devops-networking/dhcp/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/dhcp/</guid><description>How DHCP automatically hands a joining computer its number, DNS runner, and way out through a four-line conversation, and why the number is a lease rather than a gift.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 1 — DHCP (plus two vocabulary words: host, protocol)
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 01 (the router &amp;quot;handing out numbers&amp;quot;), Lesson 04 (the router handing over &amp;quot;who to ask&amp;quot; for DNS)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#the-mystery-this-lesson-solves&quot;&gt;The mystery this lesson solves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-full-name-word-by-word&quot;&gt;The full name, word by word&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-problem-dhcp-solves&quot;&gt;The problem DHCP solves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-it-works--the-four-line-conversation&quot;&gt;How it works — the four-line conversation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-bundle&quot;&gt;The bundle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-number-is-borrowed-not-given--leases&quot;&gt;The number is borrowed, not given — leases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-one-place-dhcp-is-the-wrong-tool&quot;&gt;The one place DHCP is the wrong tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;The mystery this lesson solves&lt;/h2&gt;
&lt;p&gt;Twice now, a mysterious event has appeared in these lessons — &lt;em&gt;&amp;quot;when your laptop joins the WiFi, the router hands it a number, and also who to ask for DNS.&amp;quot;&lt;/em&gt; Lesson 01 used it. The DNS lesson used it. This lesson gives it its name.&lt;/p&gt;
&lt;p&gt;That handing-over is called &lt;strong&gt;DHCP&lt;/strong&gt;. One job:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When a computer joins a network, DHCP automatically gives it everything it needs to participate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;The full name, word by word&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DHCP = Dynamic Host Configuration Protocol.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every word maps to something in this lesson:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Word&lt;/th&gt;
&lt;th&gt;Meaning in plain terms&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dynamic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Assigned on the fly, from a pool, with leases — the opposite of typed-in-by-hand and permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Host&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The official word for &lt;em&gt;a computer on a network&lt;/em&gt;. A laptop, a TV, the project machine — each is a host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The bundle it hands over: your number, the DNS runner, the way out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Protocol&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;An agreed format for a conversation. The four-line exchange below is the same everywhere, because both sides follow the same script&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The full name is literally the lesson in four words: &lt;em&gt;dynamically configuring hosts, by protocol.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Two of those words matter far beyond DHCP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Host&lt;/strong&gt; — from here on, when documentation says &amp;quot;host,&amp;quot; read &amp;quot;a computer on the network.&amp;quot; The word has been hiding in plain sight since the ports lesson: &lt;code&gt;localhost&lt;/code&gt; — &lt;em&gt;local host&lt;/em&gt; — means &amp;quot;this computer right here.&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol&lt;/strong&gt; — an agreed conversation script between computers. DNS is a protocol. The web&apos;s HTTP is a protocol — that is what the P stands for, sitting unexplained inside &lt;code&gt;https://&lt;/code&gt; since the ports lesson. It gets its own lesson later.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;The problem DHCP solves&lt;/h2&gt;
&lt;p&gt;Imagine DHCP didn&apos;t exist. You buy a new laptop, connect to your home WiFi, and — nothing works. The laptop has no number, and nothing gives it one. You would have to open settings and type, by hand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an IP address for the laptop — one that no other device in the house is using, so first go check what the phone and the TV took,&lt;/li&gt;
&lt;li&gt;and the address of a DNS runner, or no name will ever resolve.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get the number wrong — pick one the TV already holds — and both devices break in confusing ways. Now scale that to an office with five hundred laptops and visitors arriving daily: a person whose entire job is typing numbers into settings and untangling collisions.&lt;/p&gt;
&lt;p&gt;That was actually reality in the early days. DHCP was invented so that joining a network requires &lt;strong&gt;zero typing&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;How it works — the four-line conversation&lt;/h2&gt;
&lt;p&gt;When a laptop connects to the WiFi, before anything else, it has a conversation with the router. Four lines long — and the first line contains a puzzle:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laptop:&lt;/strong&gt; &lt;em&gt;&amp;quot;Anyone out there? I&apos;m new, I need a number.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The puzzle: how does the laptop send &lt;em&gt;any&lt;/em&gt; message yet? A message needs a destination address and a source address, and the laptop has neither. It doesn&apos;t even know the router&apos;s number.&lt;/p&gt;
&lt;p&gt;The answer: this one message is special. It is a &lt;strong&gt;shout&lt;/strong&gt;. Instead of a destination, it is marked &amp;quot;to absolutely everyone on this local network.&amp;quot; Every device in the house receives it. The TV ignores it. The phone ignores it. One device is listening for exactly this shout: the router, which runs a small DHCP answering program.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Router:&lt;/strong&gt; &lt;em&gt;&amp;quot;Welcome. I offer you 192.168.1.47.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The router keeps a list of which numbers in the house are already handed out, picks a free one, and offers it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laptop:&lt;/strong&gt; &lt;em&gt;&amp;quot;I&apos;ll take 192.168.1.47.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Router:&lt;/strong&gt; &lt;em&gt;&amp;quot;Confirmed. It&apos;s yours. Also, here&apos;s everything else you need.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Four lines, a fraction of a second, zero typing. That is the entire &amp;quot;handing over&amp;quot; from Lesson 01.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The bundle&lt;/h2&gt;
&lt;p&gt;The final confirmation carries a small bundle, not just the number — and this is where the DNS lesson connects:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;your number:            192.168.1.47
the DNS runner to ask:  8.8.8.8        ← the &amp;quot;who to ask&amp;quot; from the DNS lesson
the way out:            192.168.1.1    ← the router itself, for leaving the house
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The third line is new, held loosely for now: it is the address of the door — where the laptop should push any message destined &lt;em&gt;beyond&lt;/em&gt; the house. It becomes the star of the routing lesson. What matters here: DHCP is where a computer learns it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The number is borrowed, not given — leases&lt;/h2&gt;
&lt;p&gt;The router doesn&apos;t &lt;em&gt;give&lt;/em&gt; the number — it &lt;strong&gt;lends&lt;/strong&gt; it, with a time limit. The loan is called a &lt;strong&gt;lease&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;192.168.1.47 is yours for 24 hours.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Before the lease runs out, the laptop quietly asks to extend it, and normally gets it — which is why a laptop keeps the same number for months. But if the laptop leaves and never comes back, the lease expires and the number returns to the free pool, ready for the next device.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why lend instead of give?&lt;/strong&gt; Because the pool is small. A home router typically has a couple hundred numbers to hand out. If numbers were given forever, every phone that ever visited the house would keep one eternally, and the pool would slowly empty — the IPv4 exhaustion story from Lesson 01, in miniature, inside the house. Leases mean departed devices automatically return what they borrowed.&lt;/p&gt;
&lt;p&gt;The pattern has appeared before: a granted thing with an expiry that makes the system self-cleaning. DNS answers have TTL; DHCP numbers have leases. Same idea, same reason — nothing stale survives forever.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The one place DHCP is the wrong tool&lt;/h2&gt;
&lt;p&gt;Connect this to the project, because a trap hides here.&lt;/p&gt;
&lt;p&gt;The project machine is &lt;code&gt;10.0.1.10&lt;/code&gt;, and the React frontend has &lt;code&gt;10.0.1.10:8080&lt;/code&gt; written in its settings to reach the Java backend. Suppose that machine got its number by DHCP lease. One day the machine reboots, the lease has lapsed, the router hands it a &lt;em&gt;different&lt;/em&gt; free number — and the frontend&apos;s setting now points at nothing. Everything breaks, and nothing looks wrong anywhere.&lt;/p&gt;
&lt;p&gt;So a rule of thumb the whole industry follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Devices that come and go&lt;/strong&gt; — laptops, phones — take whatever DHCP offers. Nobody contacts &lt;em&gt;them&lt;/em&gt;, so their number can change freely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Computers that others depend on&lt;/strong&gt; — the project machine, anything running a waiter from the ports lesson — get a &lt;strong&gt;fixed number&lt;/strong&gt; that never changes, set deliberately.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The deeper fix is already known from the DNS lesson: depend on &lt;em&gt;names&lt;/em&gt;, not numbers, and the number underneath can change freely. Real systems use both — fixed numbers for the machines, names on top. The project will do exactly this when it gets deployed properly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;DHCP assigns; it does not connect.&lt;/strong&gt; The WiFi connection happens first; DHCP is the conversation that runs immediately after, over that connection. &amp;quot;Connected to WiFi but no internet&amp;quot; is often exactly this split: the connection succeeded, the DHCP conversation failed, and the laptop sits numberless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The first message is a shout, not a normal message.&lt;/strong&gt; It has no destination — it goes to everyone on the local network at once. This is the only way a device with no number and no knowledge of the network can speak at all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A lease renewal is invisible; a lease change is not.&lt;/strong&gt; Devices normally renew and keep their number for months, so DHCP feels permanent. It isn&apos;t — and the day a dependent-upon machine&apos;s number silently changes is the day this lesson pays for itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DHCP hands out more than the number.&lt;/strong&gt; The DNS runner and the way out arrive in the same bundle. When a machine has &amp;quot;wrong DNS&amp;quot; fresh out of joining a network, the DHCP answering program is where that setting came from.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixed numbers are a decision, not a default.&lt;/strong&gt; Machines that others depend on don&apos;t get stable numbers by luck — someone deliberately configured them outside the lease pool.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Joining WiFi&lt;/td&gt;
&lt;td&gt;It just works&lt;/td&gt;
&lt;td&gt;A four-line shout/offer/take/confirm conversation runs instantly, following a fixed script&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your IP at home&lt;/td&gt;
&lt;td&gt;Your number, permanently&lt;/td&gt;
&lt;td&gt;A lease from the router&apos;s pool, silently renewed, recyclable the moment you leave for good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where DNS settings come from&lt;/td&gt;
&lt;td&gt;Somewhere in the operating system&lt;/td&gt;
&lt;td&gt;The DHCP bundle, handed over at join time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Host&amp;quot;&lt;/td&gt;
&lt;td&gt;Vague tech word&lt;/td&gt;
&lt;td&gt;Precisely: a computer on a network — as in &lt;code&gt;localhost&lt;/code&gt;, this computer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Protocol&amp;quot;&lt;/td&gt;
&lt;td&gt;Vague tech word&lt;/td&gt;
&lt;td&gt;Precisely: an agreed conversation script both sides follow — DHCP&apos;s four lines, DNS&apos;s question/answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Servers and DHCP&lt;/td&gt;
&lt;td&gt;Same as any device&lt;/td&gt;
&lt;td&gt;Deliberately excluded — machines others depend on need numbers that never change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DHCP (Dynamic Host Configuration Protocol)&lt;/strong&gt; — the system that automatically hands a joining computer its number, DNS runner, and way out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;host&lt;/strong&gt; — a computer on a network; &lt;code&gt;localhost&lt;/code&gt; = this computer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;protocol&lt;/strong&gt; — an agreed conversation script between computers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;shout (broadcast)&lt;/strong&gt; — a message to everyone on the local network at once; the official word is &lt;em&gt;broadcast&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lease&lt;/strong&gt; — the time-limited loan of an IP number from the pool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pool&lt;/strong&gt; — the set of numbers a DHCP answering program has available to lend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the way out (gateway)&lt;/strong&gt; — the address a computer sends beyond-the-network messages to; officially the &lt;em&gt;gateway&lt;/em&gt;; star of the next lesson&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Routing and &amp;quot;the way out&amp;quot;&lt;/strong&gt; — what the router actually does with a message that leaves the house; next lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How the shout physically reaches everyone&lt;/strong&gt; — needs Layer 2 / MAC addresses, lesson 06... which comes &lt;em&gt;before&lt;/em&gt; routing in our file order, so it arrives first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP — the P in https&lt;/strong&gt; — its own lesson, number 11&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How fixed numbers are configured in practice&lt;/strong&gt; — appears naturally in the AWS part, where every project machine will get one&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DHCP specification&lt;/td&gt;
&lt;td&gt;RFC 2131&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc2131.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc2131.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The bundle&apos;s contents (DNS runner, gateway, and more)&lt;/td&gt;
&lt;td&gt;RFC 2132 — DHCP Options&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc2132.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc2132.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readable overview&lt;/td&gt;
&lt;td&gt;Cloudflare Learning — What is DHCP?&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cloudflare.com/learning/network-layer/what-is-dhcp/&quot;&gt;https://www.cloudflare.com/learning/network-layer/what-is-dhcp/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; RFC 2131 names the four messages DISCOVER, OFFER, REQUEST, ACK — the official versions of shout / offer / take / confirm. Same conversation, formal names.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 05. Next: MAC addresses and ARP — how the shout physically reaches everyone, and the last envelope we haven&apos;t opened.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 04 — DNS</title><link>https://bishwas54.com.np/tutorials/devops-networking/dns/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/dns/</guid><description>How DNS turns names into numbers by walking a chain of delegation, why caching and TTL exist, and who actually runs, sells, and rents out domain names.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 4 — the name-to-number problem, the runner and the chain, caching, TTL
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 01 (IP addresses), Lesson 02 (ports), Lesson 03 (the message and its envelopes)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#the-cheat-we-finally-remove&quot;&gt;The cheat we finally remove&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-problem-dns-solves&quot;&gt;The problem DNS solves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-not-just-use-numbers-directly&quot;&gt;Why not just use numbers directly?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#who-answers-the-question&quot;&gt;Who answers the question?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-computer-does-the-laptop-ask&quot;&gt;Which computer does the laptop ask?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-the-answering-computer-finds-out--the-chain&quot;&gt;How the answering computer finds out — the chain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-a-chain-instead-of-one-big-list&quot;&gt;Why a chain instead of one big list?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-8888-and-who-else-does-this-job&quot;&gt;Why 8.8.8.8, and who else does this job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#remembering-answers--caching&quot;&gt;Remembering answers — caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-problem-remembering-creates&quot;&gt;The problem remembering creates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-fix--ttl&quot;&gt;The fix — TTL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-complete-picture&quot;&gt;The complete picture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#questions-raised-in-this-lesson&quot;&gt;Questions raised in this lesson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;The cheat we finally remove&lt;/h2&gt;
&lt;p&gt;Every walkthrough so far started with the same cheat: &lt;em&gt;&amp;quot;the laptop gets GitHub&apos;s address — take it as given.&amp;quot;&lt;/em&gt; This lesson removes it.&lt;/p&gt;
&lt;p&gt;You typed &lt;code&gt;github.com&lt;/code&gt; into Chrome.&lt;/p&gt;
&lt;p&gt;Look at what you typed. It&apos;s a name. Words, letters, dots. But the outer envelope needs &lt;code&gt;140.82.121.4&lt;/code&gt; — a number. Junctions navigate by numbers only. A junction handed an envelope saying &amp;quot;github.com&amp;quot; would have no idea which direction to pass it. &lt;strong&gt;Names mean nothing to the network.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So before Chrome can build the envelope, it has one problem to solve.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The problem DNS solves&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Turn the name into the number.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the entire job of DNS. Nothing else. Name goes in, number comes out.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Why not just use numbers directly?&lt;/h2&gt;
&lt;p&gt;You could. Typing &lt;code&gt;140.82.121.4&lt;/code&gt; into Chrome works right now. So why does the whole world use names instead?&lt;/p&gt;
&lt;p&gt;Two reasons, both practical:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason 1 — people can&apos;t remember numbers.&lt;/strong&gt; You know &lt;code&gt;github.com&lt;/code&gt;, &lt;code&gt;google.com&lt;/code&gt;, &lt;code&gt;youtube.com&lt;/code&gt; by heart. You don&apos;t know a single one of their numbers. Names are for people; numbers are for junctions. DNS is the translator between the two.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason 2 — the number changes; the name doesn&apos;t.&lt;/strong&gt; This is the deeper one. GitHub moves its computers sometimes — new building, new machines, new numbers. If the whole world had memorised &lt;code&gt;140.82.121.4&lt;/code&gt;, every move would break everything for everyone. Instead, the world memorises the &lt;em&gt;name&lt;/em&gt;, and GitHub just updates what the name points to. The name is a permanent label; the number behind it can quietly change.&lt;/p&gt;
&lt;p&gt;This problem already exists in our own project: the React frontend has &lt;code&gt;10.0.1.10:8080&lt;/code&gt; written in its settings to reach the Java backend. If that computer&apos;s number ever changes, the frontend breaks. A name would fix that. This thought returns when the project gets deployed for real.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Who answers the question?&lt;/h2&gt;
&lt;p&gt;Chrome has a name and needs a number. Where does the answer come from?&lt;/p&gt;
&lt;p&gt;Not from Chrome — it doesn&apos;t know. Not from the laptop — it doesn&apos;t know either.&lt;/p&gt;
&lt;p&gt;The answer comes from &lt;strong&gt;asking another computer.&lt;/strong&gt; There are computers on the internet whose entire job is answering exactly one kind of question: &lt;em&gt;&amp;quot;what number is this name?&amp;quot;&lt;/em&gt; Chrome sends one of them a tiny message — a real message, with envelopes, just like everything else:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;To computer: (the answering computer&apos;s number)
To program: the one on port 53
Text: what number is github.com?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And a tiny message comes back:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Text: github.com is 140.82.121.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now — and only now — Chrome can build the real envelope and ask for the page.&lt;/p&gt;
&lt;p&gt;So every visit to a website is actually &lt;strong&gt;two conversations&lt;/strong&gt;, back to back:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Conversation 1:  &amp;quot;what number is github.com?&amp;quot;  →  &amp;quot;140.82.121.4&amp;quot;
Conversation 2:  &amp;quot;please send me the homepage&amp;quot; →  (the page)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first one is DNS. It happens before every site you visit, in a few milliseconds, invisibly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Port 53:&lt;/strong&gt; in the ports lesson, the well-known ports list had &lt;code&gt;53 DNS&lt;/code&gt; sitting in it, unexplained. Now it&apos;s explained. Port 53 is where the answering programs listen, on every DNS computer in the world.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Which computer does the laptop ask?&lt;/h2&gt;
&lt;p&gt;The laptop already knows who to ask — it has known since the moment it joined the WiFi.&lt;/p&gt;
&lt;p&gt;From Lesson 01: when a laptop connects to WiFi, the router hands it a number automatically. What wasn&apos;t said then: the router hands over &lt;strong&gt;two&lt;/strong&gt; things at that moment. The laptop&apos;s number, and one more line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;...and if you ever need a name turned into a number, ask this computer: &lt;code&gt;8.8.8.8&lt;/code&gt;.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That second thing is the address of an answering computer. The laptop writes it down and keeps it. From then on, every DNS question the laptop ever asks goes to that one address, on port 53.&lt;/p&gt;
&lt;p&gt;So there is no mystery and no searching. The laptop was handed the answer-computer&apos;s address on day one, the same way it was handed its own number.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;How the answering computer finds out — the chain&lt;/h2&gt;
&lt;p&gt;The answering computer receives:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Text: what number is github.com?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here&apos;s the thing — &lt;strong&gt;it doesn&apos;t know either.&lt;/strong&gt; There are hundreds of millions of names in the world. No single computer holds them all. That would be impossible to keep updated.&lt;/p&gt;
&lt;p&gt;Instead, the answering computer &lt;em&gt;finds out&lt;/em&gt;, by following a chain:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1 — ask the top.&lt;/strong&gt; There&apos;s a small set of computers at the very top of the naming world, called the &lt;strong&gt;root&lt;/strong&gt;. Their addresses are famous and never change — every answering computer on Earth has them built in. The root doesn&apos;t know where &lt;code&gt;github.com&lt;/code&gt; is. But it knows something smaller:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;I don&apos;t know github.com. But everything ending in &lt;code&gt;.com&lt;/code&gt; — ask this computer over there.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It answers with a &lt;strong&gt;referral&lt;/strong&gt;: not the number, but who to ask next.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2 — ask the &lt;code&gt;.com&lt;/code&gt; computer.&lt;/strong&gt; The answering computer follows the referral and asks again. The &lt;code&gt;.com&lt;/code&gt; computer holds the list of every name ending in &lt;code&gt;.com&lt;/code&gt; — but only one fact about each:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;I don&apos;t know github.com&apos;s number. But GitHub runs its own answering computer, here&apos;s its address — ask them.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another referral. One step closer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3 — ask GitHub&apos;s own computer.&lt;/strong&gt; This one &lt;strong&gt;does&lt;/strong&gt; know. GitHub runs it, GitHub keeps it updated, and it holds the actual numbers for GitHub&apos;s names:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;github.com is 140.82.121.4.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Done. The chain is three questions long:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;8.8.8.8 asks the root        →  &amp;quot;ask the .com computer&amp;quot;
8.8.8.8 asks .com            →  &amp;quot;ask GitHub&apos;s own computer&amp;quot;
8.8.8.8 asks GitHub&apos;s        →  &amp;quot;140.82.121.4&amp;quot;          ← the answer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then &lt;code&gt;8.8.8.8&lt;/code&gt; sends that number back to the laptop, and Chrome builds the envelope.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Why a chain instead of one big list?&lt;/h2&gt;
&lt;p&gt;Because of who gets to &lt;em&gt;update&lt;/em&gt; things.&lt;/p&gt;
&lt;p&gt;Look at where the real answer lived: on &lt;strong&gt;GitHub&apos;s own computer.&lt;/strong&gt; When GitHub moves buildings and the number changes, GitHub edits its own computer, and the change is instantly live for the whole world. No permission needed, no central authority to notify.&lt;/p&gt;
&lt;p&gt;The root only knows who handles &lt;code&gt;.com&lt;/code&gt;. The &lt;code&gt;.com&lt;/code&gt; computer only knows who speaks for each name. Each level knows one small thing and delegates the rest.&lt;/p&gt;
&lt;p&gt;Same shape as the IANA → regional registries → providers chain from Lesson 01 — nobody holds everything; everybody holds one piece and points downward.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Why 8.8.8.8, and who else does this job&lt;/h2&gt;
&lt;h3&gt;8.8.8.8 does NOT have all the info&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;8.8.8.8&lt;/code&gt; knows &lt;strong&gt;almost nothing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&apos;s not a library. It&apos;s a &lt;strong&gt;runner&lt;/strong&gt;. When the laptop asks it &amp;quot;what number is github.com?&amp;quot;, it doesn&apos;t look the answer up in some giant list it owns — it goes and &lt;em&gt;fetches&lt;/em&gt; the answer by walking the chain:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;you ask 8.8.8.8  →  8.8.8.8 asks the root
                 →  8.8.8.8 asks the .com computer
                 →  8.8.8.8 asks GitHub&apos;s computer
                 →  8.8.8.8 brings the answer back to you
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The info lives at the &lt;strong&gt;end&lt;/strong&gt; of the chain — on GitHub&apos;s own computer, updated by GitHub. &lt;code&gt;8.8.8.8&lt;/code&gt; just does the legwork of asking around, so the laptop doesn&apos;t have to.&lt;/p&gt;
&lt;p&gt;It has exactly one skill — knowing how to walk the chain — plus the built-in addresses of the root computers, which is where every walk starts.&lt;/p&gt;
&lt;h3&gt;Why those digits?&lt;/h3&gt;
&lt;p&gt;Nothing special. It&apos;s an ordinary IP address, exactly like &lt;code&gt;140.82.121.4&lt;/code&gt; — four numbers, same format from Lesson 01. Google owned that particular address and put their runner service on it.&lt;/p&gt;
&lt;p&gt;They chose it for one human reason: &lt;strong&gt;it&apos;s easy to remember and easy to type.&lt;/strong&gt; That matters for a service people configure by hand into routers and laptops. Same reason phone companies like numbers ending in 0000. There is no rule that runners live on repeating digits. It&apos;s marketing, not networking.&lt;/p&gt;
&lt;h3&gt;Who else does this job?&lt;/h3&gt;
&lt;p&gt;Many, many computers. &lt;code&gt;8.8.8.8&lt;/code&gt; is not &lt;em&gt;the&lt;/em&gt; runner. It&apos;s &lt;em&gt;a&lt;/em&gt; runner — one of thousands. Three kinds exist:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your internet company&apos;s runner.&lt;/strong&gt; Every internet provider operates one for its customers. This is the default — when the router handed the laptop &amp;quot;who to ask&amp;quot; on day one, it most likely pointed at the provider&apos;s runner, not Google&apos;s. Most people use this their whole lives without knowing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Big public runners.&lt;/strong&gt; A few companies run free ones open to everyone, on deliberately memorable addresses:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;8.8.8.8   Google
1.1.1.1   Cloudflare
9.9.9.9   Quad9
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Anyone can point their laptop at any of these instead of their provider&apos;s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Private ones.&lt;/strong&gt; Companies run runners inside their own networks too — that becomes relevant in AWS and Kubernetes, where we will meet runners we control ourselves.&lt;/p&gt;
&lt;p&gt;And the crucial thing: &lt;strong&gt;every one of them walks the same chain and gets the same answer.&lt;/strong&gt; Ask Google&apos;s runner, Cloudflare&apos;s, or your provider&apos;s what number &lt;code&gt;github.com&lt;/code&gt; is — all three walk root → &lt;code&gt;.com&lt;/code&gt; → GitHub&apos;s computer, and all three come back with whatever GitHub&apos;s computer says. The runners are interchangeable. The &lt;em&gt;answers&lt;/em&gt; have a single source: the computer at the end of the chain, run by the name&apos;s owner.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;8.8.8.8 holds nothing; it fetches. The answer lives with the name&apos;s owner, and any runner in the world can go get it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Remembering answers — caching&lt;/h2&gt;
&lt;p&gt;You visit &lt;code&gt;github.com&lt;/code&gt;. Chrome asks the runner, the runner walks the chain, the answer comes back. Fine.&lt;/p&gt;
&lt;p&gt;Thirty seconds later you click a link on GitHub. Another page from &lt;code&gt;github.com&lt;/code&gt;. Does the whole chain get walked again? And again for the next click? One person alone would trigger dozens of walks per hour. Multiply by two billion people.&lt;/p&gt;
&lt;p&gt;The root computers would be answering the same question — &amp;quot;who handles &lt;code&gt;.com&lt;/code&gt;?&amp;quot; — trillions of times a day. Almost every answer identical to the last one. Pure waste.&lt;/p&gt;
&lt;p&gt;So everything in this system does the obvious thing: &lt;strong&gt;it remembers answers it already got.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The laptop remembers. The runner remembers. Once either of them has learned &lt;code&gt;github.com is 140.82.121.4&lt;/code&gt;, the next question gets answered instantly from memory — no chain, no waiting:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;First visit:    laptop → runner → root → .com → GitHub&apos;s computer   (full walk)
Next visits:    laptop → its own memory                              (instant)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This remembering is called &lt;strong&gt;caching&lt;/strong&gt;, and the stored answer is a &lt;strong&gt;cache&lt;/strong&gt;. These words appear constantly in this field — they just mean &amp;quot;kept a copy to avoid asking again.&amp;quot;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The problem remembering creates&lt;/h2&gt;
&lt;p&gt;Reason 2 from the start of this lesson: &lt;em&gt;the number changes; the name doesn&apos;t.&lt;/em&gt; GitHub moves computers, updates its own answering computer, new number is live.&lt;/p&gt;
&lt;p&gt;Except — the laptop still has the &lt;strong&gt;old&lt;/strong&gt; number memorised. So does the runner. So do millions of laptops and runners around the world. They&apos;re not going to ask again; that was the whole point of remembering. Everyone confidently uses a stale answer, and GitHub&apos;s new number never reaches them.&lt;/p&gt;
&lt;p&gt;Remembering solved the waste problem and created a staleness problem.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The fix — TTL&lt;/h2&gt;
&lt;p&gt;Every DNS answer carries one extra piece of information — &lt;strong&gt;how long it may be remembered:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;github.com is 140.82.121.4 — you may remember this for 60 seconds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That number is called the &lt;strong&gt;TTL&lt;/strong&gt; — &lt;em&gt;time to live&lt;/em&gt;. When it runs out, the memorised answer is thrown away, and the next question triggers a fresh walk of the chain.&lt;/p&gt;
&lt;p&gt;The elegant part: &lt;strong&gt;the name&apos;s owner sets it.&lt;/strong&gt; The TTL comes from GitHub&apos;s own computer, along with the answer. So GitHub controls the trade-off for its own name:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Long TTL&lt;/strong&gt; (say, a day): the world barely ever re-asks. Fast and cheap — but if the number changes, some people stay stale for up to a day.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Short TTL&lt;/strong&gt; (say, 60 seconds): the world re-asks constantly — more chain-walking, but a change spreads to everyone within a minute.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Real teams use this actively.&lt;/strong&gt; Planning to move an app to a new computer next Tuesday? Days before, drop the TTL to 60 seconds. The world&apos;s caches start refreshing every minute. Make the move — everyone follows within a minute. Then raise the TTL back up. This is a genuine DevOps move, and this is the machinery behind it.&lt;/p&gt;
&lt;h3&gt;Why &amp;quot;it works for me but not for him&amp;quot;&lt;/h3&gt;
&lt;p&gt;This also explains a classic confusion in real work. A number changes. One colleague sees the new site; another sees the old one. Nobody is wrong — one laptop&apos;s memorised answer hasn&apos;t expired yet, the other&apos;s had. Wait out the TTL, or force the laptop to forget early (there&apos;s a command for that — it goes in the troubleshooting tools lesson), and they match again.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The complete picture&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;1. Laptop joined WiFi        →  router handed it: your number + who to ask (8.8.8.8)
2. You typed github.com      →  Chrome asks 8.8.8.8: &amp;quot;what number is github.com?&amp;quot;
3. 8.8.8.8 walks the chain   →  root → .com → GitHub&apos;s computer → 140.82.121.4
4. Answer returns            →  Chrome builds the envelope and asks for the page
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And in four lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;names exist because people can&apos;t remember numbers, and numbers change
runners fetch answers by walking the chain: root → .com → the owner&apos;s computer
everyone remembers answers to avoid re-walking
every answer expires after its TTL, set by the owner
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;Questions raised in this lesson&lt;/h2&gt;
&lt;h3&gt;How does &amp;quot;asking another computer&amp;quot; actually work?&lt;/h3&gt;
&lt;p&gt;Answered in full above — the two halves are &lt;a href=&quot;#which-computer-does-the-laptop-ask&quot;&gt;which computer gets asked&lt;/a&gt; (the router hands over the runner&apos;s address on day one, alongside the laptop&apos;s own number) and &lt;a href=&quot;#how-the-answering-computer-finds-out--the-chain&quot;&gt;how that computer finds out&lt;/a&gt; (it walks the chain: root → &lt;code&gt;.com&lt;/code&gt; → the owner&apos;s computer).&lt;/p&gt;
&lt;h3&gt;Why is it 8.8.8.8? Does it have all the info? Is it the only one?&lt;/h3&gt;
&lt;p&gt;Answered in full above — &lt;a href=&quot;#why-8888-and-who-else-does-this-job&quot;&gt;Why 8.8.8.8, and who else does this job&lt;/a&gt;. Short version: the digits are marketing, not networking; it holds almost nothing and fetches everything; and it is one runner among thousands of interchangeable ones, all of which walk the same chain to the same single source of truth.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Follow-up questions: who owns names, endings, and the whole system&lt;/h2&gt;
&lt;p&gt;These questions came after the lesson was first closed. Recorded here in full, in the order asked.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;First, the right word: extension = TLD&lt;/h3&gt;
&lt;p&gt;The ending of a name — &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.in&lt;/code&gt;, &lt;code&gt;.org&lt;/code&gt; — is officially called a &lt;strong&gt;TLD&lt;/strong&gt; (top-level domain). &amp;quot;Top-level&amp;quot; because it is the top of the chain: the root&apos;s referrals point at TLD computers.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Who owns domain names and endings?&lt;/h3&gt;
&lt;p&gt;Ownership follows the exact same three levels as the resolution chain: &lt;strong&gt;root → &lt;code&gt;.com&lt;/code&gt; computer → GitHub&apos;s computer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The top: ICANN.&lt;/strong&gt; The root is overseen by an organisation called &lt;strong&gt;ICANN&lt;/strong&gt; — same species as IANA and the IETF from earlier lessons: a non-profit, owned by nobody, controlled by no government. (IANA, from Lesson 01, operates as part of ICANN — the address pool and the name system are stewarded under the same roof.) ICANN&apos;s job at this level is one thing: deciding &lt;strong&gt;which TLDs exist at all&lt;/strong&gt;. A TLD exists only if ICANN has put it into the root.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The middle: one company per TLD.&lt;/strong&gt; Each TLD&apos;s computer — the one that answered &amp;quot;ask GitHub&apos;s own computer&amp;quot; in the chain — is operated by a single organisation called the &lt;strong&gt;registry&lt;/strong&gt; for that TLD. ICANN contracts each TLD out to exactly one registry. For &lt;code&gt;.com&lt;/code&gt;, that is a company called Verisign. The registry keeps the master list: every registered &lt;code&gt;.com&lt;/code&gt; name and who speaks for it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The bottom: you.&lt;/strong&gt; And a truth that surprises everyone: &lt;strong&gt;nobody owns a domain name.&lt;/strong&gt; Not even github.com is &lt;em&gt;owned&lt;/em&gt; by GitHub. Names are &lt;strong&gt;rented&lt;/strong&gt;, yearly. GitHub pays every year to keep &lt;code&gt;github.com&lt;/code&gt; on Verisign&apos;s list. Stop paying, and the name eventually goes back into the pool for anyone to take. It is a lease, permanently renewable, never a purchase.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Where does GoDaddy fit? Why can it sell domains?&lt;/h3&gt;
&lt;p&gt;GoDaddy owns nothing in this chain. It is a &lt;strong&gt;retailer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The registry (Verisign) keeps the master list but does not deal with the public. Instead, ICANN accredits companies — called &lt;strong&gt;registrars&lt;/strong&gt; — to sell entries in that list on the registry&apos;s behalf. GoDaddy, Namecheap, and hundreds of others are registrars.&lt;/p&gt;
&lt;p&gt;&amp;quot;Buying&amp;quot; &lt;code&gt;myapp.com&lt;/code&gt; on GoDaddy for $12/year actually flows like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;you pay GoDaddy ~$12/year
   → GoDaddy pays Verisign ~$10 (the wholesale price of a .com entry)
      → Verisign pays ICANN a small fee ($0.18 per name per year)
         → Verisign adds one line to the .com master list:
           &amp;quot;myapp.com → speaks-for computer is at X&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GoDaddy&apos;s business is the retail margin plus the customer-facing work: the website, the payment, the support. The actual record lives with Verisign. This is why a name can be moved &lt;em&gt;from&lt;/em&gt; GoDaddy &lt;em&gt;to&lt;/em&gt; Namecheap without losing it — registrars are interchangeable shopfronts over the same master list. Exactly like the DNS runners: many doors, one source of truth.&lt;/p&gt;
&lt;p&gt;The full ownership stack:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ICANN       decides which TLDs exist            (the root level)
registry    runs one TLD&apos;s master list          (Verisign for .com)
registrar   sells entries to the public         (GoDaddy, Namecheap...)
you         rent one name, per year             (myapp.com)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Can I create my own TLD?&lt;/h3&gt;
&lt;p&gt;Yes. Genuinely.&lt;/p&gt;
&lt;p&gt;ICANN does not invent TLDs itself — it opens &lt;strong&gt;application rounds&lt;/strong&gt; where anyone qualified can propose one. The last round was in 2012, and it created over 1,200 new TLDs — brand ones like &lt;code&gt;.google&lt;/code&gt; and &lt;code&gt;.bmw&lt;/code&gt;, city ones like &lt;code&gt;.nyc&lt;/code&gt; and &lt;code&gt;.london&lt;/code&gt;, industry ones like &lt;code&gt;.shop&lt;/code&gt; and &lt;code&gt;.finance&lt;/code&gt;. Those odd endings exist because companies applied for them.&lt;/p&gt;
&lt;p&gt;What it takes (2026 round):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The application fee alone is &lt;strong&gt;USD 227,000&lt;/strong&gt; — a non-refundable evaluation cost, not a purchase price&lt;/li&gt;
&lt;li&gt;Proof of technical and financial capability to run the TLD&apos;s computer (the registry role) — or hiring an approved provider to run it&lt;/li&gt;
&lt;li&gt;Background checks, public objection periods, and if two applicants want the same string, an ICANN-run auction&lt;/li&gt;
&lt;li&gt;Winning means signing an ongoing contract with ICANN, with yearly fees — the winner &lt;em&gt;becomes the registry&lt;/em&gt; for that TLD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Timing at the moment this was asked: the current application window — the first since 2012 — opened on 30 April 2026 and closes on &lt;strong&gt;12 August 2026&lt;/strong&gt;, one week after this conversation. There is no announced date for the next round.&lt;/p&gt;
&lt;p&gt;Realistically, TLD creation is for corporations and governments. But the mechanism matters more than the price tag: the system is genuinely open. The root is not a fixed list from the 1980s; it is an administered, expandable registry, and &lt;code&gt;.com&lt;/code&gt; has no special magic over &lt;code&gt;.pizza&lt;/code&gt; except age and habit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Why does ICANN take the money? Why so expensive?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Why money at all:&lt;/strong&gt; evaluating an application costs real work. When someone applies for &lt;code&gt;.pizza&lt;/code&gt;, ICANN pays panels of people to verify the applicant&apos;s finances (can they run this for years without collapsing?), verify the technical setup (can their computer answer the world&apos;s questions reliably?), run background checks on the people behind it, handle objections (&amp;quot;that&apos;s our trademark!&amp;quot;), disputes, and auctions — all legally watertight, because rejected applicants sue. The fee pays those people. ICANN&apos;s stated rule: the fee is designed to fully cover the costs of the application round, so the program is cost-neutral — no profit, no loss.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why THIS expensive:&lt;/strong&gt; two reasons stacked.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The evaluation genuinely costs that much&lt;/strong&gt; — months of specialist panels per application, multiplied by legal defensibility.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The price is also a filter, and that is deliberate.&lt;/strong&gt; A TLD lives in the root, and the root must stay clean and stable — it is the level every DNS question in the world starts from. If applying cost $50, a million people would apply for joke TLDs, squatters would grab every word in the dictionary to resell, and the evaluation system would drown. At $227,000, only applicants who seriously intend to &lt;em&gt;operate&lt;/em&gt; a TLD for decades show up. Expensive is part of the design.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;What does &amp;quot;top of the chain&amp;quot; mean?&lt;/h3&gt;
&lt;p&gt;The chain from this lesson, drawn as levels:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LEVEL 1  the root            &amp;quot;for .com, ask over there&amp;quot;        ← the top
LEVEL 2  the .com computer   &amp;quot;for github.com, ask over there&amp;quot;
LEVEL 3  GitHub&apos;s computer   &amp;quot;github.com is 140.82.121.4&amp;quot;      ← the bottom
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;quot;Top&amp;quot; means level 1 — the place every fresh walk starts. Every question about any name in the world begins by asking the root. Everything else hangs below it. A TLD is called &amp;quot;top-level&amp;quot; because it is the level the root hands out referrals for.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;What does the root actually look like?&lt;/h3&gt;
&lt;p&gt;The root is &lt;strong&gt;a text file.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not a metaphor. An actual plain text file, called the &lt;strong&gt;root zone file&lt;/strong&gt;, maintained by IANA. It is public and downloadable by anyone:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.internic.net/domain/root.zone
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It contains thousands of lines. Simplified, they say:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;com.      →  ask the computers run by Verisign, at these addresses
in.       →  ask the computers run by India&apos;s registry, at these addresses
pizza.    →  ask the computers run by .pizza&apos;s registry, at these addresses
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One line-group per TLD: the ending, and the addresses of the computers that answer for it. That is the entire top of the naming world. When ICANN &amp;quot;adds a TLD to the root,&amp;quot; a person at IANA literally edits this file and publishes a new version. The file has a serial number that ticks up with each edit.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;How does the root file reach the public? How do registrars &amp;quot;get&amp;quot; TLDs?&lt;/h3&gt;
&lt;p&gt;Two separate mechanisms:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The file reaches the world through the root computers.&lt;/strong&gt; The root computers — whose addresses are built into every runner — each hold a copy of that text file and answer questions from it. When IANA publishes a new version, all the root computers pull the update, typically live worldwide within hours. That is the entire distribution: one file, copied to a set of computers that every runner on Earth knows how to ask.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Registrars don&apos;t &amp;quot;get&amp;quot; TLDs at all.&lt;/strong&gt; A registrar never possesses a TLD — the registry does. What a registrar gets is a &lt;strong&gt;contract&lt;/strong&gt;: an agreement with a registry (say, Verisign for &lt;code&gt;.com&lt;/code&gt;) granting it permission to add, renew and delete entries in that registry&apos;s master list, on behalf of paying customers. GoDaddy holds such contracts with many registries, which is why it can sell &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.in&lt;/code&gt; and &lt;code&gt;.pizza&lt;/code&gt; names alike. The registrar is a shopfront with write-access to someone else&apos;s list. Nothing more.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;How do we know if something is a TLD or not?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;It is a TLD if it has a line in the root file.&lt;/strong&gt; No line, not a TLD, and no name ending in it can exist.&lt;/p&gt;
&lt;p&gt;For humans, IANA publishes the same information as a browsable list:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.iana.org/domains/root/db
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every TLD in existence — about 1,400 today — with who runs each. &lt;code&gt;.pizza&lt;/code&gt; is there. &lt;code&gt;.google&lt;/code&gt; is there. &lt;code&gt;.notarealtld&lt;/code&gt; is not, so &lt;code&gt;myapp.notarealtld&lt;/code&gt; cannot exist anywhere: the root would answer &amp;quot;no such ending&amp;quot; and every chain-walk would die at step 1.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;What does Verisign&apos;s master list look like?&lt;/h3&gt;
&lt;p&gt;The same thing, one level down: &lt;strong&gt;another text file&lt;/strong&gt;, just enormously bigger.&lt;/p&gt;
&lt;p&gt;The root file has ~1,400 entries — one per TLD. Verisign&apos;s &lt;code&gt;.com&lt;/code&gt; file has about &lt;strong&gt;160 million&lt;/strong&gt; entries — one per registered &lt;code&gt;.com&lt;/code&gt; name. Same shape of line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;github.com.    →  ask GitHub&apos;s computers, at these addresses
myapp.com.     →  ask (wherever myapp&apos;s owner pointed it)
...160 million more...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each line: a name, and who speaks for it. Renting &lt;code&gt;myapp.com&lt;/code&gt; through GoDaddy means GoDaddy&apos;s system telling Verisign&apos;s system to append that line. Stop paying, and the line is eventually removed. The &amp;quot;master list&amp;quot; is that literal.&lt;/p&gt;
&lt;p&gt;The whole naming system, top to bottom, is text files pointing at other text files, copied onto computers that answer questions from them.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;How does the availability check work?&lt;/h3&gt;
&lt;p&gt;Typing &lt;code&gt;myapp.com&lt;/code&gt; into GoDaddy&apos;s search box and seeing &amp;quot;available!&amp;quot; or &amp;quot;taken&amp;quot; is exactly what you would now guess:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;you type myapp.com into GoDaddy
   → GoDaddy asks Verisign&apos;s system: &amp;quot;is there a line for myapp.com?&amp;quot;
      → Verisign checks the list
   ← &amp;quot;no line exists&amp;quot;
← GoDaddy shows you: &amp;quot;available!&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One question, one lookup, one answer. Registrars have a direct connection to each registry&apos;s system for exactly this — the same connection used to write the line in when someone pays. (The question-and-answer format between them has a name, &lt;strong&gt;EPP&lt;/strong&gt; — file it away; it never needs touching directly.)&lt;/p&gt;
&lt;p&gt;The part worth keeping is the &lt;em&gt;authority&lt;/em&gt;: GoDaddy does not decide availability, and neither does any registrar. They all ask the same list. That is why the answer is identical on GoDaddy, Namecheap, or anywhere else — one file, many shopfronts.&lt;/p&gt;
&lt;p&gt;When payment happens, the line gets written into the list &lt;strong&gt;at that moment&lt;/strong&gt;, and every later availability check by anyone on Earth finds it. First to write the line wins the name.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;What happens if I miss my renewal date?&lt;/h3&gt;
&lt;p&gt;The key is a mechanism nobody tells domain owners about:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On the expiry date, Verisign automatically renews the line anyway&lt;/strong&gt; — and charges the registrar the wholesale fee. The registrar then has a window of up to &lt;strong&gt;45 days&lt;/strong&gt; to either keep the renewal (if the customer finally pays) or cancel it and take a refund from Verisign (if not).&lt;/p&gt;
&lt;p&gt;That registry-level window creates the buffer. The lifecycle of an unpaid &lt;code&gt;.com&lt;/code&gt; (expiry date as day 0):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;day 0         expiry — Verisign auto-renews, the registrar is now deciding
days 0–~30    GRACE PERIOD: renew at the normal price
              (exact length is each registrar&apos;s policy — GoDaddy is
               currently around 30 days; the site usually stops working
               after a few days, but the name is still yours)
~day 30–60    REDEMPTION: the registrar cancelled with Verisign; the name
              enters a 30-day recovery state. Recovery is STILL possible —
              but with a hefty fee ($80+) on top of the renewal
last 5 days   PENDING DELETE: locked, nobody can touch it
after that    the line is removed — the name is publicly available again
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;How does the registrar &amp;quot;decide&amp;quot; to remove the line?&lt;/strong&gt; It does nothing active — it just &lt;em&gt;stops paying&lt;/em&gt;. Cancelling the auto-renewal within Verisign&apos;s 45-day window is what starts the deletion clock. The removal is the consequence of the registrar taking its refund.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much buffer?&lt;/strong&gt; Roughly 30 days at normal price, then ~30 more at ransom price, then ~5 days locked — about 65–75 days total between expiry and true release. But the grace period at normal price is &lt;strong&gt;registrar policy, not a law&lt;/strong&gt;; it varies and can change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Does the registrar pay by itself if the customer doesn&apos;t renew?&lt;/strong&gt; Technically Verisign auto-renewed on day one — but the registrar will &lt;em&gt;undo&lt;/em&gt; that renewal and take the refund rather than absorb the cost. No registrar pays to keep a name alive out of kindness. Worse: for names with traffic, registrars may auction them to third parties during the redemption phase. Expired names with visitors are a resale market.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The habit to take from this:&lt;/strong&gt; the buffer exists to save you from accidents, not to be a payment plan. Real teams put domain renewal on auto-pay, because the failure mode — losing a name to a squatter who wants $5,000 for it back — is not recoverable by any technical means. The name system has no &amp;quot;but it was mine&amp;quot; appeal process. The line either exists or it doesn&apos;t.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Country endings: .in, .np — and why .com.np instead of .np&lt;/h3&gt;
&lt;p&gt;Country endings are just TLDs with one special rule about &lt;em&gt;who&lt;/em&gt; gets them.&lt;/p&gt;
&lt;p&gt;Early in the internet&apos;s history, a decision was made: every country gets a two-letter ending, taken from an already-existing international standard list of country codes — the same list that gives IN for India, NP for Nepal, JP for Japan on currency codes and vehicle stickers. ICANN does not invent these codes; it inherits them from that list. Country on the list → entitled to a TLD.&lt;/p&gt;
&lt;p&gt;The delegation then works like everything else: ICANN puts the line in the root, pointing at a registry — but for a country code, the registry is an organisation &lt;strong&gt;in or approved by that country.&lt;/strong&gt; Each country then runs its ending by its own rules: its own prices, its own eligibility requirements, its own structure. ICANN hands over the ending and steps back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why &lt;code&gt;.com.np&lt;/code&gt; and not just &lt;code&gt;.np&lt;/code&gt;?&lt;/strong&gt; Because that is Nepal&apos;s registry exercising exactly that freedom. Nepal organised its space with categories &lt;em&gt;underneath&lt;/em&gt; its TLD:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.com.np   for companies
.edu.np   for schools
.gov.np   for government offices
.org.np   for organisations
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nepal&apos;s registry runs its master list one level deeper — registration happens at &lt;code&gt;myshop.com.np&lt;/code&gt;, not &lt;code&gt;myshop.np&lt;/code&gt;. India offers both styles: plain &lt;code&gt;.in&lt;/code&gt; and categorised &lt;code&gt;.co.in&lt;/code&gt;. The UK did categories for decades (&lt;code&gt;.co.uk&lt;/code&gt;) and later opened plain &lt;code&gt;.uk&lt;/code&gt; too. Same machinery, per-country choices — the chain from this lesson with one extra link:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root → .np computer → .com.np level → myshop&apos;s computer
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3&gt;Who maintains .com.np, and why was mine free?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Who:&lt;/strong&gt; the &lt;code&gt;.np&lt;/code&gt; registry is administered by &lt;strong&gt;Mercantile Communication Pvt Ltd&lt;/strong&gt; — a private Kathmandu company that has held the delegation since &lt;code&gt;.np&lt;/code&gt; was created in 1995. In the chain:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root  →  .np computers (Mercantile&apos;s)  →  bishwas54.com.np&apos;s line
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mercantile plays the &lt;strong&gt;registry&lt;/strong&gt; role — the same role Verisign plays for &lt;code&gt;.com&lt;/code&gt;. And &lt;code&gt;register.com.np&lt;/code&gt; is not a separate registrar like GoDaddy — it is Mercantile&apos;s own front door. Nepal skips the registrar layer entirely: &lt;strong&gt;registration happens directly with the registry.&lt;/strong&gt; No middlemen, no retail markup, one organisation doing both jobs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why free:&lt;/strong&gt; a policy choice by the registry — and Nepal is genuinely unusual: almost no other country TLD is completely free with free renewal indefinitely. Mercantile runs registration as a public service to get Nepali people and businesses online, covering the cost from its other business (it is an internet provider).&lt;/p&gt;
&lt;p&gt;Every registry sets its own rules for writing lines into its list. Verisign&apos;s rule: &lt;em&gt;anyone, ~$10 wholesale.&lt;/em&gt; Mercantile&apos;s rule: &lt;em&gt;free — but prove you belong here.&lt;/em&gt; That second clause is why free is sustainable. For &lt;code&gt;.com&lt;/code&gt;, money itself is the anti-abuse filter — no human review needed. Remove the money and a different filter is needed, which is exactly the .np experience: proof of Nepali citizenship for personal domains, or company registration papers for organisations — reviewed by an actual human, which is why approval takes days, not seconds. The citizenship document does the job the $12 would have done at GoDaddy.&lt;/p&gt;
&lt;p&gt;Two consequences of Nepal&apos;s model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.np&lt;/code&gt; names are registered first-come-first-served, &lt;strong&gt;for lifetime — there is no expiration date.&lt;/strong&gt; The entire expiry lifecycle above (grace periods, redemption ransoms, auction vultures) does not apply. A &lt;code&gt;.com.np&lt;/code&gt; name has no renewal date to miss.&lt;/li&gt;
&lt;li&gt;The eligibility check quietly &lt;em&gt;protects&lt;/em&gt; the space: a squatter in another country cannot hoard thousands of Nepali names for resale, because each registration needs Nepali documents. The doorman is the anti-squatting mechanism.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;.gov and .edu&lt;/h3&gt;
&lt;p&gt;These two feel like categories, but they are actually &lt;strong&gt;history&lt;/strong&gt;. They are among the very first TLDs ever created — 1985, before the internet was global, when it was essentially an American research network. And they carry a surprise:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.gov&lt;/code&gt; is US-government-only.&lt;/strong&gt; Not governments of the world — the United States government specifically. The registry is operated by a US federal agency, and eligibility is strict: only US federal, state, or local government bodies. Other countries&apos; governments live under their country codes — India&apos;s uses &lt;code&gt;.gov.in&lt;/code&gt;, Nepal&apos;s uses &lt;code&gt;.gov.np&lt;/code&gt;. The bare &lt;code&gt;.gov&lt;/code&gt; was never internationalised; it predates the idea that it would need to be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.edu&lt;/code&gt; is US-accredited-institutions-only.&lt;/strong&gt; Same story: the registry is a US nonprofit, and eligibility requires formal US higher-education accreditation. Oxford — one of the oldest universities on Earth — cannot have &lt;code&gt;oxford.edu&lt;/code&gt;; it is &lt;code&gt;ox.ac.uk&lt;/code&gt;, under the UK&apos;s academic category. Every country&apos;s universities live under their own code; the bare &lt;code&gt;.edu&lt;/code&gt; is American by historical accident.&lt;/p&gt;
&lt;p&gt;The pattern for restricted endings is nothing exotic: every registry sets rules for its own list, and the only difference is how hard the check is.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ending&lt;/th&gt;
&lt;th&gt;Registry&apos;s rule for writing your line&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;anyone, ~$12/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.in&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;anyone, under India&apos;s registry&apos;s terms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.com.np&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nepali citizens and companies, free, documents required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.gov&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;US government bodies only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.edu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;accredited US universities only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.google&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Google only — a brand TLD where the registry&apos;s rule is &amp;quot;just us&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Same files, same lines, same chain. Only the doorman changes.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;New terms from this section&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TLD (top-level domain)&lt;/strong&gt; — the official word for an ending: &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.np&lt;/code&gt;, &lt;code&gt;.pizza&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ICANN&lt;/strong&gt; — the non-profit overseeing which TLDs exist; IANA operates as part of it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;registry&lt;/strong&gt; — the one organisation running a TLD&apos;s master list (Verisign for &lt;code&gt;.com&lt;/code&gt;, Mercantile for &lt;code&gt;.np&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;registrar&lt;/strong&gt; — a retailer with a contract to write lines into registries&apos; lists (GoDaddy, Namecheap)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;root zone file&lt;/strong&gt; — the actual text file at the top of the naming world, one entry per TLD, publicly downloadable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;renting, not owning&lt;/strong&gt; — names are yearly leases; the &amp;quot;owner&amp;quot; is whoever keeps paying&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;grace period / redemption / pending delete&lt;/strong&gt; — the three stages between missing a renewal and the name becoming public again&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ccTLD (country-code TLD)&lt;/strong&gt; — a two-letter country ending like &lt;code&gt;.in&lt;/code&gt; or &lt;code&gt;.np&lt;/code&gt;, delegated to a registry in that country&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EPP&lt;/strong&gt; — the wire format registrars and registries use to talk; never touched directly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sources for this section&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ICANN&apos;s role, TLD application rounds&lt;/td&gt;
&lt;td&gt;ICANN New gTLD Program, 2026 round&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://newgtldprogram.icann.org/en/application-rounds/round2&quot;&gt;https://newgtldprogram.icann.org/en/application-rounds/round2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$227,000 evaluation fee, cost-neutral principle&lt;/td&gt;
&lt;td&gt;ICANN fee FAQ&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://newgtldprogram.icann.org/en/application-rounds/round2/2026-round-general/gtld-evaluation-fee/faqs&quot;&gt;https://newgtldprogram.icann.org/en/application-rounds/round2/2026-round-general/gtld-evaluation-fee/faqs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026 window dates (30 Apr – 12 Aug 2026)&lt;/td&gt;
&lt;td&gt;ICANN 2026 Round page&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://newgtldprogram.icann.org/en/application-rounds/round2&quot;&gt;https://newgtldprogram.icann.org/en/application-rounds/round2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2012 round created 1,200+ TLDs&lt;/td&gt;
&lt;td&gt;CentralNic Registry overview&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://centralnicregistry.com/icann-new-gtld-program/&quot;&gt;https://centralnicregistry.com/icann-new-gtld-program/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The root zone file itself&lt;/td&gt;
&lt;td&gt;InterNIC (IANA)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.internic.net/domain/root.zone&quot;&gt;https://www.internic.net/domain/root.zone&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browsable list of all TLDs and their registries&lt;/td&gt;
&lt;td&gt;IANA Root Zone Database&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.iana.org/domains/root/db&quot;&gt;https://www.iana.org/domains/root/db&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verisign runs .com; registrar/registry model&lt;/td&gt;
&lt;td&gt;Verisign&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.verisign.com/en_US/domain-names/com-domain-names/index.xhtml&quot;&gt;https://www.verisign.com/en_US/domain-names/com-domain-names/index.xhtml&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ICANN fee per .com name per year&lt;/td&gt;
&lt;td&gt;ICANN registry agreements&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.icann.org/resources/pages/registries/registries-agreements-en&quot;&gt;https://www.icann.org/resources/pages/registries/registries-agreements-en&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expired domain lifecycle (grace, redemption, pending delete)&lt;/td&gt;
&lt;td&gt;ICANN — EPP status codes &amp;amp; expired domains&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en&quot;&gt;https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Registrar expiry/renewal obligations&lt;/td&gt;
&lt;td&gt;ICANN Expired Registration Recovery Policy&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.icann.org/resources/pages/errp-2013-02-28-en&quot;&gt;https://www.icann.org/resources/pages/errp-2013-02-28-en&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.np run by Mercantile, free, citizenship documents, lifetime&lt;/td&gt;
&lt;td&gt;Wikipedia — .np (cites registry policy)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/.np&quot;&gt;https://en.wikipedia.org/wiki/.np&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.np official registration portal&lt;/td&gt;
&lt;td&gt;register.com.np&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://register.com.np/&quot;&gt;https://register.com.np/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Country codes come from the ISO 3166 standard list&lt;/td&gt;
&lt;td&gt;ISO 3166&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.iso.org/iso-3166-country-codes.html&quot;&gt;https://www.iso.org/iso-3166-country-codes.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.gov eligibility (US government only)&lt;/td&gt;
&lt;td&gt;US government — get.gov&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://get.gov/domains/eligibility/&quot;&gt;https://get.gov/domains/eligibility/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.edu eligibility (accredited US institutions)&lt;/td&gt;
&lt;td&gt;EDUCAUSE .edu policy&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://net.educause.edu/eligibility.htm&quot;&gt;https://net.educause.edu/eligibility.htm&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The runner is not the source of truth.&lt;/strong&gt; The answer lives on the name owner&apos;s computer, at the end of the chain. Runners fetch and remember; they never decide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every website visit is two conversations, not one.&lt;/strong&gt; The DNS question happens first, invisibly, before the page is ever requested. When &amp;quot;the internet is down,&amp;quot; sometimes only conversation 1 is broken — names stop resolving while direct numbers still work. Recognising which conversation failed is a real debugging skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caching means changes are not instant.&lt;/strong&gt; Updating where a name points does not update the world. Every cache holding the old answer keeps serving it until its TTL runs out. &amp;quot;I changed it, why does everyone still see the old one&amp;quot; — TTL, almost every time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two people can get different answers and both be right.&lt;/strong&gt; Different caches, different expiry moments. Not a bug — a direct consequence of the design.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The chain is for fresh questions only.&lt;/strong&gt; Most real questions never reach the root — they&apos;re answered from a cache somewhere. The full walk happens only when nobody in the path remembers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Typing a website name&lt;/td&gt;
&lt;td&gt;The name just works, somehow&lt;/td&gt;
&lt;td&gt;A hidden first conversation converts it to a number before anything else happens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS&lt;/td&gt;
&lt;td&gt;A vague &amp;quot;phonebook of the internet&amp;quot;&lt;/td&gt;
&lt;td&gt;A chain of delegation: root → &lt;code&gt;.com&lt;/code&gt; → the owner&apos;s computer, walked by runners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.8.8.8&lt;/td&gt;
&lt;td&gt;A magic number that knows everything&lt;/td&gt;
&lt;td&gt;An ordinary IP with a memorable pattern, holding nothing, fetching everything&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who controls a name&apos;s answer&lt;/td&gt;
&lt;td&gt;Some central internet authority&lt;/td&gt;
&lt;td&gt;The name&apos;s owner, on their own computer, editable at will&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS changes&lt;/td&gt;
&lt;td&gt;Instant&lt;/td&gt;
&lt;td&gt;Spread at the speed of expiring caches, controlled by the TTL the owner set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Works for me, not for him&amp;quot;&lt;/td&gt;
&lt;td&gt;Confusing, someone must be wrong&lt;/td&gt;
&lt;td&gt;Both right — different caches, different expiry times&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS&lt;/strong&gt; — the system that turns names into numbers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;runner (resolver)&lt;/strong&gt; — a computer that fetches DNS answers by walking the chain on your behalf; the official word is &lt;em&gt;resolver&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;root&lt;/strong&gt; — the small set of computers at the top of the naming world, addresses built into every runner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;referral&lt;/strong&gt; — an answer that says &amp;quot;I don&apos;t know, but ask them&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the owner&apos;s computer (authoritative server)&lt;/strong&gt; — the computer where a name&apos;s real answer lives, run by whoever owns the name; the official word is &lt;em&gt;authoritative&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;port 53&lt;/strong&gt; — where DNS answering programs listen, everywhere&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;caching&lt;/strong&gt; — remembering an answer to avoid asking again&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cache&lt;/strong&gt; — the remembered copy itself&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TTL (time to live)&lt;/strong&gt; — how long an answer may be remembered, set by the name&apos;s owner&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stale&lt;/strong&gt; — a cached answer that no longer matches the current truth&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DHCP&lt;/strong&gt; — the router &amp;quot;handing things over&amp;quot; on day one has a name and a mechanism; next lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The command to force a laptop to forget a cached answer&lt;/strong&gt; — troubleshooting tools lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Record types&lt;/strong&gt; — DNS can answer more question-shapes than &amp;quot;what number is this name&amp;quot;; introduced when first needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS inside Kubernetes and AWS&lt;/strong&gt; — private runners we control; Parts 2 and 4&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the DNS message looks like on the wire, and why it behaves differently from a page request&lt;/strong&gt; — needs TCP vs UDP first, lesson 10&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DNS concepts, original specification&lt;/td&gt;
&lt;td&gt;RFC 1034&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1034.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc1034.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS implementation details, TTL&lt;/td&gt;
&lt;td&gt;RFC 1035&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1035.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc1035.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The root servers, run by twelve organisations&lt;/td&gt;
&lt;td&gt;IANA root servers page&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.iana.org/domains/root/servers&quot;&gt;https://www.iana.org/domains/root/servers&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&apos;s public runner&lt;/td&gt;
&lt;td&gt;Google Public DNS documentation&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://developers.google.com/speed/public-dns/docs/intro&quot;&gt;https://developers.google.com/speed/public-dns/docs/intro&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&apos;s public runner&lt;/td&gt;
&lt;td&gt;Cloudflare 1.1.1.1 documentation&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/&quot;&gt;https://developers.cloudflare.com/1.1.1.1/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readable overview of the full resolution chain&lt;/td&gt;
&lt;td&gt;Cloudflare Learning — What is DNS?&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cloudflare.com/learning/dns/what-is-dns/&quot;&gt;https://www.cloudflare.com/learning/dns/what-is-dns/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; RFC 1034 and 1035 are the original 1987 specifications and remain the authoritative base, extended by many later RFCs. The Cloudflare learning page is a readable secondary source that matches the chain as taught here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 04. Next: DHCP — the router &amp;quot;handing things over&amp;quot; finally gets its real name.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 06 — MAC Addresses and ARP</title><link>https://bishwas54.com.np/tutorials/devops-networking/mac-addresses-and-arp/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/mac-addresses-and-arp/</guid><description>Why every device carries a second, factory-burned address, how the Layer 2 envelope and ARP handle the final metres of delivery, and why the MAC envelope is rewritten at every hop while the IP envelope crosses the world untouched.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 3 — MAC addresses (Layer 2), ARP, the complete journey end to end
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 03 (the envelope stack, the missing Layer 2), Lesson 05 (the DHCP shout)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#two-puzzles-hiding-in-plain-sight&quot;&gt;Two puzzles hiding in plain sight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-answer-every-device-has-a-second-address&quot;&gt;The answer: every device has a second address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ip-vs-mac--the-difference-is-the-point&quot;&gt;IP vs MAC — the difference is the point&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-envelope-we-never-drew--layer-2&quot;&gt;The envelope we never drew — Layer 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#how-the-shout-worked--the-broadcast-address&quot;&gt;How the shout worked — the broadcast address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#arp--learning-someones-mac&quot;&gt;ARP — learning someone&apos;s MAC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-full-journey-corrected&quot;&gt;The full journey, corrected&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-complete-story-from-factory-to-pixels&quot;&gt;The complete story: from factory to pixels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Two puzzles hiding in plain sight&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Puzzle 1.&lt;/strong&gt; The DHCP shout worked &lt;em&gt;before the laptop had any IP number&lt;/em&gt;. So whatever carried that shout through the house — it wasn&apos;t IP. Something underneath IP was doing the delivering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Puzzle 2.&lt;/strong&gt; The laptop sends the envelope for &lt;code&gt;140.82.121.4&lt;/code&gt; — GitHub, far away. But the &lt;em&gt;first hop&lt;/em&gt; of that journey is just: get the envelope from the laptop to the router, three metres away, through the air. The junctions-read-the-address story explains the world journey. It doesn&apos;t explain the three metres. WiFi is radio — when the laptop transmits, the waves hit &lt;strong&gt;every device in the house&lt;/strong&gt;. The TV receives them. The phone receives them. Yet only the router acts. How does each device know &amp;quot;this is for me&amp;quot; or &amp;quot;ignore this&amp;quot;?&lt;/p&gt;
&lt;p&gt;The IP address can&apos;t be the answer — the TV isn&apos;t reading IP envelopes addressed to other machines, and during the DHCP shout there were no IP numbers at all.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The answer: every device has a second address&lt;/h2&gt;
&lt;p&gt;Every piece of network hardware — the WiFi chip in a laptop, in a phone, in a TV, each socket on a router — left its factory with a permanent address burned in. It is called the &lt;strong&gt;MAC address&lt;/strong&gt;, and it looks nothing like an IP:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a4:83:e7:2f:1b:9c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Six pairs, letters and digits (hexadecimal, like IPv6 from Lesson 01). Every network chip ever manufactured has a different one — the first three pairs identify the manufacturer, the rest are its serial numbering. A laptop&apos;s WiFi chip has exactly one, and keeps it for life, on every network it ever joins.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;IP vs MAC — the difference is the point&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;IP address&lt;/th&gt;
&lt;th&gt;MAC address&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Comes from&lt;/td&gt;
&lt;td&gt;Assigned by the network (DHCP lease)&lt;/td&gt;
&lt;td&gt;Burned in at the factory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Changes?&lt;/td&gt;
&lt;td&gt;Different on every network you join&lt;/td&gt;
&lt;td&gt;Never — same at home, at a café, forever&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meaningful&lt;/td&gt;
&lt;td&gt;Across the whole world&lt;/td&gt;
&lt;td&gt;Only inside the local network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Answers&lt;/td&gt;
&lt;td&gt;&lt;em&gt;where&lt;/em&gt; to deliver, globally&lt;/td&gt;
&lt;td&gt;&lt;em&gt;which physical chip&lt;/em&gt;, locally&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The IP is your address in the world. The MAC is the serial number of your chip. Delivery across the world runs on IP; the final metres run on MAC.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The envelope we never drew — Layer 2&lt;/h2&gt;
&lt;p&gt;This pays the debt from the layers lesson. The envelope stack had the IP address on the outermost envelope. In truth, there is one more envelope &lt;strong&gt;outside even that one&lt;/strong&gt; — and it carries MAC addresses:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;OUTERMOST envelope:  to MAC a4:83:...    ← Layer 2 ← the missing layer
  outer envelope:    to 140.82.121.4     ← Layer 3
    inner envelope:  port 443            ← Layer 4
      the text:      please send me...   ← Layer 7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Layer 2 is the MAC envelope.&lt;/strong&gt; Its official name is the &lt;em&gt;Data Link&lt;/em&gt; layer. Every message travelling through the house is wrapped in one, addressed to a specific chip.&lt;/p&gt;
&lt;p&gt;The every-device-hears-everything problem now solves cleanly: all the radio waves hit the TV, yes — but the TV&apos;s chip reads the MAC on the outermost envelope, sees it is not its own, and &lt;strong&gt;discards the message without opening anything&lt;/strong&gt;. Chips do this filtering in hardware, ignoring almost everything they hear. Only the chip whose MAC matches opens the Layer 2 envelope and passes the contents upward.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;How the shout worked — the broadcast address&lt;/h2&gt;
&lt;p&gt;There is one special MAC address meaning &amp;quot;every chip&amp;quot;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ff:ff:ff:ff:ff:ff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An envelope addressed to that is opened by &lt;strong&gt;everyone&lt;/strong&gt; — that is what a broadcast literally is. The DHCP shout worked without any IP numbers because it never used IP delivery at all; it rode a Layer 2 envelope addressed to all chips.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;ARP — learning someone&apos;s MAC&lt;/h2&gt;
&lt;p&gt;One gap remains. The laptop wants to send the GitHub envelope to the router. DHCP said the way out is &lt;code&gt;192.168.1.1&lt;/code&gt; — an IP. But the Layer 2 envelope needs the router&apos;s &lt;strong&gt;MAC&lt;/strong&gt;, and nobody ever told the laptop that.&lt;/p&gt;
&lt;p&gt;The solution is charmingly simple — another shout. The protocol is called &lt;strong&gt;ARP&lt;/strong&gt; (Address Resolution Protocol — a protocol, from Lesson 05, is just an agreed script):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laptop, to all chips:&lt;/strong&gt; &lt;em&gt;&amp;quot;Who has 192.168.1.1? Tell me your MAC.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every device hears it. The TV: not me, ignore. The phone: not me, ignore. The router: &lt;em&gt;&amp;quot;Me — I&apos;m a4:83:e7:2f:1b:9c.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Done. The laptop notes the answer in a little table it keeps — its &lt;strong&gt;ARP cache&lt;/strong&gt; (caching, exactly as in DNS: remember answers, don&apos;t re-ask) — and can now wrap Layer 2 envelopes for the router all day. The entries expire after a while and get re-asked.&lt;/p&gt;
&lt;p&gt;TTL thinking, third appearance: DNS answers, DHCP leases, ARP entries. Nothing stale survives.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The full journey, corrected&lt;/h2&gt;
&lt;p&gt;The complete, honest picture of sending to GitHub — watch what happens to each envelope:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;laptop builds:   [MAC: router&apos;s chip [IP: 140.82.121.4 [port 443 [text]]]]
                        ↓
router receives it (MAC matches — opens Layer 2 envelope)
reads the IP envelope: 140.82.121.4 — not for me, pass it on
wraps it in a FRESH Layer 2 envelope, addressed to the next junction&apos;s chip
                        ↓
next junction: same again — open MAC envelope, read IP, new MAC envelope
                        ↓
        ...every hop, all the way to GitHub...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The insight worth keeping:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The IP envelope survives the whole journey untouched. The MAC envelope is torn off and rewritten at every single hop.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The IP answers &amp;quot;where is this ultimately going&amp;quot; — constant from laptop to GitHub. The MAC answers &amp;quot;which chip gets it &lt;em&gt;next&lt;/em&gt;&amp;quot; — different at every step. The laptop never learned GitHub&apos;s MAC, and never could: MAC addresses mean nothing beyond the local network. It only ever needed the MAC of its &lt;em&gt;next hop&lt;/em&gt; — the router. Each hop only ever needs the next chip.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The complete story: from factory to pixels&lt;/h2&gt;
&lt;p&gt;Everything from six lessons, stitched into one story: a laptop is manufactured, bought, and used to load &lt;code&gt;github.com&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Act 0 — In the factory, months before you exist as a customer&lt;/h3&gt;
&lt;p&gt;A chip company manufactures a WiFi chip. Before it ships, it burns an address into it: &lt;code&gt;a4:83:e7:2f:1b:9c&lt;/code&gt;. The first three pairs are the company&apos;s own manufacturer code; the last three are its serial numbering. No other chip on Earth gets this string.&lt;/p&gt;
&lt;p&gt;A laptop company buys that chip, solders it into a laptop, boxes it. The laptop sits in a warehouse, then a shop. It has a MAC. It has &lt;strong&gt;no IP&lt;/strong&gt; — an IP is not a property of a laptop; it is a property of &lt;em&gt;joining a network&lt;/em&gt;. This laptop has joined nothing.&lt;/p&gt;
&lt;h3&gt;Act 1 — You buy it and open the lid at home&lt;/h3&gt;
&lt;p&gt;You type in the WiFi password. The laptop connects to the router&apos;s radio — but connecting is just Layer 1, waves established between chips. The laptop still has no number, no idea who to ask for DNS, no idea where the way out is. It can do nothing yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DHCP now runs, and it must start with a shout&lt;/strong&gt; — because with no IP, normal addressing is impossible:&lt;/p&gt;
&lt;p&gt;The laptop wraps a Layer 2 envelope addressed to &lt;code&gt;ff:ff:ff:ff:ff:ff&lt;/code&gt; — every chip. Inside: &lt;em&gt;&amp;quot;anyone, I need a number.&amp;quot;&lt;/em&gt; The TV&apos;s chip opens it (broadcast — everyone opens it), sees a DHCP plea, has no DHCP program, ignores it. The phone likewise. The router&apos;s chip opens it, and the router &lt;em&gt;does&lt;/em&gt; run a DHCP program:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router:  I offer 192.168.1.47
Laptop:  I&apos;ll take it
Router:  Confirmed. Bundle attached:
           your number:  192.168.1.47
           DNS runner:   8.8.8.8
           way out:      192.168.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Shout, offer, take, confirm. The laptop is now a citizen of the network. Elapsed time: under a second from password to citizenship.&lt;/p&gt;
&lt;h3&gt;Act 2 — You type github.com and press Enter&lt;/h3&gt;
&lt;p&gt;Chrome looks at &lt;code&gt;github.com&lt;/code&gt;. It&apos;s a name; junctions need numbers. &lt;strong&gt;Two conversations coming&lt;/strong&gt; — DNS first.&lt;/p&gt;
&lt;p&gt;Chrome asks the DNS question to &lt;code&gt;8.8.8.8&lt;/code&gt;, port 53 (the well-known DNS port). But watch the &lt;em&gt;first metres&lt;/em&gt; of that question. It must physically reach the router before anything else can happen, and a Layer 2 envelope needs the router&apos;s MAC. The bundle only said &lt;code&gt;192.168.1.1&lt;/code&gt; — an IP. So, once only:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ARP shout:&lt;/strong&gt; &lt;em&gt;&amp;quot;Who has 192.168.1.1?&amp;quot;&lt;/em&gt; — TV ignores, phone ignores, router answers: &lt;em&gt;&amp;quot;me, a4:83:e7:2f:1b:9c.&amp;quot;&lt;/em&gt; Into the ARP cache it goes. Every future message to the router skips this step.&lt;/p&gt;
&lt;p&gt;Now the DNS question travels, fully wrapped:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[MAC: router  [IP: 8.8.8.8  [port 53  [&amp;quot;what number is github.com?&amp;quot;]]]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The router opens the MAC envelope (its chip matched), reads the IP — &lt;code&gt;8.8.8.8&lt;/code&gt;, not me — tears off the old Layer 2 envelope, wraps a fresh one addressed to the next junction&apos;s chip, and passes it on. Every junction between the house and Google&apos;s runner does the same: &lt;strong&gt;IP envelope untouched, MAC envelope rewritten&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;At &lt;code&gt;8.8.8.8&lt;/code&gt;, the runner (which holds nothing, fetches everything) walks the chain — root: &lt;em&gt;&amp;quot;ask .com&amp;quot;&lt;/em&gt; → the &lt;code&gt;.com&lt;/code&gt; computer, run by the registry Verisign, checks its 160-million-line master list: &lt;em&gt;&amp;quot;ask GitHub&apos;s own computer&amp;quot;&lt;/em&gt; → GitHub&apos;s authoritative computer: &lt;em&gt;&amp;quot;github.com is 140.82.121.4, remember it for 60 seconds.&amp;quot;&lt;/em&gt; Answer plus TTL travels all the way back into Chrome&apos;s hands. (Next visit within the TTL: no chain, no walk — cache.)&lt;/p&gt;
&lt;h3&gt;Act 3 — The real request&lt;/h3&gt;
&lt;p&gt;Conversation two. Chrome builds the envelope stack it wanted to build all along:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[MAC: router  [IP: 140.82.121.4  [port 443  [&amp;quot;please send me the homepage&amp;quot;]]]]
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Port 443&lt;/strong&gt; because you typed &lt;code&gt;https&lt;/code&gt; — that prefix &lt;em&gt;is&lt;/em&gt; the port choice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Router&apos;s MAC&lt;/strong&gt; from the ARP cache — no shout needed this time.&lt;/li&gt;
&lt;li&gt;Source details ride along too: source IP &lt;code&gt;192.168.1.47&lt;/code&gt;, and a temporary source port the operating system just invented — say &lt;code&gt;51862&lt;/code&gt; — the return address for this specific conversation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Off it goes. Router: open MAC envelope, read IP, fresh MAC envelope, forward. Junction after junction, wire after wire, possibly under an ocean — MAC envelopes born and torn at every hop, the IP envelope crossing the world unmodified.&lt;/p&gt;
&lt;h3&gt;Act 4 — Inside GitHub&apos;s building&lt;/h3&gt;
&lt;p&gt;The envelope arrives at the computer holding &lt;code&gt;140.82.121.4&lt;/code&gt; — a computer like any laptop, minus the screen, because nobody sits in front of it. The layers unwrap &lt;strong&gt;in order, one reader each&lt;/strong&gt;, exactly as the layers lesson promised:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chip: MAC matches → open Layer 2, pass up&lt;/li&gt;
&lt;li&gt;Computer: IP matches, journey over → open Layer 3, read the port&lt;/li&gt;
&lt;li&gt;Port list: &lt;code&gt;443 → held by GitHub&apos;s web program&lt;/code&gt; — a waiter, which claimed 443 long ago and has been listening since → hand over Layer 4&apos;s contents&lt;/li&gt;
&lt;li&gt;The program — the only thing that ever reads the text: &lt;em&gt;&amp;quot;please send me the homepage&amp;quot;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It composes the answer and addresses the reply envelope using the request&apos;s source details — the return address the message carried, destination port &lt;code&gt;51862&lt;/code&gt;, the temporary one. That number is how, when the reply reaches the laptop, it lands in &lt;em&gt;Chrome&apos;s&lt;/em&gt; hands and not some other program&apos;s — and in the right tab&apos;s conversation at that.&lt;/p&gt;
&lt;h3&gt;Act 5 — The pixels&lt;/h3&gt;
&lt;p&gt;The reply crosses the world the same way — its own IP envelope constant, MAC envelopes rewritten hop by hop — arrives at the laptop&apos;s chip, unwraps layer by layer, reaches Chrome via port &lt;code&gt;51862&lt;/code&gt;. Chrome reads the page content and paints it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Total elapsed: a few hundred milliseconds.&lt;/strong&gt; Two conversations, one ARP shout, two chain walks&apos; worth of caching for next time, and several dozen MAC envelopes born and destroyed.&lt;/p&gt;
&lt;h3&gt;The two honest gaps in the story&lt;/h3&gt;
&lt;p&gt;Both already on the lesson list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The reply&apos;s journey &lt;em&gt;back into the house&lt;/em&gt; skips a step — the house shares one public number (Lesson 01&apos;s home-router trick). That mechanism is &lt;strong&gt;NAT&lt;/strong&gt;, lesson 09.&lt;/li&gt;
&lt;li&gt;&amp;quot;The junctions somehow know which way to pass it&amp;quot; is doing heavy lifting. That is &lt;strong&gt;routing&lt;/strong&gt;, lesson 07 — next.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;MAC does not replace IP, and IP does not replace MAC.&lt;/strong&gt; They answer different questions at different scales. Both are on every message, always.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The MAC envelope never crosses the world.&lt;/strong&gt; It is local-only, rewritten at every hop. A laptop never learns, and could never use, the MAC of a faraway computer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Broadcasts are Layer 2 events.&lt;/strong&gt; The DHCP shout and the ARP shout work with zero IP numbers involved — they are addressed to all chips, not to all IPs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware filtering is why shared airwaves work.&lt;/strong&gt; Every device physically receives everything; the chip discards non-matching MAC envelopes before the computer ever sees them. (One consequence for later: a chip &lt;em&gt;can&lt;/em&gt; be told not to discard — that is how network monitoring tools see everyone&apos;s traffic. Parked until the tools lesson.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The ARP cache is another cache.&lt;/strong&gt; Same failure smell as DNS staleness: if a device&apos;s chip is replaced (new MAC, same IP), peers with the old cached entry keep addressing envelopes to a chip that no longer exists — until their entries expire.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Addresses&lt;/td&gt;
&lt;td&gt;A computer has an IP address&lt;/td&gt;
&lt;td&gt;A computer has two addresses: a world one (IP, leased) and a chip one (MAC, factory-permanent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WiFi privacy of delivery&lt;/td&gt;
&lt;td&gt;Messages go to the right device&lt;/td&gt;
&lt;td&gt;Radio hits every device; chips filter by MAC in hardware and discard the rest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The envelope stack&lt;/td&gt;
&lt;td&gt;IP is the outermost envelope&lt;/td&gt;
&lt;td&gt;One more outside it — the Layer 2 MAC envelope, rewritten at every hop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layer 2&lt;/td&gt;
&lt;td&gt;The mysterious missing layer&lt;/td&gt;
&lt;td&gt;The chip-to-chip delivery layer: MAC addresses, broadcasts, ARP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reaching the router&lt;/td&gt;
&lt;td&gt;Just happens&lt;/td&gt;
&lt;td&gt;Requires its MAC — learned once by an ARP shout, cached, expiring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A message&apos;s journey&lt;/td&gt;
&lt;td&gt;One address carries it end to end&lt;/td&gt;
&lt;td&gt;Two-tier: IP constant across the world, MAC born and torn at every single hop&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MAC address&lt;/strong&gt; — the permanent, factory-burned address of a network chip; six hex pairs; local-only meaning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 2 / Data Link&lt;/strong&gt; — the chip-to-chip delivery layer; the outermost envelope&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;broadcast address (&lt;code&gt;ff:ff:ff:ff:ff:ff&lt;/code&gt;)&lt;/strong&gt; — the MAC meaning &amp;quot;every chip opens this&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARP (Address Resolution Protocol)&lt;/strong&gt; — the shout that turns a local IP into a MAC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARP cache&lt;/strong&gt; — the remembered IP→MAC table, entries expiring like DNS answers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;next hop&lt;/strong&gt; — the only chip a sender ever needs the MAC of; the journey is a chain of next hops&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;/strong&gt; — how each junction decides which way to pass the IP envelope; next lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NAT&lt;/strong&gt; — how replies find their way back into a house that shares one public number; lesson 09&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chips told not to discard&lt;/strong&gt; — network monitoring; troubleshooting tools lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switches&lt;/strong&gt; — the boxes that make wired Layer 2 delivery efficient in offices; introduced if and when needed (home WiFi doesn&apos;t require them to understand anything so far)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ARP specification&lt;/td&gt;
&lt;td&gt;RFC 826&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc826.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc826.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MAC address structure, manufacturer prefixes&lt;/td&gt;
&lt;td&gt;IEEE — MAC address assignments&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://standards.ieee.org/products-programs/regauth/&quot;&gt;https://standards.ieee.org/products-programs/regauth/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Look up any MAC prefix&apos;s manufacturer&lt;/td&gt;
&lt;td&gt;IEEE OUI public listing&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://standards-oui.ieee.org/&quot;&gt;https://standards-oui.ieee.org/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readable overview of MAC vs IP&lt;/td&gt;
&lt;td&gt;Cloudflare Learning — What is a MAC address?&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cloudflare.com/learning/network-layer/what-is-a-mac-address/&quot;&gt;https://www.cloudflare.com/learning/network-layer/what-is-a-mac-address/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; RFC 826 is from 1982 and still governs — ARP is one of the oldest living pieces of the internet. The IEEE (a standards body like the IETF, but for hardware) hands out the manufacturer prefixes; their public list lets you identify the maker of any chip from the first three pairs of its MAC.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 06. Next: routing — how every junction on Earth knows which way to pass the envelope.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 03 — Network Models and Layers</title><link>https://bishwas54.com.np/tutorials/devops-networking/network-models-and-layers/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/network-models-and-layers/</guid><description>What a network layer actually is, where the official numbers and names come from, and how encapsulation nests the message like envelopes inside envelopes.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 3 — what a layer is, the layer numbers and names, encapsulation
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 01 (IP addresses), Lesson 02 (ports)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#the-message&quot;&gt;The message&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sending-a-message-is-separate-jobs&quot;&gt;Sending a message is separate jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-a-layer-is&quot;&gt;What a layer is&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-official-numbers-and-names&quot;&gt;The official numbers and names&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-missing-numbers&quot;&gt;The missing numbers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-the-numbers-matter-in-real-work&quot;&gt;Why the numbers matter in real work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#encapsulation--envelopes-inside-envelopes&quot;&gt;Encapsulation — envelopes inside envelopes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#why-layer-independence-is-automatic&quot;&gt;Why layer independence is automatic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;The message&lt;/h2&gt;
&lt;p&gt;The running example: open Chrome on a laptop, type &lt;code&gt;github.com&lt;/code&gt;, and the page appears.&lt;/p&gt;
&lt;p&gt;For that page to appear, the laptop has to ask GitHub&apos;s computer for it. GitHub&apos;s computer is just a computer — like a laptop, but sitting in a big building full of computers, with no screen and no keyboard, because nobody sits in front of it.&lt;/p&gt;
&lt;p&gt;The laptop cannot shout across the world. The only thing it can do is push a message out through the WiFi and have it travel, hop by hop, junction by junction, to that building.&lt;/p&gt;
&lt;p&gt;Written out plainly, the message the laptop sends is roughly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;To computer: 140.82.121.4
To program: the one on port 443
Text: please send me the github.com homepage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three lines. An address, a port, and what it wants. If you could freeze the message mid-flight and read it, that is what it says.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Sending a message is separate jobs&lt;/h2&gt;
&lt;p&gt;Getting that message to GitHub&apos;s building is not one job. Two very different jobs, to start with:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Job A — carry it.&lt;/strong&gt; The message physically has to move: out of the laptop, through the air to the router, through wires under the street, maybe through a cable under the ocean, into that building. Something has to do the &lt;em&gt;moving&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Job B — navigate it.&lt;/strong&gt; At every junction along the path, something has to decide &lt;em&gt;which way&lt;/em&gt; the message goes next. The address &lt;code&gt;140.82.121.4&lt;/code&gt; is what gets read to make each decision.&lt;/p&gt;
&lt;p&gt;A delivery truck moves a package (carrying); the GPS decides which turn to take (navigating). The truck doesn&apos;t know where it&apos;s going. The GPS doesn&apos;t move anything. Both are needed; neither can do the other&apos;s job.&lt;/p&gt;
&lt;p&gt;Same with the message. The wires and WiFi carry it. The address navigates it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;What a layer is&lt;/h2&gt;
&lt;p&gt;Look at the message again, and ask: who reads each line?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Line 1 — the address.&lt;/strong&gt; Read by &lt;strong&gt;every junction&lt;/strong&gt; along the way. Each junction reads it, picks a direction, passes the message on. No junction ever reads line 2 or line 3. Not their job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Line 2 — the port.&lt;/strong&gt; Read by exactly one thing: &lt;strong&gt;the destination computer, after the message arrives.&lt;/strong&gt; The journey is over, the message is inside the right building. Now the computer looks at the port and hands the message to the program holding it. (This is the port lesson — but notice &lt;em&gt;when&lt;/em&gt; it happens: only at the very end, only at the destination.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Line 3 — the text.&lt;/strong&gt; Read only by &lt;strong&gt;the program&lt;/strong&gt;. Not the computer, not the junctions, nobody along the way. The program holding port 443 receives it, reads &amp;quot;please send me the homepage,&amp;quot; and acts on it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;To computer: 140.82.121.4      ← read by every junction along the way
To program: port 443           ← read by the destination computer, at arrival
Text: please send me the page  ← read by the program, at the very end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three lines. Three different readers. Three different moments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A layer is one line of the message plus the job of reading it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the entire meaning of the word. When someone says &amp;quot;networking has layers,&amp;quot; they mean exactly this: the message has parts, and different parts are read by different things at different points in the journey.&lt;/p&gt;
&lt;p&gt;The carrying job — wires and WiFi — is a layer too: the bottom one. It touches no lines at all and just moves the whole message.&lt;/p&gt;
&lt;p&gt;So the full stack, in plain words:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;the text        ← read by the program           (top layer)
the port        ← read by the computer
the address     ← read by the junctions
the carrying    ← wires and WiFi, reads nothing (bottom layer)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One message, four layers, top to bottom.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The official numbers and names&lt;/h2&gt;
&lt;p&gt;Engineers worldwide need to talk about these layers and mean the same thing, so the layers have official names and numbers. The numbers count &lt;strong&gt;from the bottom up&lt;/strong&gt; — carrying is 1:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Layer 7   the text        ← official name: Application
Layer 4   the port        ← official name: Transport
Layer 3   the address     ← official name: Network
Layer 1   the carrying    ← official name: Physical
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The names, taken slowly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Physical&lt;/strong&gt; — the physically-carrying-it job. Wires, WiFi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network&lt;/strong&gt; — the navigating job. The address, the junctions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt; — the port job. Named because it delivers to the right program.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application&lt;/strong&gt; — the text job. Named because the text is read by an application (Chrome, the Java backend).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;The missing numbers&lt;/h2&gt;
&lt;p&gt;Where are 2, 5, and 6?&lt;/p&gt;
&lt;p&gt;They exist. The numbering comes from an old master plan called the &lt;strong&gt;OSI model&lt;/strong&gt;, drawn up in the late 1970s, which defined seven layers. But the internet as actually built doesn&apos;t use all seven as separate things — some collapsed into their neighbours in practice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 2&lt;/strong&gt; is real and gets its own later lesson (MAC addresses — it already has a file waiting).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layers 5 and 6&lt;/strong&gt; can be ignored for an entire career. Their jobs got absorbed into layer 7.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every DevOps engineer talks as if the stack is 1, 2, 3, 4, 7. People say &amp;quot;that&apos;s a Layer 7 problem&amp;quot; and skip from 4 to 7 without blinking.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Why the numbers matter in real work&lt;/h2&gt;
&lt;p&gt;The numbers are working vocabulary. In job posts, incident chats, and cloud settings, people say:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phrase heard in real work&lt;/th&gt;
&lt;th&gt;What it actually means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;That&apos;s a Layer 4 issue&amp;quot;&lt;/td&gt;
&lt;td&gt;A port/delivery problem, not a content problem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;This load balancer works at Layer 7&amp;quot;&lt;/td&gt;
&lt;td&gt;It reads the text, not just the address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Layer 3 is fine&amp;quot;&lt;/td&gt;
&lt;td&gt;The address and navigation work; look elsewhere&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each sentence instantly locates the problem in &lt;strong&gt;one line of the message&lt;/strong&gt;. That is the entire power of the numbering — one number tells you which layer of the stack to look at.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Encapsulation — envelopes inside envelopes&lt;/h2&gt;
&lt;p&gt;The message has been drawn as three lines. The real arrangement is slightly different: the message is built like &lt;strong&gt;envelopes inside envelopes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Watch it get built, from the inside out:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Chrome writes the text: &lt;em&gt;please send me the homepage.&lt;/em&gt; That is the innermost thing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; The text goes in an envelope. On that envelope is written: &lt;strong&gt;port 443&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; That envelope goes inside a bigger envelope. On the bigger one is written: &lt;strong&gt;140.82.121.4&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; The whole thing goes onto the wire and gets carried.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;outer envelope:  140.82.121.4
   inner envelope:  port 443
      the text:  please send me the homepage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now follow the journey, and watch each stage open exactly one envelope:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At every junction&lt;/strong&gt; — the junction sees only the &lt;strong&gt;outer envelope&lt;/strong&gt;: an address. It reads it, picks a direction, passes it on. It never opens anything. It cannot see the port or the text — not hidden by rules, but genuinely not visible, because they are inside.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At GitHub&apos;s computer&lt;/strong&gt; — the address on the outer envelope matches. Journey over. The computer &lt;strong&gt;opens the outer envelope&lt;/strong&gt; and finds the inner one: port 443. It hands that inner envelope to the program holding 443.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At the program&lt;/strong&gt; — the program &lt;strong&gt;opens the inner envelope&lt;/strong&gt; and finds the text. Reads it. Acts on it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;junction:  reads outer envelope   →  never opens anything
computer:  opens outer envelope   →  finds the port
program:   opens inner envelope   →  finds the text
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The official word for this is &lt;strong&gt;encapsulation&lt;/strong&gt; — each layer&apos;s information wraps around the layer above it. Building the message (on the laptop) adds envelopes from the inside out. Receiving it (at GitHub) opens them from the outside in.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Why layer independence is automatic&lt;/h2&gt;
&lt;p&gt;The claim at the start of the lesson: each layer does only its own job and ignores the rest, so any layer can be changed without touching the others. Swap WiFi for a cable — layer 1 changed completely, and layers 3, 4, 7 never notice.&lt;/p&gt;
&lt;p&gt;Encapsulation is &lt;em&gt;why&lt;/em&gt; this is true. A junction cannot misdeliver based on the text, and the carrying layer cannot care what the message says, because &lt;strong&gt;each stage literally cannot see beyond its own envelope&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The independence of the layers is not a rule that someone enforces. It falls straight out of how the envelopes nest.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The numbers count from the bottom.&lt;/strong&gt; Layer 1 is the wire, not the application. Getting this backwards makes every &amp;quot;Layer X&amp;quot; sentence mean its opposite.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The gap from 4 to 7 is normal.&lt;/strong&gt; Hearing people skip layers 5 and 6 is not a mistake or missing knowledge — it is how the field actually talks. The internet in practice collapsed those layers into 7.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Junctions never read the port.&lt;/strong&gt; The port is only read at the destination, after the journey is over. Everything along the way navigates by address alone. (One refinement to this arrives in a later lesson — some in-between machines &lt;em&gt;can&lt;/em&gt; open more envelopes than a plain junction. Noted here so the future lesson does not feel like a contradiction.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;Machine,&amp;quot; &amp;quot;computer,&amp;quot; &amp;quot;server&amp;quot; — same thing in this track.&lt;/strong&gt; A server is just a computer in a building with no screen attached, because nobody sits in front of it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The OSI model is a vocabulary, not a machine.&lt;/strong&gt; Nothing in a real network &amp;quot;runs&amp;quot; the OSI model. It is a shared way of naming the jobs so engineers can point at the right one.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;quot;Layers&amp;quot;&lt;/td&gt;
&lt;td&gt;An abstract diagram memorised for exams, seven boxes with strange names&lt;/td&gt;
&lt;td&gt;One message, several lines, each line read by a different thing at a different moment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The OSI model&lt;/td&gt;
&lt;td&gt;Something a network is built out of&lt;/td&gt;
&lt;td&gt;A naming scheme — vocabulary for pointing at the right job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layer numbers&lt;/td&gt;
&lt;td&gt;Trivia&lt;/td&gt;
&lt;td&gt;A precise way of locating a problem: &amp;quot;Layer 4 issue&amp;quot; = look at the port line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layers 5 and 6&lt;/td&gt;
&lt;td&gt;Presumably important, must learn eventually&lt;/td&gt;
&lt;td&gt;Absorbed into 7 in the real internet; safely ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why layers are independent&lt;/td&gt;
&lt;td&gt;A design rule someone follows&lt;/td&gt;
&lt;td&gt;Automatic — each stage physically cannot see inside the envelopes beyond its own&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A message&lt;/td&gt;
&lt;td&gt;An abstract &amp;quot;chunk of data&amp;quot;&lt;/td&gt;
&lt;td&gt;Envelopes inside envelopes: address outside, port inside that, text innermost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;layer&lt;/strong&gt; — one line of the message plus the job of reading it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 1 / Physical&lt;/strong&gt; — the carrying: wires, WiFi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 3 / Network&lt;/strong&gt; — the address, read by junctions to navigate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 4 / Transport&lt;/strong&gt; — the port, read by the destination computer&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 7 / Application&lt;/strong&gt; — the text, read by the program&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSI model&lt;/strong&gt; — the 1970s seven-layer plan the numbering comes from&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;encapsulation&lt;/strong&gt; — each layer&apos;s information wrapping around the layer above; envelopes inside envelopes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;server&lt;/strong&gt; — a computer in a building with no screen, because nobody sits in front of it&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 2 / MAC addresses&lt;/strong&gt; — real, has its own lesson file waiting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the text actually looks like&lt;/strong&gt; — the exact format of &amp;quot;please send me the homepage&amp;quot; is HTTP, lesson 11&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The machines that open more envelopes than a junction&lt;/strong&gt; — load balancers and proxies, Part 5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How the laptop learned GitHub&apos;s address in the first place&lt;/strong&gt; — DNS, next lesson&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TCP/IP model vs OSI model naming differences&lt;/strong&gt; — deferred until TCP itself is covered, where it makes sense&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The OSI seven-layer model, original standard&lt;/td&gt;
&lt;td&gt;ISO/IEC 7498-1&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.iso.org/standard/20269.html&quot;&gt;https://www.iso.org/standard/20269.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The internet&apos;s own layer model (four layers, not seven)&lt;/td&gt;
&lt;td&gt;RFC 1122&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1122.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc1122.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beginner-friendly layer overview&lt;/td&gt;
&lt;td&gt;Cloudflare Learning — What is the OSI model?&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/&quot;&gt;https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; the ISO standard is paywalled (standards bodies charge for documents — unlike RFCs, which are free). RFC 1122 is the free, authoritative description of how the internet actually layers things. The Cloudflare page is a readable secondary source.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 03. Next: DNS — how the laptop learned GitHub&apos;s address in the first place.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 01 — What Networking Means in DevOps, and IP Addresses</title><link>https://bishwas54.com.np/tutorials/devops-networking/networking-and-ip-addresses/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/networking-and-ip-addresses/</guid><description>Networking from zero: why machines need to reach each other, who hands out IP addresses, how the world ran out of them, and what IPv6 fixes.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 2 — networking in DevOps, IP address&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#concept-1--what-networking-means-in-devops&quot;&gt;Concept 1 — What networking means in DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#concept-2--ip-address&quot;&gt;Concept 2 — IP address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#questions-raised-in-this-lesson&quot;&gt;Questions raised in this lesson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;Concept 1 — What networking means in DevOps&lt;/h2&gt;
&lt;h3&gt;The starting point&lt;/h3&gt;
&lt;p&gt;Take one computer running one program. Inside that program, when part A needs something from part B, it just calls it. Instantly. Nothing to configure. Nothing to break.&lt;/p&gt;
&lt;p&gt;Now take that same program and split it into pieces, each running on a different machine:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;web piece    →    backend piece    →    database piece
(machine 1)       (machine 2)           (machine 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Nothing about the code changed. But now, when the web piece wants something from the backend piece, it can no longer just &amp;quot;call&amp;quot; it. It has to send that request out of machine 1, across a wire, and into machine 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That sending is networking.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Definition&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Networking is how one machine reaches another machine and gets an answer back.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Why this becomes a DevOps concern&lt;/h3&gt;
&lt;p&gt;The arrow between machine 1 and machine 2 &lt;strong&gt;does not exist by default.&lt;/strong&gt; Somebody has to make it exist. Somebody has to decide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which machine is allowed to talk to which,&lt;/li&gt;
&lt;li&gt;at what address,&lt;/li&gt;
&lt;li&gt;through which door.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When that arrow is missing or pointed at the wrong place, the application looks perfectly healthy — the process is running, the logs are clean — and users still get an error.&lt;/p&gt;
&lt;h3&gt;What problem it solves&lt;/h3&gt;
&lt;p&gt;Modern applications are spread across many machines. Most production failures in that world are not broken code. They are &lt;strong&gt;broken arrows&lt;/strong&gt;. Networking knowledge is what turns &lt;em&gt;&amp;quot;it&apos;s broken&amp;quot;&lt;/em&gt; into &lt;em&gt;&amp;quot;the traffic dies between point X and point Y.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Where it sits&lt;/h3&gt;
&lt;p&gt;Everything in this track lives on one line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user → DNS → load balancer → proxy/ingress → service → container → app
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every future topic is one hop on this line. Learn the hops one at a time, and eventually you can trace a request end to end.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Concept 2 — IP address&lt;/h2&gt;
&lt;h3&gt;The problem it solves&lt;/h3&gt;
&lt;p&gt;Machine 1 needs to send a request to machine 2. But a network has many machines on it — ten, a thousand, a million. So the network needs a way to tell them apart.&lt;/p&gt;
&lt;h3&gt;The solution&lt;/h3&gt;
&lt;p&gt;Give every machine a number.&lt;/p&gt;
&lt;p&gt;That number is the &lt;strong&gt;IP address&lt;/strong&gt;. It looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.57
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Four numbers separated by dots. Every machine on the network has one, and no two machines on the same network share the same one.&lt;/p&gt;
&lt;h3&gt;How it is used&lt;/h3&gt;
&lt;p&gt;When machine 1 sends its request, it writes the destination number on it before sending:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;machine 1  ──[ deliver this to 10.0.1.57 ]──►  machine 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The network reads that number and carries the request to the machine holding it.&lt;/p&gt;
&lt;h3&gt;Definition&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;An IP address identifies one machine on a network.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Example from everyday experience&lt;/h3&gt;
&lt;p&gt;Connect a laptop to home WiFi and it gets one of these numbers automatically. The phone gets a different one. The TV gets another. Same network, three machines, three different numbers — so the router can tell them apart when data comes in.&lt;/p&gt;
&lt;h3&gt;What breaks without it&lt;/h3&gt;
&lt;p&gt;Machine 1 has a request ready and no way to say where it should go. Nothing can be delivered.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Questions raised in this lesson&lt;/h2&gt;
&lt;hr&gt;
&lt;h3&gt;Who decides this number?&lt;/h3&gt;
&lt;p&gt;Two different answers, depending on which network is meant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inside a private network&lt;/strong&gt; (home WiFi, an office): the router hands out the numbers automatically. It keeps a small list and assigns one to each device that connects. Nobody outside is involved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On the internet:&lt;/strong&gt; the numbers cannot be handed out casually, because if two machines anywhere in the world had the same number, delivery would break. So there is one global organisation that holds the whole pool of numbers — &lt;strong&gt;IANA&lt;/strong&gt; (Internet Assigned Numbers Authority). IANA does not give numbers to individuals. It gives large blocks to five regional organisations, called &lt;strong&gt;Regional Internet Registries (RIRs)&lt;/strong&gt;, and those give smaller blocks to the companies that provide internet connections, who then give one to each customer connection.&lt;/p&gt;
&lt;p&gt;The chain looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;IANA (global pool)
   ↓
5 Regional Internet Registries
   ↓
internet service providers
   ↓
you
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The five RIRs cover Asia-Pacific (APNIC), Europe and the Middle East (RIPE NCC), North America (ARIN), Latin America and the Caribbean (LACNIC), and Africa (AFRINIC).&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Who sets the ranges?&lt;/h3&gt;
&lt;p&gt;The ranges come from published technical standards, not from a company decision.&lt;/p&gt;
&lt;p&gt;The reserved &lt;strong&gt;private ranges&lt;/strong&gt; — the ones a home router or an internal company network uses — are defined in a standards document called &lt;strong&gt;RFC 1918&lt;/strong&gt;, published in 1996. It reserves exactly three blocks:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.0.0     – 10.255.255.255
172.16.0.0   – 172.31.255.255
192.168.0.0  – 192.168.255.255
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two important details from the standard itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An organisation can use these addresses &lt;strong&gt;without asking IANA or any registry for permission.&lt;/strong&gt; They are free for anyone to use internally.&lt;/li&gt;
&lt;li&gt;Addresses in these ranges are only unique &lt;em&gt;inside&lt;/em&gt; one organisation. They are not routable on the public internet, and internet providers&apos; routers are expected to filter them out.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;How many IP addresses exist in the world?&lt;/h3&gt;
&lt;p&gt;This is calculable. Four slots, each holding a value from 0 to 255. That is 256 possibilities per slot:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;256 × 256 × 256 × 256 = 4,294,967,296
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Roughly &lt;strong&gt;4.3 billion&lt;/strong&gt; addresses. That is the entire supply of this address format.&lt;/p&gt;
&lt;p&gt;In the standards this is described as a 32-bit address — 32 binary digits, producing 2³² combinations, the same number.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Can it finish? What happens if it finishes?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;It already finished.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4.3 billion sounded infinite when the format was designed in the early 1980s, when only universities, research organisations and government agencies were connected. Then came home computers, then phones, then every laptop, tablet, camera, TV and machine in every data centre on Earth — most people now consume several addresses at once.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The global pool was emptied on 3 February 2011.&lt;/strong&gt; IANA handed its final five blocks to the five regional registries in one ceremony, triggered by an agreed global policy, and after that there were no fresh addresses left at the top level.&lt;/p&gt;
&lt;p&gt;The regional pools then drained over the following years, each at its own pace:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Registry&lt;/th&gt;
&lt;th&gt;Pool exhausted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Asia-Pacific&lt;/td&gt;
&lt;td&gt;APNIC&lt;/td&gt;
&lt;td&gt;15 April 2011&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latin America / Caribbean&lt;/td&gt;
&lt;td&gt;LACNIC&lt;/td&gt;
&lt;td&gt;10 June 2014&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;North America&lt;/td&gt;
&lt;td&gt;ARIN&lt;/td&gt;
&lt;td&gt;24 September 2015&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Africa&lt;/td&gt;
&lt;td&gt;AFRINIC&lt;/td&gt;
&lt;td&gt;21 April 2017&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Europe / Middle East&lt;/td&gt;
&lt;td&gt;RIPE NCC&lt;/td&gt;
&lt;td&gt;25 November 2019&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;What happened when it ran out:&lt;/strong&gt; nothing dramatic. The internet did not stop, for one reason — &lt;strong&gt;most machines do not need a globally unique number.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go back to the home WiFi example. Laptop, phone and TV each had their own number, but those numbers are only meaningful inside the house. The whole home shares &lt;em&gt;one&lt;/em&gt; internet-facing number, and the router translates in both directions. So one global address can cover a household, an office, or thousands of machines.&lt;/p&gt;
&lt;p&gt;That trick bought the internet an extra fifteen-plus years. It is a workaround, not a fix — and it is the reason the real solution exists.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What exists today instead of fresh addresses:&lt;/strong&gt; a resale market. Organisations buy unused blocks from each other through the registries&apos; transfer process. Roughly 29.7 million addresses changed hands in the first half of 2026 alone, at a published-price average of about $20 per address. Prices peaked far higher around 2021–22 and have fallen since.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;What is the difference between IPv4 and IPv6?&lt;/h3&gt;
&lt;p&gt;Everything above describes &lt;strong&gt;IPv4&lt;/strong&gt; — version 4, the four-numbers-with-dots format, 32 bits, ~4.3 billion addresses.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IPv6&lt;/strong&gt; is version 6, designed specifically to end the shortage. Instead of 32 bits it uses &lt;strong&gt;128 bits&lt;/strong&gt;, written like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2001:0db8:85a3:0000:0000:8a2e:0370:7334
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eight groups separated by colons, using hexadecimal (digits 0–9 plus letters a–f). The supply it produces is around &lt;strong&gt;340 undecillion&lt;/strong&gt; — a number with 39 digits. It will not run out.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;IPv4&lt;/th&gt;
&lt;th&gt;IPv6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Address size&lt;/td&gt;
&lt;td&gt;32 bits&lt;/td&gt;
&lt;td&gt;128 bits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Written as&lt;/td&gt;
&lt;td&gt;&lt;code&gt;10.0.1.57&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2001:db8::7334&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Separator&lt;/td&gt;
&lt;td&gt;dots&lt;/td&gt;
&lt;td&gt;colons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total supply&lt;/td&gt;
&lt;td&gt;~4.3 billion&lt;/td&gt;
&lt;td&gt;~340 undecillion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply status&lt;/td&gt;
&lt;td&gt;exhausted since 2011&lt;/td&gt;
&lt;td&gt;effectively unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current spec&lt;/td&gt;
&lt;td&gt;RFC 791&lt;/td&gt;
&lt;td&gt;RFC 8200&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The detail that matters most:&lt;/strong&gt; the two are &lt;strong&gt;not compatible&lt;/strong&gt;. An IPv6-only machine cannot talk to an IPv4-only machine directly. That means the world cannot simply switch over — every network has to support both during the transition. This is exactly why IPv6 has been &amp;quot;coming&amp;quot; since its first specification in December 1998 and is only now reaching majority use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Current adoption:&lt;/strong&gt; IPv6 crossed 50% of Google&apos;s measured traffic for the first time on &lt;strong&gt;28 March 2026&lt;/strong&gt; (50.10%), up from 46.33% a year earlier. So in practice: expect IPv4 daily, but IPv6 is no longer a minority protocol.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Who decided the IPv6 pattern, and what kind of people are involved?&lt;/h3&gt;
&lt;p&gt;IPv6 was designed by the &lt;strong&gt;IETF&lt;/strong&gt; — the Internet Engineering Task Force.&lt;/p&gt;
&lt;p&gt;It is not a company. It is not owned by anyone. There is no CEO, no shareholders, and no government controls it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who participates:&lt;/strong&gt; it is an open group of engineers, and anyone can join. There is no membership fee and no application process. The IETF&apos;s own documents state plainly that it is &lt;em&gt;not&lt;/em&gt; a membership organisation — there are no &amp;quot;members,&amp;quot; only &amp;quot;participants,&amp;quot; and this is precisely why they cannot hold votes: it would be impossible to determine who was entitled to vote. Most participants work at companies that depend on the internet functioning (network equipment vendors, internet providers, large software companies, universities), but they participate as individual engineers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How a decision is actually made:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Someone writes a proposal and publishes it for anyone to read and attack. Others tear it apart, argue, and propose alternatives. This happens on public mailing lists and at meetings held three times a year. Every discussion is public and archived — the arguments people had about IPv6 in the 1990s are still readable today.&lt;/p&gt;
&lt;p&gt;Two things make this group unusual:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;There is no vote.&lt;/strong&gt; Decisions are made by &lt;em&gt;rough consensus&lt;/em&gt; — not everyone agreeing, but no one holding an objection serious enough to stand. Their founding principle, stated in a 1992 talk and quoted in their own standards documents, is: &lt;em&gt;reject kings, presidents and voting; believe in rough consensus and running code.&lt;/em&gt; Critically, the documented rule is that an objection has to be genuinely considered and technically answered — a group cannot simply dismiss it because more people disagree. A single engineer with a valid technical objection can hold up a proposal backed by a large company.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Running code beats theory.&lt;/strong&gt; A design is not accepted because it looks good on paper. Practical implementation experience outweighs theoretical elegance.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If a proposal survives all of that, it is published as an &lt;strong&gt;RFC&lt;/strong&gt; — a numbered public document that becomes the official specification. These are free, public and permanent. Anyone can read them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why IPv6 looks the way it does:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The specific decisions came out of arguments over trade-offs. The address length is the clearest example. Once the group accepted IPv4 was running out, the obvious question was how much bigger to go. Some argued for a modest increase — easier to transition, less data attached to every request. Others argued that if you are going to force the entire world through a painful upgrade, you do it once and never again.&lt;/p&gt;
&lt;p&gt;The second group won. The address was made deliberately, almost absurdly larger than needed, so the question would never return. The colon-separated hexadecimal format exists because writing an address that long in the old four-number decimal style would be unreadable.&lt;/p&gt;
&lt;p&gt;The competing proposals and the reasons they lost are all in the public archives.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;Traps in this topic worth remembering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The private range in the middle is not all of &lt;code&gt;172&lt;/code&gt;.&lt;/strong&gt; It is &lt;code&gt;172.16&lt;/code&gt; through &lt;code&gt;172.31&lt;/code&gt; only. &lt;code&gt;172.32.x.x&lt;/code&gt; is a public address. Filtering or firewalling &lt;code&gt;172.x.x.x&lt;/code&gt; as a whole is a real and common mistake.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;Exhausted&amp;quot; does not mean &amp;quot;unavailable.&amp;quot;&lt;/strong&gt; IPv4 addresses still get allocated every day — through resale and recovery, not from a fresh pool. The distinction matters when reading announcements: &amp;quot;IANA&apos;s pool is empty&amp;quot; and &amp;quot;you cannot get an IPv4 address&amp;quot; are different statements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Private addresses are not a security feature by themselves.&lt;/strong&gt; They are unreachable from the internet because no router will carry them, not because something is actively blocking traffic. That distinction matters later when access control comes up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A machine can hold more than one address.&lt;/strong&gt; Nothing in the definition says one machine has exactly one IP. This becomes important with containers and cloud instances.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What networking is&lt;/td&gt;
&lt;td&gt;Cables, WiFi, &amp;quot;the internet&amp;quot; — infrastructure someone else handles&lt;/td&gt;
&lt;td&gt;The deliberate creation and control of paths between machines; a core part of the DevOps job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why apps break&lt;/td&gt;
&lt;td&gt;The code must be wrong&lt;/td&gt;
&lt;td&gt;Most failures are reachability failures; the app can be perfectly healthy and still unreachable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP address&lt;/td&gt;
&lt;td&gt;A technical string that appears in configs&lt;/td&gt;
&lt;td&gt;A machine&apos;s identity on a network; the answer to &amp;quot;which machine?&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who runs it&lt;/td&gt;
&lt;td&gt;Some company or government owns the internet&apos;s addressing&lt;/td&gt;
&lt;td&gt;A layered chain of non-profit registries (IANA → 5 RIRs → providers), with the technical rules set by an open engineering group with no owner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Address supply&lt;/td&gt;
&lt;td&gt;Unlimited, like a serial number&lt;/td&gt;
&lt;td&gt;A finite, exhausted resource with a resale market attached&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IPv6&lt;/td&gt;
&lt;td&gt;A newer version, nice-to-have, always &amp;quot;coming soon&amp;quot;&lt;/td&gt;
&lt;td&gt;The actual fix for exhaustion, incompatible with IPv4 by design, and as of March 2026 carrying the majority of Google&apos;s traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How standards are decided&lt;/td&gt;
&lt;td&gt;A committee votes, or a big company decides&lt;/td&gt;
&lt;td&gt;Public argument, rough consensus, no voting, and objections must be technically answered rather than outnumbered&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;p&gt;Terms now known and usable freely going forward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;network&lt;/strong&gt; — the set of paths that let machines reach each other&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IP address&lt;/strong&gt; — the number identifying one machine on a network&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPv4&lt;/strong&gt; — the 32-bit, four-numbers-with-dots format&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPv6&lt;/strong&gt; — the 128-bit, colon-separated hexadecimal format&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;private address range&lt;/strong&gt; — the RFC 1918 blocks, usable internally by anyone, not routable on the internet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IANA&lt;/strong&gt; — the global holder of the address pool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RIR&lt;/strong&gt; — one of the five regional registries that distribute addresses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IETF&lt;/strong&gt; — the open engineering group that writes internet standards&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RFC&lt;/strong&gt; — a numbered, public, permanent standards document&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;p&gt;Recorded so future lessons do not silently assume them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ports&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;routing&lt;/li&gt;
&lt;li&gt;TCP / UDP&lt;/li&gt;
&lt;li&gt;HTTP / HTTPS / TLS&lt;/li&gt;
&lt;li&gt;subnets and CIDR notation (&lt;code&gt;/8&lt;/code&gt;, &lt;code&gt;/24&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NAT — the translation mechanism referenced above, not yet explained&lt;/li&gt;
&lt;li&gt;firewalls&lt;/li&gt;
&lt;li&gt;AWS, Docker, Kubernetes, proxies, load balancers, ingress&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Every factual claim above can be verified here.&lt;/p&gt;
&lt;h3&gt;Primary standards documents&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Document&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IPv4 specification&lt;/td&gt;
&lt;td&gt;RFC 791&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc791.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc791.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private address ranges&lt;/td&gt;
&lt;td&gt;RFC 1918 (1996)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc1918.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc1918.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IPv6, current specification&lt;/td&gt;
&lt;td&gt;RFC 8200 (2017)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc8200.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc8200.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IPv6, original specification&lt;/td&gt;
&lt;td&gt;RFC 2460 (Dec 1998)&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc2460&quot;&gt;https://datatracker.ietf.org/doc/html/rfc2460&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How the IETF decides — rough consensus, no voting&lt;/td&gt;
&lt;td&gt;RFC 7282&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc7282&quot;&gt;https://www.rfc-editor.org/rfc/rfc7282&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internet standards process&lt;/td&gt;
&lt;td&gt;RFC 2026&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc2026.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc2026.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Address exhaustion&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Global IPv4 pool depleted 3 Feb 2011&lt;/td&gt;
&lt;td&gt;Number Resource Organization announcement&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.nro.net/ipv4-free-pool-depleted/&quot;&gt;https://www.nro.net/ipv4-free-pool-depleted/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same event, registry record&lt;/td&gt;
&lt;td&gt;ARIN announcement archive&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.arin.net/vault/announcements/20110203/&quot;&gt;https://www.arin.net/vault/announcements/20110203/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-region exhaustion dates&lt;/td&gt;
&lt;td&gt;Wikipedia — secondary, cites the registry announcements&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/IPv4_address_exhaustion&quot;&gt;https://en.wikipedia.org/wiki/IPv4_address_exhaustion&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private ranges are not publicly routable&lt;/td&gt;
&lt;td&gt;ARIN reference page&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.arin.net/reference/research/statistics/address_filters/&quot;&gt;https://www.arin.net/reference/research/statistics/address_filters/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;IPv6 adoption&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Live adoption measurement&lt;/td&gt;
&lt;td&gt;Google IPv6 Statistics&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.google.com/intl/en/ipv6/statistics.html&quot;&gt;https://www.google.com/intl/en/ipv6/statistics.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crossed 50% on 28 March 2026&lt;/td&gt;
&lt;td&gt;Internet Society Pulse&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://pulse.internetsociety.org/en/blog/2026/04/18-years-later-ipv6-reaches-majority/&quot;&gt;https://pulse.internetsociety.org/en/blog/2026/04/18-years-later-ipv6-reaches-majority/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent confirmation and regional context&lt;/td&gt;
&lt;td&gt;APNIC Blog&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://blog.apnic.net/2026/04/28/google-hits-50-ipv6/&quot;&gt;https://blog.apnic.net/2026/04/28/google-hits-50-ipv6/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;IPv4 resale market — indicative only&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;29.7M addresses transferred H1 2026, ~$20/address average&lt;/td&gt;
&lt;td&gt;IPregistry market analysis&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://ipregistry.co/blog/ipv4-market-mid-2026/&quot;&gt;https://ipregistry.co/blog/ipv4-market-mid-2026/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price history and 2021–22 peak&lt;/td&gt;
&lt;td&gt;Market commentary&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://ipbnb.com/blog/ipv4-address-price-2026&quot;&gt;https://ipbnb.com/blog/ipv4-address-price-2026&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Source note:&lt;/strong&gt; the RFC and registry links are authoritative primary sources. The resale-market links are commercial brokers and analysts — useful for order of magnitude, not precise figures.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 01. Next: ports.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item><item><title>Lesson 02 — Ports</title><link>https://bishwas54.com.np/tutorials/devops-networking/ports/</link><guid isPermaLink="true">https://bishwas54.com.np/tutorials/devops-networking/ports/</guid><description>How ports identify which program on a machine a request is for, who claims them, the permission rule for low numbers, and why every request carries a source port too.</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; DevOps Networking — 1 Month Deep Dive
&lt;strong&gt;Part:&lt;/strong&gt; 1 — Networking Foundations
&lt;strong&gt;Status:&lt;/strong&gt; Understood and closed
&lt;strong&gt;Concepts covered:&lt;/strong&gt; 1 — ports
&lt;strong&gt;Builds on:&lt;/strong&gt; Lesson 01 (networking, IP addresses)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#the-problem-ports-solve&quot;&gt;The problem ports solve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#what-a-port-is&quot;&gt;What a port is&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#claiming-a-port&quot;&gt;Claiming a port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#one-program-per-port&quot;&gt;One program per port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-port-range-and-the-permission-rule&quot;&gt;The port range and the permission rule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#which-programs-have-ports&quot;&gt;Which programs have ports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#who-sets-a-programs-port&quot;&gt;Who sets a program&apos;s port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#open-and-closed&quot;&gt;Open and closed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-source-port&quot;&gt;The source port&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#walkthrough-what-happens-when-you-visit-a-website&quot;&gt;Walkthrough: what happens when you visit a website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#questions-raised-in-this-lesson&quot;&gt;Questions raised in this lesson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#the-running-project&quot;&gt;The running project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#easy-to-get-wrong&quot;&gt;Easy to get wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#old-way-vs-improved-understanding&quot;&gt;Old way vs improved understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#terms-locked-in&quot;&gt;Terms locked in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deliberately-not-covered-yet&quot;&gt;Deliberately not covered yet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;The problem ports solve&lt;/h2&gt;
&lt;p&gt;From Lesson 01: an IP address identifies one machine on a network.&lt;/p&gt;
&lt;p&gt;But a machine is not running one thing. A single machine might be running a React frontend, a Java backend, and a PostgreSQL database all at the same time.&lt;/p&gt;
&lt;p&gt;So a request arrives at the machine — and then what? Which of those three programs is it for?&lt;/p&gt;
&lt;p&gt;The IP address cannot answer that. It only answers &amp;quot;which machine.&amp;quot;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;What a port is&lt;/h2&gt;
&lt;p&gt;The machine needs a second number. Not to identify itself, but to identify &lt;strong&gt;which program on it&lt;/strong&gt; the request is meant for.&lt;/p&gt;
&lt;p&gt;That second number is the &lt;strong&gt;port&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It is written after the address, separated by a colon:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.10:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Read it as two separate pieces of information:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.10      →  which machine
     8080      →  which program on that machine
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The IP finds the machine. The port finds the program on it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Claiming a port&lt;/h2&gt;
&lt;p&gt;When a program starts up, it picks a port number and tells the machine: &lt;em&gt;anything that arrives for this number, give it to me.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That is what the word &lt;strong&gt;listening&lt;/strong&gt; means. It appears constantly in startup logs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Tomcat started on port 8080
Local: http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Those lines mean the program has claimed that port. From then on, any request arriving at that machine carrying that number gets handed to that program, and nothing else.&lt;/p&gt;
&lt;p&gt;That output is also how you find out what port a program took — the program tells you when it starts.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;One program per port&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Only one program can hold a given port on a machine at a time.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If a program is already listening on 8080 and a second program tries to claim it, the second one fails to start:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: listen EADDRINUSE: address already in use :::8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That message means exactly one thing: something else already holds that port. Not a code problem. Not a permissions problem. Another program got there first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who gets the port?&lt;/strong&gt; Whoever claimed it first. There is no queue and no priority — first come, first served.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The port range and the permission rule&lt;/h2&gt;
&lt;p&gt;Ports run from &lt;strong&gt;0 to 65535&lt;/strong&gt;. They split into two groups that behave differently:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Behaviour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 – 1023&lt;/td&gt;
&lt;td&gt;well-known ports&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Protected.&lt;/strong&gt; Admin permission required to claim one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1024 – 65535&lt;/td&gt;
&lt;td&gt;everything else&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Free.&lt;/strong&gt; Any program can claim any of these.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The rule is simply: &lt;strong&gt;low numbers are protected, high numbers are free.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some well-known ports worth recognising:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;22    SSH
53    DNS
80    HTTP
443   HTTPS
5432  PostgreSQL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These are agreed globally, which is why every piece of software on Earth treats 443 as HTTPS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attempting to claim a protected port without permission&lt;/strong&gt; produces a different error from the one above:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: listen EACCES: permission denied 0.0.0.0:443
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two distinct failures, easily confused:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EADDRINUSE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The port is already taken by another program&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EACCES&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;You lack permission to use this port&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;The reason the low ports are protected involves servers and HTTPS, neither of which has been covered yet. It is deferred to a later lesson rather than half-explained here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Which programs have ports&lt;/h2&gt;
&lt;p&gt;Not every installed program has a port. Only programs that &lt;strong&gt;wait to be contacted&lt;/strong&gt; do.&lt;/p&gt;
&lt;p&gt;There are two kinds of program:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Waiters&lt;/strong&gt; — they sit there doing nothing until something contacts them. They need a port, because that is how anything reaches them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Askers&lt;/strong&gt; — they go out and request things from elsewhere. They are not waiting for anyone, so they need no port to be reached at.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Program&lt;/th&gt;
&lt;th&gt;Claims a port?&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Waits for programs to connect to it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A running Spring Boot app&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Waits for requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React dev server&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Waits for the browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chrome&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Sends requests, does not wait for them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code, Photoshop&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Same — they ask, they do not wait&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Chrome is the clarifying case. It sends requests constantly but never sits waiting to receive one, so it claims no port to listen on. Most applications on a laptop are like this.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Who sets a program&apos;s port&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The software ships with a default.&lt;/strong&gt; Install PostgreSQL, start it, and it takes 5432. Create a React app, run it, and it takes 3000. Nothing was configured — that number came with the software, chosen by whoever built it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can override it.&lt;/strong&gt; For a Spring Boot app that is a line in its config file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server.port=9000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it claims 9000 instead of 8080.&lt;/p&gt;
&lt;p&gt;So: the default comes with the software, and it is overridable but rarely needs overriding.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who decided these defaults?&lt;/strong&gt; Two different situations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Low ports are officially registered.&lt;/strong&gt; 443 for HTTPS, 22 for SSH, 5432 for PostgreSQL. These are recorded in a registry maintained by IANA — the same organisation from Lesson 01 that holds the global IP address pool. That registration is why the meaning is universal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High ports are just convention.&lt;/strong&gt; 3000 for React, 8080 for Spring Boot, 5173 for Vite. Nobody registered these. A tool&apos;s authors picked a free number above 1023 and other people copied it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why development tools all use odd high numbers:&lt;/strong&gt; because of the permission rule. A tool that defaulted to port 80 would require admin permission every single time it started. Defaulting to 3000 or 8080 means it just runs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Open and closed&lt;/h2&gt;
&lt;p&gt;A port is &lt;strong&gt;open&lt;/strong&gt; when a program has claimed it and is listening. It is &lt;strong&gt;closed&lt;/strong&gt; when nothing has claimed it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.10  port 3000   open     ← React frontend is listening
10.0.1.10  port 8080   open     ← Java backend is listening
10.0.1.10  port 5432   open     ← PostgreSQL is listening
10.0.1.10  port 9999   closed   ← nothing has claimed it
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Port 9999 is not blocked or protected. It is simply empty. A request arriving there has no recipient and is refused immediately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this matters in practice:&lt;/strong&gt; &amp;quot;closed port&amp;quot; and &amp;quot;the app is down&amp;quot; produce the same symptom. If the Java backend crashes, it stops listening, port 8080 becomes closed, and requests start failing — even though the machine itself is perfectly healthy and still answering on 3000 and 5432.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is a second reason a port can appear closed, where something actively blocks traffic even though a program &lt;em&gt;is&lt;/em&gt; listening. That belongs to a later topic. For now, closed means nothing is listening.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;The source port&lt;/h2&gt;
&lt;p&gt;Everything above concerns the &lt;strong&gt;destination&lt;/strong&gt; port. But every request carries &lt;strong&gt;two&lt;/strong&gt; ports.&lt;/p&gt;
&lt;p&gt;When the Java backend opens a connection to PostgreSQL, the operating system also assigns the backend a temporary port of its own, picked automatically from the high range:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from  10.0.1.10:51847   ←  temporary, assigned automatically
to    10.0.1.10:5432    ←  PostgreSQL, chosen deliberately
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;First reason it exists:&lt;/strong&gt; PostgreSQL has to send an answer back. It cannot reply to port 5432 — that is its own port. It needs a return address, and &lt;code&gt;51847&lt;/code&gt; is it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Second reason, and the more important one:&lt;/strong&gt; suppose the Java backend opens three database connections at once. All three go to the same destination. When three answers come back, what distinguishes them?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from 10.0.1.10:51847  →  to 10.0.1.10:5432
from 10.0.1.10:51848  →  to 10.0.1.10:5432
from 10.0.1.10:51849  →  to 10.0.1.10:5432
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The source ports. Each connection gets a different one, so each reply lands in the right place. Without them, simultaneous requests to the same destination would be indistinguishable.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Destination port&lt;/th&gt;
&lt;th&gt;Source port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chosen by&lt;/td&gt;
&lt;td&gt;You / the software&apos;s default&lt;/td&gt;
&lt;td&gt;The operating system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Value&lt;/td&gt;
&lt;td&gt;Fixed and known in advance&lt;/td&gt;
&lt;td&gt;Different for every connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lifetime&lt;/td&gt;
&lt;td&gt;Held as long as the program runs&lt;/td&gt;
&lt;td&gt;Discarded when the connection ends&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Walkthrough: what happens when you visit a website&lt;/h2&gt;
&lt;p&gt;Typing this into a browser:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://github.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Chrome needs GitHub&apos;s IP address. It gets one — say &lt;code&gt;140.82.121.4&lt;/code&gt;. &lt;em&gt;(How it gets that number is the next topic.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Chrome needs a port. None was typed. But &lt;code&gt;https&lt;/code&gt; at the front tells Chrome which to use: 443. That is what &lt;code&gt;https&lt;/code&gt; means to Chrome — use port 443.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Chrome now has a complete destination and builds the thing it is sending — a chunk of data with the destination on the front of it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;destination IP:    140.82.121.4
destination port:  443
content:           give me the homepage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That whole chunk is &amp;quot;the request.&amp;quot; The first two lines are the label on it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; It travels across the network and arrives at machine &lt;code&gt;140.82.121.4&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; The machine reads the label, sees &lt;code&gt;443&lt;/code&gt;, and checks its own list of which programs hold which ports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;port 22    → held by nothing
port 443   → held by GitHub&apos;s web program
port 5432  → held by nothing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;443 is held by the web program, so the machine hands the chunk to it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So &amp;quot;a request arrives marked :443&amp;quot;&lt;/strong&gt; means: a chunk of data showed up, and the number written on its label was 443.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Questions raised in this lesson&lt;/h2&gt;
&lt;hr&gt;
&lt;h3&gt;If all three programs run on one machine, do they share an IP but have different ports?&lt;/h3&gt;
&lt;p&gt;Yes. One machine has one address. All three programs share that single address, and each claims its own port:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.10:3000   →  React frontend
10.0.1.10:8080   →  Java backend
10.0.1.10:5432   →  PostgreSQL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Same machine number every time. Only the port changes.&lt;/p&gt;
&lt;p&gt;This is different from running the three programs on three separate machines, where each would have its own IP &lt;em&gt;and&lt;/em&gt; its own port:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.1.10:3000   →  React frontend      (machine 1)
10.0.1.20:8080   →  Java backend        (machine 2)
10.0.1.30:5432   →  PostgreSQL          (machine 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both arrangements are real and both work. The rule does not change between them: the port always answers &amp;quot;which program,&amp;quot; never &amp;quot;which machine.&amp;quot;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;With &lt;code&gt;https://api.github.com&lt;/code&gt;, does the request still reach the homepage?&lt;/h3&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The port does not change.&lt;/strong&gt; &lt;code&gt;https&lt;/code&gt; still means 443, regardless of what name follows it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The machine changes.&lt;/strong&gt; &lt;code&gt;github.com&lt;/code&gt; and &lt;code&gt;api.github.com&lt;/code&gt; are different names, so they resolve to different IP addresses:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;github.com       →  140.82.121.4:443
api.github.com   →  140.82.121.6:443
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Same port, different machine. The request never arrives at the machine serving the homepage — it goes elsewhere entirely. That other machine has its own program holding its own port 443, serving API responses instead of web pages.&lt;/p&gt;
&lt;p&gt;Two different buildings, both with a room numbered 443, doing different work inside.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(How the request specifies &amp;quot;the homepage&amp;quot; versus a particular piece of data lives inside the content portion of the chunk. That is HTTP, a later topic. At the port level: &lt;code&gt;https&lt;/code&gt; fixes the port, the name determines the machine.)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;What happens if a React app is overridden from port 3000 to 443 locally?&lt;/h3&gt;
&lt;p&gt;It fails to start:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: listen EACCES: permission denied 0.0.0.0:443
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;443 is below 1024, and &lt;code&gt;npm start&lt;/code&gt; runs as a normal user, not an admin. The system refuses before anything else happens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Could it be forced?&lt;/strong&gt; Yes, by running it as an administrator. That is a bad idea — it grants a development server administrator rights over the whole machine to gain nothing, since the browser reaches &lt;code&gt;localhost:3000&lt;/code&gt; perfectly well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The practical answer:&lt;/strong&gt; leave it on 3000. The port 443 problem only appears on a real deployment, and by then something else is handling 443 in front of the app. That something else is the reverse proxy from the traffic line in Lesson 01 — a later topic.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The running project&lt;/h2&gt;
&lt;p&gt;From this lesson onward, one example app is carried through the whole track:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React app&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Java Spring Boot API&lt;/td&gt;
&lt;td&gt;8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;5432&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Current state — one machine, three programs, three ports:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Machine 10.0.1.10
  ├── port 3000  →  React frontend
  ├── port 8080  →  Java backend
  └── port 5432  →  PostgreSQL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This shape gets rebuilt at every level of the track — as containers, then as pods, then on cloud infrastructure — so the same app can be compared across all of them.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Easy to get wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;EADDRINUSE&lt;/code&gt; and &lt;code&gt;EACCES&lt;/code&gt; are different problems.&lt;/strong&gt; The first means the port is taken; something else must be stopped or a different port chosen. The second means the port is protected; permission is the issue, not availability. Fixing one when you have the other wastes a lot of time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A closed port and a crashed app look identical from outside.&lt;/strong&gt; Both produce a refused connection. The port being closed is the &lt;em&gt;symptom&lt;/em&gt;; the program having stopped is usually the &lt;em&gt;cause&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;Port&amp;quot; does not mean &amp;quot;machine.&amp;quot;&lt;/strong&gt; A port number alone is meaningless — port 8080 exists on every machine in the world simultaneously. Only &lt;code&gt;IP:port&lt;/code&gt; identifies something specific.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not everything has a port.&lt;/strong&gt; Only programs that wait to be contacted. This is the fastest way to reason about whether something needs one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The port number carries no authority.&lt;/strong&gt; A machine hands data to whichever program holds the number, without checking whether it is the correct program.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Old way vs improved understanding&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Old way of thinking&lt;/th&gt;
&lt;th&gt;Improved understanding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;localhost:3000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A magic string that makes the app appear&lt;/td&gt;
&lt;td&gt;Two facts joined by a colon — this machine, and the program holding port 3000 on it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ports&lt;/td&gt;
&lt;td&gt;Something to do with security or firewalls&lt;/td&gt;
&lt;td&gt;An addressing mechanism: which program on this machine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why React uses 3000&lt;/td&gt;
&lt;td&gt;An arbitrary choice, or something React requires&lt;/td&gt;
&lt;td&gt;A free number above 1023, chosen so the tool starts without admin permission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port already in use&lt;/td&gt;
&lt;td&gt;A confusing error&lt;/td&gt;
&lt;td&gt;Precise information: another program claimed it first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A program having a port&lt;/td&gt;
&lt;td&gt;Something all software has&lt;/td&gt;
&lt;td&gt;Only programs that wait to be contacted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where ports come from&lt;/td&gt;
&lt;td&gt;You configure them&lt;/td&gt;
&lt;td&gt;The software ships with a default; overriding is possible but rarely needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A request&lt;/td&gt;
&lt;td&gt;An abstract event&lt;/td&gt;
&lt;td&gt;A chunk of data with a destination IP and port written on the front of it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2&gt;Terms locked in&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;port&lt;/strong&gt; — the number identifying which program on a machine a request is for&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;listening&lt;/strong&gt; — a program holding a port and waiting for requests on it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;open port&lt;/strong&gt; — a port a program has claimed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;closed port&lt;/strong&gt; — a port nothing has claimed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;well-known ports&lt;/strong&gt; — 0 to 1023, protected, admin permission required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;default port&lt;/strong&gt; — the port a piece of software claims unless told otherwise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source port&lt;/strong&gt; — the temporary port the operating system assigns to the sender, used as a return address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;destination port&lt;/strong&gt; — the port being sent to, chosen deliberately&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EADDRINUSE&lt;/code&gt;&lt;/strong&gt; — the port is already taken&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EACCES&lt;/code&gt;&lt;/strong&gt; — permission denied for this port&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Deliberately not covered yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Why low ports are protected&lt;/strong&gt; — needs servers and HTTPS first&lt;/li&gt;
&lt;li&gt;DNS — how a name becomes an IP address (next lesson)&lt;/li&gt;
&lt;li&gt;HTTP — what is inside the content portion of a request&lt;/li&gt;
&lt;li&gt;TCP / UDP — how a connection is actually established and maintained&lt;/li&gt;
&lt;li&gt;firewalls — the other reason a port can appear closed&lt;/li&gt;
&lt;li&gt;reverse proxies — what handles port 443 in a real deployment&lt;/li&gt;
&lt;li&gt;routing, TLS, subnets, NAT&lt;/li&gt;
&lt;li&gt;AWS, Docker, Kubernetes, load balancers, ingress&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Official port number registry&lt;/td&gt;
&lt;td&gt;IANA Service Name and Transport Protocol Port Number Registry&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml&quot;&gt;https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port ranges and their categories&lt;/td&gt;
&lt;td&gt;RFC 6335&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc6335.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc6335.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP, where port numbers are defined&lt;/td&gt;
&lt;td&gt;RFC 9293&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9293.html&quot;&gt;https://www.rfc-editor.org/rfc/rfc9293.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on the permission rule:&lt;/strong&gt; the 0–1023 restriction is an operating system convention on Unix-like systems, not something defined in an internet standard. It is documented in system manuals rather than an RFC.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;End of Lesson 02. Next: DNS.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>basics</category><category>devops</category></item></channel></rss>