<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Networking on Software Engineering Learning Paths</title><link>https://kyngo.github.io/learning-paths/paths/networking/</link><description>Recent content in Networking on Software Engineering Learning Paths</description><generator>Hugo</generator><language>en</language><atom:link href="https://kyngo.github.io/learning-paths/paths/networking/index.xml" rel="self" type="application/rss+xml"/><item><title>OSI and TCP/IP Models</title><link>https://kyngo.github.io/learning-paths/paths/networking/01-osi-tcp-ip-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/01-osi-tcp-ip-models/</guid><description>&lt;h2 id="why-layered-models"&gt;Why Layered Models?&lt;a class="anchor" href="#why-layered-models"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Networking is complex — it involves physical signals, addressing, routing, reliability, and application logic. Layered models break this complexity into manageable pieces where each layer has a single responsibility and communicates only with adjacent layers.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 App[&amp;#34;Application: What to send&amp;#34;] --&amp;gt; Transport[&amp;#34;Transport: How to deliver reliably&amp;#34;]
 Transport --&amp;gt; Network[&amp;#34;Network: Where to send (routing)&amp;#34;]
 Network --&amp;gt; DataLink[&amp;#34;Data Link: Local delivery (MAC)&amp;#34;]
 DataLink --&amp;gt; Physical[&amp;#34;Physical: Bits on the wire&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="the-osi-model-7-layers"&gt;The OSI Model (7 Layers)&lt;a class="anchor" href="#the-osi-model-7-layers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A theoretical reference model — useful for understanding and troubleshooting:&lt;/p&gt;</description></item><item><title>Physical and Data Link Layers</title><link>https://kyngo.github.io/learning-paths/paths/networking/02-physical-data-link/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/02-physical-data-link/</guid><description>&lt;h2 id="physical-layer-layer-1"&gt;Physical Layer (Layer 1)&lt;a class="anchor" href="#physical-layer-layer-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The physical layer converts bits into signals and transmits them over a medium.&lt;/p&gt;
&lt;h3 id="transmission-media"&gt;Transmission Media&lt;a class="anchor" href="#transmission-media"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Medium&lt;/th&gt;
					&lt;th&gt;Speed&lt;/th&gt;
					&lt;th&gt;Distance&lt;/th&gt;
					&lt;th&gt;Use Case&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Cat5e (copper)&lt;/td&gt;
					&lt;td&gt;1 Gbps&lt;/td&gt;
					&lt;td&gt;100m&lt;/td&gt;
					&lt;td&gt;Office LAN&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cat6a (copper)&lt;/td&gt;
					&lt;td&gt;10 Gbps&lt;/td&gt;
					&lt;td&gt;100m&lt;/td&gt;
					&lt;td&gt;Data center&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Single-mode fiber&lt;/td&gt;
					&lt;td&gt;100+ Gbps&lt;/td&gt;
					&lt;td&gt;80+ km&lt;/td&gt;
					&lt;td&gt;Long-haul, WAN&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Multi-mode fiber&lt;/td&gt;
					&lt;td&gt;10-100 Gbps&lt;/td&gt;
					&lt;td&gt;300-550m&lt;/td&gt;
					&lt;td&gt;Data center&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Wi-Fi 6 (802.11ax)&lt;/td&gt;
					&lt;td&gt;9.6 Gbps (theoretical)&lt;/td&gt;
					&lt;td&gt;~30m indoor&lt;/td&gt;
					&lt;td&gt;Wireless LAN&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="data-link-layer-layer-2"&gt;Data Link Layer (Layer 2)&lt;a class="anchor" href="#data-link-layer-layer-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Responsible for &lt;strong&gt;local delivery&lt;/strong&gt; — getting frames from one device to another on the same network segment.&lt;/p&gt;</description></item><item><title>IP Addressing</title><link>https://kyngo.github.io/learning-paths/paths/networking/03-ip-addressing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/03-ip-addressing/</guid><description>&lt;h2 id="ipv4-addresses"&gt;IPv4 Addresses&lt;a class="anchor" href="#ipv4-addresses"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A 32-bit number that uniquely identifies a device on a network, written as four decimal octets:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ │ │ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └────┴───┴──┴── Each octet: 0-255 (8 bits)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Binary: 11000000.10101000.00000001.01100100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Decimal: 192 . 168 . 1 . 100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="subnetting-and-cidr"&gt;Subnetting and CIDR&lt;a class="anchor" href="#subnetting-and-cidr"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="cidr-notation"&gt;CIDR Notation&lt;a class="anchor" href="#cidr-notation"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;CIDR (Classless Inter-Domain Routing) notation: &lt;code&gt;IP/prefix_length&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The prefix identifies the &lt;strong&gt;network portion&lt;/strong&gt;, the remaining bits identify the &lt;strong&gt;host&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10.0.1.50/24
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── Network: 10.0.1 (first 24 bits — fixed)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── Host: .50 (last 8 bits — variable)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Network address: 10.0.1.0 (all host bits = 0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Broadcast: 10.0.1.255 (all host bits = 1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usable hosts: 10.0.1.1 – 10.0.1.254 (254 hosts)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="subnet-mask"&gt;Subnet Mask&lt;a class="anchor" href="#subnet-mask"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The subnet mask marks which bits are network (1) and which are host (0):&lt;/p&gt;</description></item><item><title>Routing</title><link>https://kyngo.github.io/learning-paths/paths/networking/04-routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/04-routing/</guid><description>&lt;h2 id="what-is-routing"&gt;What is Routing?&lt;a class="anchor" href="#what-is-routing"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Routing is the process of selecting a path for network traffic across one or more networks. Routers examine the destination IP address of each packet and decide where to forward it next.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 A[&amp;#34;Source&amp;lt;br/&amp;gt;192.168.1.10&amp;#34;] --&amp;gt; R1[&amp;#34;Router 1&amp;#34;]
 R1 --&amp;gt; R2[&amp;#34;Router 2&amp;#34;]
 R2 --&amp;gt; R3[&amp;#34;Router 3&amp;#34;]
 R3 --&amp;gt; B[&amp;#34;Destination&amp;lt;br/&amp;gt;203.0.113.50&amp;#34;]&lt;/pre&gt;&lt;p&gt;Each router makes an independent forwarding decision based on its routing table — it doesn&amp;rsquo;t know the full path, only the next hop.&lt;/p&gt;</description></item><item><title>Transport Layer: TCP vs UDP</title><link>https://kyngo.github.io/learning-paths/paths/networking/05-transport-tcp-udp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/05-transport-tcp-udp/</guid><description>&lt;h2 id="role-of-the-transport-layer"&gt;Role of the Transport Layer&lt;a class="anchor" href="#role-of-the-transport-layer"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The transport layer provides &lt;strong&gt;end-to-end communication&lt;/strong&gt; between applications on different hosts. It multiplexes connections using ports and (in TCP&amp;rsquo;s case) ensures reliable delivery.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 App1[&amp;#34;Web Browser (port 443)&amp;#34;] --&amp;gt; TL[&amp;#34;Transport Layer&amp;#34;]
 App2[&amp;#34;SSH Client (port 22)&amp;#34;] --&amp;gt; TL
 App3[&amp;#34;DNS Client (port 53)&amp;#34;] --&amp;gt; TL
 TL --&amp;gt; NL[&amp;#34;Network Layer (IP)&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="tcp-transmission-control-protocol"&gt;TCP (Transmission Control Protocol)&lt;a class="anchor" href="#tcp-transmission-control-protocol"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Reliable, ordered, connection-oriented. Used when every byte must arrive correctly.&lt;/p&gt;
&lt;h3 id="three-way-handshake"&gt;Three-Way Handshake&lt;a class="anchor" href="#three-way-handshake"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
 participant C as Client
 participant S as Server
 
 C-&amp;gt;&amp;gt;S: SYN (seq=100)
 S-&amp;gt;&amp;gt;C: SYN-ACK (seq=300, ack=101)
 C-&amp;gt;&amp;gt;S: ACK (seq=101, ack=301)
 Note over C,S: Connection established&lt;/pre&gt;&lt;h3 id="tcp-features"&gt;TCP Features&lt;a class="anchor" href="#tcp-features"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;Mechanism&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Reliability&lt;/td&gt;
					&lt;td&gt;Acknowledgments + retransmission&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ordering&lt;/td&gt;
					&lt;td&gt;Sequence numbers&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Flow control&lt;/td&gt;
					&lt;td&gt;Sliding window (receiver advertises capacity)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Congestion control&lt;/td&gt;
					&lt;td&gt;Slow start, congestion avoidance, fast retransmit&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Connection state&lt;/td&gt;
					&lt;td&gt;SYN → ESTABLISHED → FIN → CLOSED&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="tcp-connection-teardown"&gt;TCP Connection Teardown&lt;a class="anchor" href="#tcp-connection-teardown"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
 participant C as Client
 participant S as Server
 
 C-&amp;gt;&amp;gt;S: FIN (I&amp;#39;m done sending)
 S-&amp;gt;&amp;gt;C: ACK
 S-&amp;gt;&amp;gt;C: FIN (I&amp;#39;m done too)
 C-&amp;gt;&amp;gt;S: ACK
 Note over C: TIME_WAIT (2×MSL)&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;TIME_WAIT:&lt;/strong&gt; Client waits ~60s to ensure the final ACK arrives. This is why you see many TIME_WAIT connections on busy servers.&lt;/p&gt;</description></item><item><title>DNS (Domain Name System)</title><link>https://kyngo.github.io/learning-paths/paths/networking/06-dns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/06-dns/</guid><description>&lt;h2 id="what-is-dns"&gt;What is DNS?&lt;a class="anchor" href="#what-is-dns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DNS translates human-readable domain names into IP addresses. It&amp;rsquo;s a distributed, hierarchical database — the &amp;ldquo;phone book&amp;rdquo; of the internet.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 Browser[&amp;#34;www.example.com&amp;#34;] --&amp;gt;|DNS Query| Resolver[&amp;#34;DNS Resolver&amp;#34;]
 Resolver --&amp;gt;|&amp;#34;93.184.216.34&amp;#34;| Browser&lt;/pre&gt;&lt;p&gt;Without DNS, you&amp;rsquo;d need to memorize IP addresses for every website.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="dns-hierarchy"&gt;DNS Hierarchy&lt;a class="anchor" href="#dns-hierarchy"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Root[&amp;#34;. (Root)&amp;#34;]
 Root --&amp;gt; COM[&amp;#34;.com&amp;#34;]
 Root --&amp;gt; ORG[&amp;#34;.org&amp;#34;]
 Root --&amp;gt; NET[&amp;#34;.net&amp;#34;]
 COM --&amp;gt; Example[&amp;#34;example.com&amp;#34;]
 COM --&amp;gt; Google[&amp;#34;google.com&amp;#34;]
 Example --&amp;gt; WWW[&amp;#34;www.example.com&amp;#34;]
 Example --&amp;gt; API[&amp;#34;api.example.com&amp;#34;]&lt;/pre&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Level&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
					&lt;th&gt;Managed By&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Root&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;ICANN (13 root server clusters)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TLD&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.org&lt;/code&gt;, &lt;code&gt;.io&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Registry operators&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Domain&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;example.com&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Domain owner&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Subdomain&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;www.example.com&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Domain owner&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="dns-resolution-process"&gt;DNS Resolution Process&lt;a class="anchor" href="#dns-resolution-process"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
 participant B as Browser
 participant R as Recursive Resolver (ISP/8.8.8.8)
 participant Root as Root Server
 participant TLD as .com TLD Server
 participant Auth as example.com Authoritative

 B-&amp;gt;&amp;gt;R: What is www.example.com?
 R-&amp;gt;&amp;gt;Root: What is www.example.com?
 Root-&amp;gt;&amp;gt;R: I don&amp;#39;t know, ask .com TLD (ns1.verisign.com)
 R-&amp;gt;&amp;gt;TLD: What is www.example.com?
 TLD-&amp;gt;&amp;gt;R: Ask example.com nameservers (ns1.example.com)
 R-&amp;gt;&amp;gt;Auth: What is www.example.com?
 Auth-&amp;gt;&amp;gt;R: A record: 93.184.216.34 (TTL: 3600)
 R-&amp;gt;&amp;gt;B: 93.184.216.34 (cached for 1 hour)&lt;/pre&gt;&lt;h3 id="resolver-types"&gt;Resolver Types&lt;a class="anchor" href="#resolver-types"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Role&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Stub resolver&lt;/td&gt;
					&lt;td&gt;Client&amp;rsquo;s local DNS (asks recursive)&lt;/td&gt;
					&lt;td&gt;Your OS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Recursive resolver&lt;/td&gt;
					&lt;td&gt;Does the full lookup&lt;/td&gt;
					&lt;td&gt;8.8.8.8, 1.1.1.1, ISP DNS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Authoritative&lt;/td&gt;
					&lt;td&gt;Holds the actual records&lt;/td&gt;
					&lt;td&gt;ns1.example.com&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="dns-record-types"&gt;DNS Record Types&lt;a class="anchor" href="#dns-record-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;IPv4 address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;example.com → 93.184.216.34&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;AAAA&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;IPv6 address&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;example.com → 2606:2800:220:1:...&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;CNAME&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Alias to another name&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;www.example.com → example.com&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;MX&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Mail server&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;example.com → mail.example.com (pri 10)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;TXT&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Arbitrary text&lt;/td&gt;
					&lt;td&gt;SPF, DKIM, domain verification&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;NS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Nameserver delegation&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;example.com → ns1.example.com&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;SOA&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Zone authority metadata&lt;/td&gt;
					&lt;td&gt;Serial, refresh, retry, expire&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;SRV&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Service location&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;_http._tcp.example.com → web:8080&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PTR&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Reverse DNS (IP → name)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;34.216.184.93 → example.com&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;CAA&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Certificate authority authorization&lt;/td&gt;
					&lt;td&gt;Which CAs can issue certs&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="cname-rules"&gt;CNAME Rules&lt;a class="anchor" href="#cname-rules"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Cannot coexist with other records at the same name&lt;/li&gt;
&lt;li&gt;Cannot be used at the zone apex (&lt;code&gt;example.com&lt;/code&gt;) — only subdomains&lt;/li&gt;
&lt;li&gt;AWS Route 53 &amp;ldquo;Alias&amp;rdquo; records solve the apex limitation&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="ttl-time-to-live"&gt;TTL (Time To Live)&lt;a class="anchor" href="#ttl-time-to-live"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;How long resolvers cache a record (in seconds):&lt;/p&gt;</description></item><item><title>HTTP/HTTPS</title><link>https://kyngo.github.io/learning-paths/paths/networking/07-http-https/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/07-http-https/</guid><description>&lt;h2 id="what-is-http"&gt;What is HTTP?&lt;a class="anchor" href="#what-is-http"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;HTTP (HyperText Transfer Protocol) is the application-layer protocol for the web. It&amp;rsquo;s a request-response protocol — a client sends a request, a server returns a response.&lt;/p&gt;
&lt;pre class="mermaid"&gt;sequenceDiagram
 participant C as Client
 participant S as Server
 
 C-&amp;gt;&amp;gt;S: GET /api/users HTTP/1.1
 S-&amp;gt;&amp;gt;C: HTTP/1.1 200 OK + body&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="http-request-structure"&gt;HTTP Request Structure&lt;a class="anchor" href="#http-request-structure"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GET /api/users?page=1 HTTP/1.1 ← Request line
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host: api.example.com ← Headers
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Authorization: Bearer eyJhbG...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept: application/json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ← Empty line (end of headers)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ← Body (for POST/PUT)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="http-methods"&gt;HTTP Methods&lt;a class="anchor" href="#http-methods"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Method&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
					&lt;th style="text-align: center"&gt;Idempotent&lt;/th&gt;
					&lt;th style="text-align: center"&gt;Safe&lt;/th&gt;
					&lt;th style="text-align: center"&gt;Has Body&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GET&lt;/td&gt;
					&lt;td&gt;Retrieve resource&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;POST&lt;/td&gt;
					&lt;td&gt;Create resource&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;PUT&lt;/td&gt;
					&lt;td&gt;Replace resource entirely&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;PATCH&lt;/td&gt;
					&lt;td&gt;Partial update&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;DELETE&lt;/td&gt;
					&lt;td&gt;Remove resource&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;❌&lt;/td&gt;
					&lt;td style="text-align: center"&gt;Optional&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;HEAD&lt;/td&gt;
					&lt;td&gt;Get headers only (no body)&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;OPTIONS&lt;/td&gt;
					&lt;td&gt;Get allowed methods (CORS preflight)&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;✅&lt;/td&gt;
					&lt;td style="text-align: center"&gt;No&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Idempotent:&lt;/strong&gt; Multiple identical requests have the same effect as one.
&lt;strong&gt;Safe:&lt;/strong&gt; Doesn&amp;rsquo;t modify server state.&lt;/p&gt;</description></item><item><title>Network Security</title><link>https://kyngo.github.io/learning-paths/paths/networking/08-network-security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/08-network-security/</guid><description>&lt;h2 id="defense-in-depth"&gt;Defense in Depth&lt;a class="anchor" href="#defense-in-depth"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Network security uses multiple layers — if one fails, others still protect:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Internet[&amp;#34;Internet&amp;#34;]
 Internet --&amp;gt; Edge[&amp;#34;Edge: WAF, DDoS protection&amp;#34;]
 Edge --&amp;gt; FW[&amp;#34;Perimeter: Firewall&amp;#34;]
 FW --&amp;gt; SG[&amp;#34;Host: Security Groups / iptables&amp;#34;]
 SG --&amp;gt; App[&amp;#34;Application: Auth, input validation&amp;#34;]
 App --&amp;gt; Data[&amp;#34;Data: Encryption at rest&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="firewalls"&gt;Firewalls&lt;a class="anchor" href="#firewalls"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="types"&gt;Types&lt;a class="anchor" href="#types"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Layer&lt;/th&gt;
					&lt;th&gt;What It Inspects&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Packet filter&lt;/td&gt;
					&lt;td&gt;3-4&lt;/td&gt;
					&lt;td&gt;IP, port, protocol&lt;/td&gt;
					&lt;td&gt;iptables, ACLs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Stateful&lt;/td&gt;
					&lt;td&gt;3-4&lt;/td&gt;
					&lt;td&gt;Connection state + packets&lt;/td&gt;
					&lt;td&gt;AWS Security Groups&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Application (WAF)&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;HTTP content, patterns&lt;/td&gt;
					&lt;td&gt;AWS WAF, Cloudflare&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Next-gen (NGFW)&lt;/td&gt;
					&lt;td&gt;3-7&lt;/td&gt;
					&lt;td&gt;Deep packet inspection&lt;/td&gt;
					&lt;td&gt;Palo Alto, Fortinet&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="stateful-vs-stateless"&gt;Stateful vs Stateless&lt;a class="anchor" href="#stateful-vs-stateless"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Aspect&lt;/th&gt;
					&lt;th&gt;Stateless (NACLs)&lt;/th&gt;
					&lt;th&gt;Stateful (Security Groups)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Tracks connections&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Return traffic&lt;/td&gt;
					&lt;td&gt;Must explicitly allow&lt;/td&gt;
					&lt;td&gt;Automatically allowed&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Rule evaluation&lt;/td&gt;
					&lt;td&gt;All rules, in order&lt;/td&gt;
					&lt;td&gt;All rules, most permissive wins&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Use case&lt;/td&gt;
					&lt;td&gt;Subnet-level control&lt;/td&gt;
					&lt;td&gt;Instance-level control&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="security-group-example-aws"&gt;Security Group Example (AWS)&lt;a class="anchor" href="#security-group-example-aws"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Inbound Rules:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Allow TCP 443 from 0.0.0.0/0 (HTTPS from anywhere)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Allow TCP 22 from 10.0.0.0/16 (SSH from VPC only)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Outbound Rules:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Allow All traffic to 0.0.0.0/0 (default — allow all outbound)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Principle of least privilege:&lt;/strong&gt; Only open ports that are needed, only from sources that need access.&lt;/p&gt;</description></item><item><title>Load Balancing and Reverse Proxies</title><link>https://kyngo.github.io/learning-paths/paths/networking/09-load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/09-load-balancing/</guid><description>&lt;h2 id="why-load-balance"&gt;Why Load Balance?&lt;a class="anchor" href="#why-load-balance"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A single server has finite capacity. Load balancing distributes traffic across multiple servers to achieve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High availability&lt;/strong&gt; — if one server fails, others handle traffic&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt; — add servers to handle more load&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; — distribute work evenly&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 C1[&amp;#34;Client&amp;#34;] --&amp;gt; LB[&amp;#34;Load Balancer&amp;#34;]
 C2[&amp;#34;Client&amp;#34;] --&amp;gt; LB
 C3[&amp;#34;Client&amp;#34;] --&amp;gt; LB
 
 LB --&amp;gt; S1[&amp;#34;Server 1&amp;#34;]
 LB --&amp;gt; S2[&amp;#34;Server 2&amp;#34;]
 LB --&amp;gt; S3[&amp;#34;Server 3&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="load-balancing-algorithms"&gt;Load Balancing Algorithms&lt;a class="anchor" href="#load-balancing-algorithms"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Algorithm&lt;/th&gt;
					&lt;th&gt;How It Works&lt;/th&gt;
					&lt;th&gt;Best For&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Round Robin&lt;/td&gt;
					&lt;td&gt;Rotate sequentially&lt;/td&gt;
					&lt;td&gt;Equal-capacity servers&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Weighted Round Robin&lt;/td&gt;
					&lt;td&gt;Rotate with weights (2:1:1)&lt;/td&gt;
					&lt;td&gt;Mixed-capacity servers&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Least Connections&lt;/td&gt;
					&lt;td&gt;Send to server with fewest active connections&lt;/td&gt;
					&lt;td&gt;Variable request duration&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Least Response Time&lt;/td&gt;
					&lt;td&gt;Send to fastest-responding server&lt;/td&gt;
					&lt;td&gt;Heterogeneous backends&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;IP Hash&lt;/td&gt;
					&lt;td&gt;Hash client IP → consistent server&lt;/td&gt;
					&lt;td&gt;Session affinity without cookies&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Random&lt;/td&gt;
					&lt;td&gt;Random selection&lt;/td&gt;
					&lt;td&gt;Simple, effective at scale&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="choosing-an-algorithm"&gt;Choosing an Algorithm&lt;a class="anchor" href="#choosing-an-algorithm"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Q1{&amp;#34;All servers equal capacity?&amp;#34;}
 Q1 --&amp;gt;|Yes| Q2{&amp;#34;Requests take similar time?&amp;#34;}
 Q1 --&amp;gt;|No| WRR[&amp;#34;Weighted Round Robin&amp;#34;]
 Q2 --&amp;gt;|Yes| RR[&amp;#34;Round Robin&amp;#34;]
 Q2 --&amp;gt;|No| LC[&amp;#34;Least Connections&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="layer-4-vs-layer-7-load-balancing"&gt;Layer 4 vs Layer 7 Load Balancing&lt;a class="anchor" href="#layer-4-vs-layer-7-load-balancing"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Aspect&lt;/th&gt;
					&lt;th&gt;Layer 4 (Transport)&lt;/th&gt;
					&lt;th&gt;Layer 7 (Application)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Inspects&lt;/td&gt;
					&lt;td&gt;IP + Port&lt;/td&gt;
					&lt;td&gt;HTTP headers, URL, cookies&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Speed&lt;/td&gt;
					&lt;td&gt;Faster (less processing)&lt;/td&gt;
					&lt;td&gt;Slower (deep inspection)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Routing decisions&lt;/td&gt;
					&lt;td&gt;Based on IP/port only&lt;/td&gt;
					&lt;td&gt;Based on URL path, headers, content&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;TLS termination&lt;/td&gt;
					&lt;td&gt;Pass-through or terminate&lt;/td&gt;
					&lt;td&gt;Always terminates&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Use case&lt;/td&gt;
					&lt;td&gt;TCP/UDP services, databases&lt;/td&gt;
					&lt;td&gt;Web applications, APIs&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="layer-7-routing-examples"&gt;Layer 7 Routing Examples&lt;a class="anchor" href="#layer-7-routing-examples"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/api/* → API server pool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/static/* → CDN or static server pool
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/admin/* → Admin server (restricted)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host: mobile.* → Mobile-optimized servers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="aws-load-balancer-types"&gt;AWS Load Balancer Types&lt;a class="anchor" href="#aws-load-balancer-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Layer&lt;/th&gt;
					&lt;th&gt;Protocols&lt;/th&gt;
					&lt;th&gt;Use Case&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;ALB (Application)&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;HTTP, HTTPS, gRPC&lt;/td&gt;
					&lt;td&gt;Web apps, APIs, microservices&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NLB (Network)&lt;/td&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;TCP, UDP, TLS&lt;/td&gt;
					&lt;td&gt;High performance, static IPs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CLB (Classic)&lt;/td&gt;
					&lt;td&gt;4/7&lt;/td&gt;
					&lt;td&gt;HTTP, TCP&lt;/td&gt;
					&lt;td&gt;Legacy (avoid for new projects)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="health-checks"&gt;Health Checks&lt;a class="anchor" href="#health-checks"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Load balancers must know which backends are healthy:&lt;/p&gt;</description></item><item><title>Troubleshooting Tools</title><link>https://kyngo.github.io/learning-paths/paths/networking/10-troubleshooting-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/10-troubleshooting-tools/</guid><description>&lt;h2 id="systematic-approach"&gt;Systematic Approach&lt;a class="anchor" href="#systematic-approach"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Network troubleshooting follows the layers — start at the bottom and work up:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 A[&amp;#34;Can&amp;#39;t reach service&amp;#34;] --&amp;gt; B{&amp;#34;Can ping IP?&amp;#34;}
 B --&amp;gt;|No| C{&amp;#34;Can ping gateway?&amp;#34;}
 C --&amp;gt;|No| D[&amp;#34;Layer 1-2: Cable, NIC, switch&amp;#34;]
 C --&amp;gt;|Yes| E[&amp;#34;Layer 3: Routing issue&amp;#34;]
 B --&amp;gt;|Yes| F{&amp;#34;Can resolve DNS?&amp;#34;}
 F --&amp;gt;|No| G[&amp;#34;DNS issue&amp;#34;]
 F --&amp;gt;|Yes| H{&amp;#34;Port open? (nc/telnet)&amp;#34;}
 H --&amp;gt;|No| I[&amp;#34;Layer 4: Firewall or service down&amp;#34;]
 H --&amp;gt;|Yes| J{&amp;#34;App responds correctly?&amp;#34;}
 J --&amp;gt;|No| K[&amp;#34;Layer 7: Application issue&amp;#34;]
 J --&amp;gt;|Yes| L[&amp;#34;Client-side issue&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="ping--basic-connectivity"&gt;ping — Basic Connectivity&lt;a class="anchor" href="#ping--basic-connectivity"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tests Layer 3 (IP) reachability using ICMP echo:&lt;/p&gt;</description></item><item><title>Cloud Networking</title><link>https://kyngo.github.io/learning-paths/paths/networking/11-cloud-networking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/11-cloud-networking/</guid><description>&lt;h2 id="from-physical-to-virtual"&gt;From Physical to Virtual&lt;a class="anchor" href="#from-physical-to-virtual"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cloud networking uses the same concepts as physical networking (subnets, routing, firewalls) but everything is software-defined and API-driven.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Physical&lt;/th&gt;
					&lt;th&gt;Cloud Equivalent&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Router&lt;/td&gt;
					&lt;td&gt;Route table&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Firewall&lt;/td&gt;
					&lt;td&gt;Security group / NACL&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Switch/VLAN&lt;/td&gt;
					&lt;td&gt;Subnet&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;NAT device&lt;/td&gt;
					&lt;td&gt;NAT Gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Physical network&lt;/td&gt;
					&lt;td&gt;VPC&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Leased line&lt;/td&gt;
					&lt;td&gt;Direct Connect&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;VPN appliance&lt;/td&gt;
					&lt;td&gt;VPN Gateway&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="vpc-virtual-private-cloud"&gt;VPC (Virtual Private Cloud)&lt;a class="anchor" href="#vpc-virtual-private-cloud"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An isolated virtual network within a cloud provider&amp;rsquo;s infrastructure:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 subgraph VPC[&amp;#34;VPC: 10.0.0.0/16&amp;#34;]
 subgraph AZa[&amp;#34;Availability Zone A&amp;#34;]
 PubA[&amp;#34;Public Subnet&amp;lt;br/&amp;gt;10.0.1.0/24&amp;#34;]
 PrivA[&amp;#34;Private Subnet&amp;lt;br/&amp;gt;10.0.10.0/24&amp;#34;]
 end
 subgraph AZb[&amp;#34;Availability Zone B&amp;#34;]
 PubB[&amp;#34;Public Subnet&amp;lt;br/&amp;gt;10.0.2.0/24&amp;#34;]
 PrivB[&amp;#34;Private Subnet&amp;lt;br/&amp;gt;10.0.11.0/24&amp;#34;]
 end
 end
 
 IGW[&amp;#34;Internet Gateway&amp;#34;] --&amp;gt; PubA
 IGW --&amp;gt; PubB
 PubA --&amp;gt; NATGW[&amp;#34;NAT Gateway&amp;#34;]
 NATGW --&amp;gt; PrivA
 NATGW --&amp;gt; PrivB
 Internet[&amp;#34;Internet&amp;#34;] --&amp;gt; IGW&lt;/pre&gt;&lt;h3 id="vpc-design-decisions"&gt;VPC Design Decisions&lt;a class="anchor" href="#vpc-design-decisions"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Decision&lt;/th&gt;
					&lt;th&gt;Recommendation&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CIDR size&lt;/td&gt;
					&lt;td&gt;/16 (65K IPs) — room to grow&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Subnet size&lt;/td&gt;
					&lt;td&gt;/24 (251 usable in AWS) per AZ per tier&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AZ count&lt;/td&gt;
					&lt;td&gt;Minimum 2 for high availability&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Tiers&lt;/td&gt;
					&lt;td&gt;Public, Private, Data (3 tiers)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="public-vs-private-subnets"&gt;Public vs Private Subnets&lt;a class="anchor" href="#public-vs-private-subnets"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Aspect&lt;/th&gt;
					&lt;th&gt;Public Subnet&lt;/th&gt;
					&lt;th&gt;Private Subnet&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Route to internet&lt;/td&gt;
					&lt;td&gt;Via Internet Gateway&lt;/td&gt;
					&lt;td&gt;Via NAT Gateway&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Inbound from internet&lt;/td&gt;
					&lt;td&gt;Yes (if SG allows)&lt;/td&gt;
					&lt;td&gt;No&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Public IP&lt;/td&gt;
					&lt;td&gt;Auto-assigned or Elastic IP&lt;/td&gt;
					&lt;td&gt;None&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Contains&lt;/td&gt;
					&lt;td&gt;Load balancers, bastion hosts&lt;/td&gt;
					&lt;td&gt;App servers, databases&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="route-tables"&gt;Route Tables&lt;a class="anchor" href="#route-tables"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every subnet has an associated route table:&lt;/p&gt;</description></item><item><title>Subnetting</title><link>https://kyngo.github.io/learning-paths/paths/networking/12-subnetting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/networking/12-subnetting/</guid><description>&lt;h2 id="what-is-subnetting"&gt;What Is Subnetting?&lt;a class="anchor" href="#what-is-subnetting"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Subnetting divides a large IP network into smaller, logical sub-networks. It&amp;rsquo;s one of the most fundamental skills in networking — every network engineer, cloud architect, and system administrator must understand it fluently.&lt;/p&gt;
&lt;h3 id="why-subnet"&gt;Why Subnet?&lt;a class="anchor" href="#why-subnet"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Reason&lt;/th&gt;
					&lt;th&gt;Explanation&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Reduce broadcast domains&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Fewer hosts receiving every broadcast = less noise, better performance&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Improve security&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Isolate sensitive systems (databases, management) from general traffic&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Efficient IP allocation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Don&amp;rsquo;t waste a /16 (65,534 hosts) when you only need 30&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Routing efficiency&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Smaller, summarizable networks reduce routing table size&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Organizational structure&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Map network topology to departments, floors, functions&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="ip-address-structure"&gt;IP Address Structure&lt;a class="anchor" href="#ip-address-structure"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An IPv4 address is 32 bits, written as four octets in dotted-decimal:&lt;/p&gt;</description></item></channel></rss>