<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Micheal Angelo</title>
    <description>The latest articles on DEV Community by Micheal Angelo (@micheal_angelo_41cea4e81a).</description>
    <link>https://dev.to/micheal_angelo_41cea4e81a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3692427%2F335051a9-3e2a-438a-8022-aff118532b01.jpg</url>
      <title>DEV Community: Micheal Angelo</title>
      <link>https://dev.to/micheal_angelo_41cea4e81a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/micheal_angelo_41cea4e81a"/>
    <language>en</language>
    <item>
      <title>From Home Networking to Enterprise Networking: What Changes Behind the Scenes?</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sat, 20 Jun 2026 07:26:15 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/from-home-networking-to-enterprise-networking-what-changes-behind-the-scenes-1h6l</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/from-home-networking-to-enterprise-networking-what-changes-behind-the-scenes-1h6l</guid>
      <description>&lt;h1&gt;
  
  
  From Home Networking to Enterprise Networking: What Changes Behind the Scenes?
&lt;/h1&gt;

&lt;p&gt;For a long time, networking felt relatively straightforward.&lt;/p&gt;

&lt;p&gt;A device connects to a router, the router connects to the Internet, and traffic eventually reaches its destination.&lt;/p&gt;

&lt;p&gt;A simplified view looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Router
   ↓
ISP
   ↓
Internet
   ↓
Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While studying networking, I became curious about how enterprise environments work.&lt;/p&gt;

&lt;p&gt;Corporate devices often have additional security software installed, VPN clients are common, and traffic sometimes appears to follow entirely different paths than it does on a home network.&lt;/p&gt;

&lt;p&gt;This raised an interesting question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What actually changes when networking moves from a home environment to an enterprise environment?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem Organizations Are Trying To Solve
&lt;/h2&gt;

&lt;p&gt;Home networks are usually optimized for convenience.&lt;/p&gt;

&lt;p&gt;Enterprise networks have a different set of priorities.&lt;/p&gt;

&lt;p&gt;Organizations need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protect sensitive information&lt;/li&gt;
&lt;li&gt;Restrict access to certain websites&lt;/li&gt;
&lt;li&gt;Monitor traffic for security threats&lt;/li&gt;
&lt;li&gt;Enforce compliance requirements&lt;/li&gt;
&lt;li&gt;Control how applications communicate&lt;/li&gt;
&lt;li&gt;Route traffic through approved paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simply allowing devices to communicate directly with the Internet is often insufficient.&lt;/p&gt;

&lt;p&gt;Additional security layers are introduced to enforce these requirements.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvipjbbxeuw7suailq5vd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvipjbbxeuw7suailq5vd.png" alt=" " width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is A Secure Web Gateway?
&lt;/h2&gt;

&lt;p&gt;One common component in enterprise environments is a &lt;strong&gt;Secure Web Gateway (SWG)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of traffic flowing directly to the Internet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;traffic may follow a path like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Security Client
   ↓
Secure Web Gateway
   ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gateway acts as an intermediary.&lt;/p&gt;

&lt;p&gt;Before traffic reaches its destination, the gateway can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply security policies&lt;/li&gt;
&lt;li&gt;Filter websites&lt;/li&gt;
&lt;li&gt;Inspect requests&lt;/li&gt;
&lt;li&gt;Generate logs&lt;/li&gt;
&lt;li&gt;Enforce compliance requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The user still experiences a normal browsing session, but additional checks occur behind the scenes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Identity Matters More Than MAC Addresses
&lt;/h2&gt;

&lt;p&gt;One misconception many beginners have is that organizations identify users primarily through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MAC addresses&lt;/li&gt;
&lt;li&gt;Local IP addresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In reality, enterprise environments usually rely on richer forms of identity.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User authentication&lt;/li&gt;
&lt;li&gt;Device certificates&lt;/li&gt;
&lt;li&gt;Security agents&lt;/li&gt;
&lt;li&gt;Corporate identity providers&lt;/li&gt;
&lt;li&gt;Session information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows an organization to distinguish between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An approved corporate device&lt;/li&gt;
&lt;li&gt;A personal device&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;even when both devices are connected to the same home Wi-Fi network.&lt;/p&gt;

&lt;p&gt;The decision is often based on identity and trust rather than simply an IP address.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Traffic Steering
&lt;/h2&gt;

&lt;p&gt;One of the more interesting concepts in enterprise networking is &lt;strong&gt;traffic steering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The basic idea is simple:&lt;/p&gt;

&lt;p&gt;Different types of traffic may follow different paths.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Web Browsing
        ↓
Gateway A

Internal Applications
        ↓
Gateway B

Client Systems
        ↓
Gateway C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The path can be chosen based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User identity&lt;/li&gt;
&lt;li&gt;Application type&lt;/li&gt;
&lt;li&gt;Destination&lt;/li&gt;
&lt;li&gt;Security policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful analogy is an airport.&lt;/p&gt;

&lt;p&gt;Passengers may enter through the same building, but different groups are routed through different checkpoints depending on where they are going.&lt;/p&gt;

&lt;p&gt;Enterprise networks often work in a similar way.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F465zojyh2alezlpe89c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F465zojyh2alezlpe89c1.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Network Behavior Can Change Over Time
&lt;/h2&gt;

&lt;p&gt;One observation that initially confused me was that network behavior sometimes changes without any visible action from the user.&lt;/p&gt;

&lt;p&gt;A website that was inaccessible one day may suddenly become accessible later.&lt;/p&gt;

&lt;p&gt;This often happens because enterprise security platforms periodically receive updated policies.&lt;/p&gt;

&lt;p&gt;Those policies may modify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access permissions&lt;/li&gt;
&lt;li&gt;Routing behavior&lt;/li&gt;
&lt;li&gt;Security controls&lt;/li&gt;
&lt;li&gt;Gateway selection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, the path traffic follows today may not be identical to the path it follows next month.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where VPNs Fit Into The Picture
&lt;/h2&gt;

&lt;p&gt;Before learning more about networking, I assumed traffic always followed a simple path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Router
   ↓
Internet
   ↓
Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;VPNs introduce an additional layer.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Encrypted Tunnel
   ↓
VPN Gateway
   ↓
Destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The VPN gateway becomes a trusted entry point into an organization's network.&lt;/p&gt;

&lt;p&gt;Instead of communicating directly with internal resources, traffic first reaches the VPN infrastructure.&lt;/p&gt;

&lt;p&gt;From there it is forwarded according to organizational policies.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhtm2wtsanfye7j4dm3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyhtm2wtsanfye7j4dm3r.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  One Device, Multiple IP Addresses
&lt;/h2&gt;

&lt;p&gt;Another important concept is that a device may be associated with multiple IP addresses simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local IP Address
&lt;/h3&gt;

&lt;p&gt;Assigned by the home router.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.x.x
10.x.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used only inside the local network.&lt;/p&gt;




&lt;h3&gt;
  
  
  Public IP Address
&lt;/h3&gt;

&lt;p&gt;Assigned by the Internet Service Provider.&lt;/p&gt;

&lt;p&gt;This is typically what external websites see.&lt;/p&gt;




&lt;h3&gt;
  
  
  VPN Address
&lt;/h3&gt;

&lt;p&gt;Assigned by the VPN infrastructure.&lt;/p&gt;

&lt;p&gt;When connected to organizational resources, this address may be used instead of the public ISP address.&lt;/p&gt;

&lt;p&gt;Understanding these different layers helps explain why network traffic can appear differently depending on where it is observed.&lt;/p&gt;




&lt;h2&gt;
  
  
  DNS Still Plays A Critical Role
&lt;/h2&gt;

&lt;p&gt;Regardless of whether traffic is flowing through a home network or an enterprise network, DNS remains fundamental.&lt;/p&gt;

&lt;p&gt;Humans prefer names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Computers require IP addresses.&lt;/p&gt;

&lt;p&gt;DNS performs the translation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
        ↓
IP Address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One useful command is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows you to observe how names are resolved into addresses.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building On Earlier Networking Concepts
&lt;/h2&gt;

&lt;p&gt;While learning networking, I spent a lot of time understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ARP&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;ICMP&lt;/li&gt;
&lt;li&gt;IP&lt;/li&gt;
&lt;li&gt;MAC Addresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These protocols solve lower-level networking problems.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;ARP asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I know the IP address. What is the MAC address?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DHCP asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What IP address should I use?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DNS asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What IP address corresponds to this domain name?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enterprise networking introduces a different set of questions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Who is the user?&lt;/p&gt;

&lt;p&gt;Is this device trusted?&lt;/p&gt;

&lt;p&gt;Which policy applies?&lt;/p&gt;

&lt;p&gt;Which gateway should handle this traffic?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The focus shifts from simple connectivity to identity, security, and policy enforcement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;One thing that became clear while learning networking is that enterprise networking is not a completely different world.&lt;/p&gt;

&lt;p&gt;The same fundamentals still exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;TCP/IP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What changes is the addition of security, identity, and policy layers on top of those fundamentals.&lt;/p&gt;

&lt;p&gt;The more I studied packet flows and network paths, the easier these concepts became to understand.&lt;/p&gt;

&lt;p&gt;Rather than memorizing protocols individually, it became much more useful to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where is this packet going, and why is it taking that path?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That simple question often reveals how the entire system works.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>devops</category>
      <category>linux</category>
      <category>cloud</category>
    </item>
    <item>
      <title>One Public IP, Many Devices: How Your Router Knows Where Replies Belong</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sat, 13 Jun 2026 17:26:18 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/one-public-ip-many-devices-how-your-router-knows-where-replies-belong-2o30</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/one-public-ip-many-devices-how-your-router-knows-where-replies-belong-2o30</guid>
      <description>&lt;p&gt;After learning about DHCP, ARP, DNS, TCP, and NAT, I ran into a question that completely changed how I thought about home networking.&lt;/p&gt;

&lt;p&gt;I already understood the basics of NAT.&lt;/p&gt;

&lt;p&gt;My laptop might have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while my router has a public address such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router replaces the private address with its public address before sending packets to the Internet.&lt;/p&gt;

&lt;p&gt;That part made sense.&lt;/p&gt;

&lt;p&gt;But then a new question appeared.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Imagine a home network with three devices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
192.168.1.100

Phone
192.168.1.101

Tablet
192.168.1.102
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All three devices are browsing websites simultaneously.&lt;/p&gt;

&lt;p&gt;After NAT, every packet appears to originate from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To the Internet, all three devices look identical.&lt;/p&gt;

&lt;p&gt;Which raises an obvious question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When replies come back, how does the router know which device should receive them?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where ports become extremely important.&lt;/p&gt;




&lt;h2&gt;
  
  
  Think of NAT Like an Apartment Building
&lt;/h2&gt;

&lt;p&gt;Imagine a large apartment building.&lt;/p&gt;

&lt;p&gt;The building has a single address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the building are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Apartment 101
Apartment 102
Apartment 103
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The public IP address is the building.&lt;/p&gt;

&lt;p&gt;The ports are the apartment numbers.&lt;/p&gt;

&lt;p&gt;Without apartment numbers, a package arriving at the building could not be delivered to the correct resident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Insert Figure 1: Apartment Building Analogy Here]&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A Real Example
&lt;/h2&gt;

&lt;p&gt;Suppose we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop:
192.168.1.100

Phone:
192.168.1.101

Router:
49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The laptop performs a DNS lookup.&lt;/p&gt;

&lt;p&gt;Its operating system chooses a temporary source port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The packet looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP:
192.168.1.100

Source Port:
53001

Destination IP:
8.8.8.8

Destination Port:
53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Phone Does the Same Thing
&lt;/h2&gt;

&lt;p&gt;Now the phone also performs a DNS lookup.&lt;/p&gt;

&lt;p&gt;It chooses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as well.&lt;/p&gt;

&lt;p&gt;The packet becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP:
192.168.1.101

Source Port:
53001

Destination IP:
8.8.8.8

Destination Port:
53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first glance this looks problematic.&lt;/p&gt;

&lt;p&gt;Both devices chose the same source port.&lt;/p&gt;

&lt;p&gt;Surprisingly, this is completely valid.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because their source IP addresses are different.&lt;/p&gt;

&lt;p&gt;Inside the LAN they are still unique connections.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Router Receives the First Packet
&lt;/h2&gt;

&lt;p&gt;The router sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100:53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and creates a translation entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100:53001
        ↓
49.43.12.10:40001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something interesting.&lt;/p&gt;

&lt;p&gt;The router did not keep:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It selected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;40001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead.&lt;/p&gt;

&lt;p&gt;This becomes the public-facing connection.&lt;/p&gt;

&lt;p&gt;The outgoing packet now looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP:
49.43.12.10

Source Port:
40001

Destination IP:
8.8.8.8

Destination Port:
53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Router Receives the Second Packet
&lt;/h2&gt;

&lt;p&gt;Now the phone's packet arrives.&lt;/p&gt;

&lt;p&gt;The router creates another entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.101:53001
        ↓
49.43.12.10:40002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice what changed.&lt;/p&gt;

&lt;p&gt;The public IP stayed the same.&lt;/p&gt;

&lt;p&gt;The public port changed.&lt;/p&gt;

&lt;p&gt;The translation table now contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100:53001
        ↓
49.43.12.10:40001

192.168.1.101:53001
        ↓
49.43.12.10:40002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This table is the real magic behind modern home networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Insert Figure 2: PAT Translation Table Here]&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Replies Return
&lt;/h2&gt;

&lt;p&gt;Google sends a reply to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10:40001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router checks its translation table.&lt;/p&gt;

&lt;p&gt;It finds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;40001
        ↓
192.168.1.100:53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The packet is rewritten and delivered to the laptop.&lt;/p&gt;




&lt;p&gt;A second reply arrives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10:40002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router checks the table again.&lt;/p&gt;

&lt;p&gt;It finds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;40002
        ↓
192.168.1.101:53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The packet is forwarded to the phone.&lt;/p&gt;

&lt;p&gt;Both devices receive the correct response even though they share the same public IP address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[Insert Figure 3: Reply Mapping Diagram Here]&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  This Is Actually PAT
&lt;/h2&gt;

&lt;p&gt;Most people casually refer to this process as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More specifically, what is happening here is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PAT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which stands for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port Address Translation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another common name is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAT Overload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;because many devices are sharing a single public IP address.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why PAT Is So Powerful
&lt;/h2&gt;

&lt;p&gt;A port number can range from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;65535
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;65,000+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;possible ports.&lt;/p&gt;

&lt;p&gt;That means thousands of simultaneous connections can share the same public IP address.&lt;/p&gt;

&lt;p&gt;Without PAT, home networking as we know it would be much more difficult.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does the Router Actually Store?
&lt;/h2&gt;

&lt;p&gt;The router does not simply remember IP addresses.&lt;/p&gt;

&lt;p&gt;It maintains a connection table.&lt;/p&gt;

&lt;p&gt;A simplified entry might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inside IP:
192.168.1.100

Inside Port:
53001

Outside IP:
49.43.12.10

Outside Port:
40001

Destination IP:
8.8.8.8

Destination Port:
53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Real routers store additional information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protocol&lt;/li&gt;
&lt;li&gt;TCP state&lt;/li&gt;
&lt;li&gt;Timeouts&lt;/li&gt;
&lt;li&gt;Flags&lt;/li&gt;
&lt;li&gt;Session metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what allows thousands of connections to coexist simultaneously.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Happens When the Connection Ends?
&lt;/h2&gt;

&lt;p&gt;Suppose the browser tab is closed.&lt;/p&gt;

&lt;p&gt;Eventually the TCP session terminates.&lt;/p&gt;

&lt;p&gt;The router notices.&lt;/p&gt;

&lt;p&gt;The translation entry is removed.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10:40001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;becomes available for reuse.&lt;/p&gt;

&lt;p&gt;This process happens continuously behind the scenes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Random Incoming Traffic Gets Dropped
&lt;/h2&gt;

&lt;p&gt;Imagine a random server sends a packet to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10:45000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router checks its translation table.&lt;/p&gt;

&lt;p&gt;No matching entry exists.&lt;/p&gt;

&lt;p&gt;The router effectively says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I don't know who requested this connection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The packet is dropped.&lt;/p&gt;

&lt;p&gt;This behavior is one reason home routers provide a basic level of protection against unsolicited traffic.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Insight That Changed My Mental Model
&lt;/h2&gt;

&lt;p&gt;Initially I thought NAT was simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Private IP
        ↓
Public IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is only part of the story.&lt;/p&gt;

&lt;p&gt;The real magic is the translation table.&lt;/p&gt;

&lt;p&gt;The router continuously maintains mappings between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Private IP, Private Port)
                ↔
(Public IP, Public Port)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for every active connection.&lt;/p&gt;

&lt;p&gt;That is how one public IP address can support dozens of devices and thousands of simultaneous network conversations.&lt;/p&gt;

&lt;p&gt;And once this idea clicked, ports stopped feeling like random numbers and started feeling like apartment numbers in a giant building.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>devops</category>
      <category>linux</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Following a Packet: What Really Happens Between Opening Your Laptop</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:30:24 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/following-a-packet-what-really-happens-between-opening-your-laptop-4fc</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/following-a-packet-what-really-happens-between-opening-your-laptop-4fc</guid>
      <description>&lt;p&gt;For a long time, networking felt like a collection of unrelated acronyms.&lt;/p&gt;

&lt;p&gt;DHCP.&lt;/p&gt;

&lt;p&gt;ARP.&lt;/p&gt;

&lt;p&gt;DNS.&lt;/p&gt;

&lt;p&gt;TCP.&lt;/p&gt;

&lt;p&gt;IP.&lt;/p&gt;

&lt;p&gt;NAT.&lt;/p&gt;

&lt;p&gt;VPN.&lt;/p&gt;

&lt;p&gt;I could explain each one individually.&lt;/p&gt;

&lt;p&gt;But if someone had asked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What actually happens when you open a website?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I would have struggled to answer.&lt;/p&gt;

&lt;p&gt;The turning point came when I stopped learning protocols individually and started following a single packet through the network.&lt;/p&gt;

&lt;p&gt;This article follows that packet from the moment a laptop connects to Wi-Fi until a webpage finally appears in the browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before We Begin: Data, Segments, Packets, and Frames
&lt;/h2&gt;

&lt;p&gt;One of the biggest beginner misconceptions is that everything is called a packet.&lt;/p&gt;

&lt;p&gt;Technically, that is not true.&lt;/p&gt;

&lt;p&gt;As data moves through the networking stack, its name changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Layer
&lt;/h3&gt;

&lt;p&gt;The browser creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this stage it is simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Transport Layer
&lt;/h3&gt;

&lt;p&gt;TCP adds a header containing information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source Port&lt;/li&gt;
&lt;li&gt;Destination Port&lt;/li&gt;
&lt;li&gt;Sequence Number&lt;/li&gt;
&lt;li&gt;Acknowledgement Number&lt;/li&gt;
&lt;li&gt;Flags&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TCP Header + Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Segment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Network Layer
&lt;/h3&gt;

&lt;p&gt;IP adds another header containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source IP Address&lt;/li&gt;
&lt;li&gt;Destination IP Address&lt;/li&gt;
&lt;li&gt;TTL&lt;/li&gt;
&lt;li&gt;Protocol&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Header + Segment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Packet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Data Link Layer
&lt;/h3&gt;

&lt;p&gt;Ethernet or Wi-Fi adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source MAC Address&lt;/li&gt;
&lt;li&gt;Destination MAC Address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ethernet Header + Packet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frame
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;The final structure looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frame
└── Packet
    └── Segment
        └── Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This process is known as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Encapsulation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every packet on the Internet begins this way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Our Example Network
&lt;/h2&gt;

&lt;p&gt;To keep things simple, imagine the following setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Laptop
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAC = BB:BB:BB:BB:BB:BB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Router
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LAN IP  = 192.168.1.1
LAN MAC = AA:AA:AA:AA:AA:AA
Public IP = 49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DNS Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Website
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
104.26.10.50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's follow the packet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Laptop Boots
&lt;/h2&gt;

&lt;p&gt;Immediately after startup, the laptop knows surprisingly little.&lt;/p&gt;

&lt;p&gt;It knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My MAC Address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it does not yet know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP Address&lt;/li&gt;
&lt;li&gt;Default Gateway&lt;/li&gt;
&lt;li&gt;DNS Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those must be discovered.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Connecting to Wi-Fi
&lt;/h2&gt;

&lt;p&gt;The laptop successfully joins the wireless network.&lt;/p&gt;

&lt;p&gt;At this point many people assume networking is ready.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;The laptop still lacks an IP address.&lt;/p&gt;

&lt;p&gt;Without one, meaningful communication cannot occur.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: DHCP Gives the Laptop an Identity
&lt;/h2&gt;

&lt;p&gt;The laptop broadcasts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DHCP Discover
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is there a DHCP server available?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The router responds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DHCP Offer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;containing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address = 192.168.1.100
Gateway    = 192.168.1.1
DNS Server = 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The laptop accepts.&lt;/p&gt;

&lt;p&gt;Now it finally knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who am I?
Where should I send traffic?
Which DNS server should I use?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DHCP has completed its job.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: The User Opens a Website
&lt;/h2&gt;

&lt;p&gt;Suppose the user enters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser immediately faces a problem.&lt;/p&gt;

&lt;p&gt;It knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but websites are reached using IP addresses.&lt;/p&gt;

&lt;p&gt;The browser asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What IP address belongs to example.com?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 5: Before DNS, ARP Happens
&lt;/h2&gt;

&lt;p&gt;To contact the DNS server, the laptop must send traffic through the router.&lt;/p&gt;

&lt;p&gt;It knows the router's IP address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it does not know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Router MAC Address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So it broadcasts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who has 192.168.1.1?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an ARP request.&lt;/p&gt;

&lt;p&gt;The router replies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.1 is AA:AA:AA:AA:AA:AA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The laptop stores this information in its ARP cache.&lt;/p&gt;

&lt;p&gt;Problem solved.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: The DNS Query Leaves the Laptop
&lt;/h2&gt;

&lt;p&gt;The laptop creates an IP packet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP      = 192.168.1.100
Destination IP = 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then it creates a frame.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source MAC      = BB:BB:BB:BB:BB:BB
Destination MAC = AA:AA:AA:AA:AA:AA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This reveals an important networking principle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination IP  = Final Destination

Destination MAC = Next Hop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For many beginners, this is the first surprising realization.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: NAT Changes the Source Address
&lt;/h2&gt;

&lt;p&gt;The router receives the packet.&lt;/p&gt;

&lt;p&gt;The router notices:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is a private IP address.&lt;/p&gt;

&lt;p&gt;Private addresses cannot travel across the public Internet.&lt;/p&gt;

&lt;p&gt;The router performs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Network Address Translation.&lt;/p&gt;

&lt;p&gt;The source address changes from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which is the router's public IP.&lt;/p&gt;

&lt;p&gt;The router also records this translation in its NAT table.&lt;/p&gt;

&lt;p&gt;This is how replies find their way back later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Routers Forward the Packet
&lt;/h2&gt;

&lt;p&gt;The packet begins traveling across the Internet.&lt;/p&gt;

&lt;p&gt;An important detail often goes unnoticed.&lt;/p&gt;

&lt;p&gt;At every hop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Old Ethernet Frame
      ↓
Discarded

New Ethernet Frame
      ↓
Created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAC Addresses
Change at every hop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Addresses
Remain largely unchanged
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why networking engineers often say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAC = Hop-to-Hop

IP = End-to-End
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 9: The DNS Server Responds
&lt;/h2&gt;

&lt;p&gt;Eventually the packet reaches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Google DNS receives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP = 49.43.12.10
Destination IP = 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice something important.&lt;/p&gt;

&lt;p&gt;Google never sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It only sees the public address created by NAT.&lt;/p&gt;

&lt;p&gt;Google replies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com = 104.26.10.50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 10: The Reply Finds Its Way Home
&lt;/h2&gt;

&lt;p&gt;The DNS reply eventually returns to the home router.&lt;/p&gt;

&lt;p&gt;The router consults its NAT table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49.43.12.10:53001
        ↓
192.168.1.100:53001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router now knows exactly which device requested the information.&lt;/p&gt;

&lt;p&gt;The reply is forwarded back to the laptop.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 11: TCP Establishes a Connection
&lt;/h2&gt;

&lt;p&gt;Now the browser finally knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com = 104.26.10.50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before sending data, TCP establishes a connection.&lt;/p&gt;

&lt;p&gt;The famous three-way handshake occurs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN
 ↓
SYN-ACK
 ↓
ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The connection is now established.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 12: TLS Creates Encryption
&lt;/h2&gt;

&lt;p&gt;Because the website uses HTTPS, encryption must be negotiated.&lt;/p&gt;

&lt;p&gt;The browser and server exchange:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Certificates&lt;/li&gt;
&lt;li&gt;Cryptographic parameters&lt;/li&gt;
&lt;li&gt;Session keys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An encrypted channel is created.&lt;/p&gt;

&lt;p&gt;Only after this step can secure communication begin.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 13: The Actual Website Loads
&lt;/h2&gt;

&lt;p&gt;Finally, the browser sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server responds with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser renders everything.&lt;/p&gt;

&lt;p&gt;The webpage appears.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changes When a VPN Is Enabled?
&lt;/h2&gt;

&lt;p&gt;Without a VPN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
 ↓
Router
 ↓
ISP
 ↓
Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a VPN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
 ↓
Router
 ↓
ISP
 ↓
VPN Server
 ↓
Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router does not disappear.&lt;/p&gt;

&lt;p&gt;ARP still happens.&lt;/p&gt;

&lt;p&gt;DHCP still happens.&lt;/p&gt;

&lt;p&gt;Frames still exist.&lt;/p&gt;

&lt;p&gt;The difference is that traffic is encrypted and sent to the VPN server first.&lt;/p&gt;

&lt;p&gt;To the ISP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VPN Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;appears to be the destination.&lt;/p&gt;

&lt;p&gt;The actual website remains hidden inside the encrypted tunnel.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Mental Model That Finally Helped
&lt;/h2&gt;

&lt;p&gt;Networking became easier once I stopped imagining the Internet as a single connection.&lt;/p&gt;

&lt;p&gt;Instead, I started viewing it as many small conversations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop ↔ Router

Router ↔ ISP Router

ISP Router ↔ ISP Router

ISP Router ↔ Destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each conversation uses different MAC addresses.&lt;/p&gt;

&lt;p&gt;The IP packet survives the journey.&lt;/p&gt;

&lt;p&gt;Once that idea clicked, concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;ARP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;NAT&lt;/li&gt;
&lt;li&gt;VPNs&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;Wireshark captures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;started feeling like pieces of the same puzzle instead of isolated protocols.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;For a long time, networking felt overwhelming because every protocol seemed independent.&lt;/p&gt;

&lt;p&gt;The breakthrough came when I followed a single packet from start to finish.&lt;/p&gt;

&lt;p&gt;Rather than memorizing definitions, I began asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What problem is this protocol solving right now?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Viewed through that lens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DHCP provides identity.&lt;/li&gt;
&lt;li&gt;ARP finds local devices.&lt;/li&gt;
&lt;li&gt;DNS finds destinations.&lt;/li&gt;
&lt;li&gt;NAT enables Internet access.&lt;/li&gt;
&lt;li&gt;TCP creates reliable communication.&lt;/li&gt;
&lt;li&gt;TLS secures it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And together, they make something as ordinary as loading a webpage possible.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>devops</category>
      <category>linux</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A URL Worked on My Work Laptop but Not My Personal Laptop — Here's What That Taught Me About VPNs, ARP, and Networking</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sat, 13 Jun 2026 02:41:14 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/a-url-worked-on-my-work-laptop-but-not-my-personal-laptop-heres-what-that-taught-me-about-vpns-425p</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/a-url-worked-on-my-work-laptop-but-not-my-personal-laptop-heres-what-that-taught-me-about-vpns-425p</guid>
      <description>&lt;p&gt;One of the most effective ways to learn networking is to stop memorizing protocols and start investigating real problems.&lt;/p&gt;

&lt;p&gt;Recently, I encountered a situation that seemed simple at first.&lt;/p&gt;

&lt;p&gt;A newly deployed internal service was accessible from my work laptop but not from my personal laptop.&lt;/p&gt;

&lt;p&gt;A month later, the exact same URL became accessible from both devices.&lt;/p&gt;

&lt;p&gt;At first glance this looked like a permissions issue.&lt;/p&gt;

&lt;p&gt;But the more I investigated, the more networking concepts started connecting together.&lt;/p&gt;

&lt;p&gt;What began as a simple question eventually led me through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud networking&lt;/li&gt;
&lt;li&gt;VPNs&lt;/li&gt;
&lt;li&gt;Public vs private IP addresses&lt;/li&gt;
&lt;li&gt;MAC addresses&lt;/li&gt;
&lt;li&gt;ARP&lt;/li&gt;
&lt;li&gt;Ethernet frames&lt;/li&gt;
&lt;li&gt;Packet captures in Wireshark&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article summarizes the mental models that finally helped these concepts click.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Original Question
&lt;/h2&gt;

&lt;p&gt;The observation was simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Work Laptop
     ↓
URL works

Personal Laptop
     ↓
URL does not work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Work Laptop
     ↓
URL works

Personal Laptop
     ↓
URL also works
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The obvious question was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How does a server know the difference between two laptops?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both devices were connected to the same home network.&lt;/p&gt;

&lt;p&gt;Both were using the same internet connection.&lt;/p&gt;

&lt;p&gt;So what was different?&lt;/p&gt;




&lt;h2&gt;
  
  
  My First Hypothesis: Cloud Networking Rules
&lt;/h2&gt;

&lt;p&gt;My first assumption was that the answer lived inside the cloud platform.&lt;/p&gt;

&lt;p&gt;Regardless of whether a service runs on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;GCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all cloud providers offer mechanisms for controlling network access.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Network ACLs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Azure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Network Security Groups (NSGs)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GCP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Firewall Rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The names differ.&lt;/p&gt;

&lt;p&gt;The underlying goal is the same:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Allow traffic
Block traffic
Control who can reach a service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This led me to a hypothesis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Perhaps the service was initially restricted and later opened to a broader audience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That explanation seemed plausible.&lt;/p&gt;

&lt;p&gt;But there was another possibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  The VPN Realization
&lt;/h2&gt;

&lt;p&gt;My work laptop regularly connects through a VPN.&lt;/p&gt;

&lt;p&gt;Specifically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GlobalProtect VPN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This changed how I thought about the problem.&lt;/p&gt;

&lt;p&gt;Without a VPN, traffic follows a path similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Home Router
   ↓
ISP
   ↓
Internet
   ↓
Destination Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a VPN:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Home Router
   ↓
ISP
   ↓
VPN Gateway
   ↓
Company Network
   ↓
Destination Server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This raised a new possibility.&lt;/p&gt;

&lt;p&gt;The server might not care about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Work Laptop
vs
Personal Laptop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, it might care about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Company Network
vs
Public Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction made much more sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding IP Addresses
&lt;/h2&gt;

&lt;p&gt;This investigation also exposed a misunderstanding I had about IP addresses.&lt;/p&gt;

&lt;p&gt;There isn't just one IP address involved.&lt;/p&gt;

&lt;p&gt;There are several.&lt;/p&gt;




&lt;h3&gt;
  
  
  Local IP Address
&lt;/h3&gt;

&lt;p&gt;Assigned by your router through DHCP.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This address exists only inside your home network.&lt;/p&gt;

&lt;p&gt;Internet servers never see it directly.&lt;/p&gt;




&lt;h3&gt;
  
  
  Public IP Address
&lt;/h3&gt;

&lt;p&gt;Assigned by your ISP.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;103.x.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the address most internet services see.&lt;/p&gt;




&lt;h3&gt;
  
  
  VPN Address
&lt;/h3&gt;

&lt;p&gt;Assigned by the VPN infrastructure.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10.50.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When connected to a VPN, company systems may see this address instead of your ISP-assigned address.&lt;/p&gt;

&lt;p&gt;This was an important realization.&lt;/p&gt;

&lt;p&gt;A server often identifies where a request is coming from based on IP addresses—not based on the physical laptop itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  The MAC Address Misconception
&lt;/h2&gt;

&lt;p&gt;Another misconception I had involved MAC addresses.&lt;/p&gt;

&lt;p&gt;Initially I assumed that remote services might somehow see the MAC address of my network card.&lt;/p&gt;

&lt;p&gt;That is not how networking works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Happens
&lt;/h2&gt;

&lt;p&gt;Imagine traffic moving toward GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Router
   ↓
ISP Router
   ↓
More Routers
   ↓
Datacenter Router
   ↓
GitHub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At every hop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAC Address
Changes

IP Address
Remains the same
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub never sees the MAC address of my Wi-Fi card.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GitHub sees my public IP address.&lt;/p&gt;

&lt;p&gt;That single insight corrected a large part of my networking mental model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where ARP Fits In
&lt;/h2&gt;

&lt;p&gt;This naturally led to another question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If devices communicate using MAC addresses locally, how does a device discover a MAC address?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ARP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Address Resolution Protocol.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem ARP Solves
&lt;/h2&gt;

&lt;p&gt;Suppose a device knows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but does not know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2c:9c:58:8b:2d:7b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ARP exists to bridge that gap.&lt;/p&gt;

&lt;p&gt;Its purpose is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address
      ↓
Find MAC Address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  An ARP Request in Plain English
&lt;/h2&gt;

&lt;p&gt;A typical ARP request looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who has 192.168.1.10?
Tell 192.168.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Translated into normal language:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am 192.168.1.1

I am looking for
192.168.1.10

Who owns that address?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ARP requests are broadcast to the entire local network.&lt;/p&gt;




&lt;h2&gt;
  
  
  The ARP Reply
&lt;/h2&gt;

&lt;p&gt;The device that owns the address responds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10 is at
2c:9c:58:8b:2d:7b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I own that IP address.

Here is my MAC address.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The router can now send Ethernet frames directly to the correct device.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Discovery from Wireshark
&lt;/h2&gt;

&lt;p&gt;While inspecting packets in Wireshark, I noticed something surprising.&lt;/p&gt;

&lt;p&gt;The packet structure looked like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frame
   ↓
Ethernet II
   ↓
ARP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice what is missing.&lt;/p&gt;

&lt;p&gt;There is no:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;layer between Ethernet and ARP.&lt;/p&gt;

&lt;p&gt;This was unexpected.&lt;/p&gt;

&lt;p&gt;I initially assumed ARP worked inside IP.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;ARP operates alongside IP.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why ARP Has No TTL
&lt;/h2&gt;

&lt;p&gt;Another misconception involved TTL.&lt;/p&gt;

&lt;p&gt;I assumed every networking protocol contained fields such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TTL&lt;/li&gt;
&lt;li&gt;Routing information&lt;/li&gt;
&lt;li&gt;IP headers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That assumption was wrong.&lt;/p&gt;

&lt;p&gt;TTL exists because IP packets travel through routers.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop
   ↓
Router
   ↓
ISP
   ↓
Internet
   ↓
Destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each router decreases the TTL value.&lt;/p&gt;

&lt;p&gt;ARP packets never leave the local network.&lt;/p&gt;

&lt;p&gt;They are not routed across the internet.&lt;/p&gt;

&lt;p&gt;Because of that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No Routing
      ↓
No TTL Needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once I understood this, ARP's design suddenly made much more sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Mental Models That Finally Clicked
&lt;/h2&gt;

&lt;p&gt;After all of this investigation, several concepts became much easier to remember.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud Networking
&lt;/h3&gt;

&lt;p&gt;Different names.&lt;/p&gt;

&lt;p&gt;Same networking fundamentals.&lt;/p&gt;




&lt;h3&gt;
  
  
  VPN
&lt;/h3&gt;

&lt;p&gt;Changes the route packets take.&lt;/p&gt;




&lt;h3&gt;
  
  
  IP Address
&lt;/h3&gt;

&lt;p&gt;Identifies a device across networks.&lt;/p&gt;




&lt;h3&gt;
  
  
  MAC Address
&lt;/h3&gt;

&lt;p&gt;Identifies a network interface on a local network.&lt;/p&gt;




&lt;h3&gt;
  
  
  ARP
&lt;/h3&gt;

&lt;p&gt;Answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I know the IP address. What is the MAC address?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  DHCP
&lt;/h3&gt;

&lt;p&gt;Answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I just joined the network. Which IP address should I use?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  DNS
&lt;/h3&gt;

&lt;p&gt;Answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I know the website name. Which IP address does it map to?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;What started as a simple access issue turned into a useful networking lesson.&lt;/p&gt;

&lt;p&gt;The biggest takeaway wasn't a specific protocol.&lt;/p&gt;

&lt;p&gt;It was a different way of learning.&lt;/p&gt;

&lt;p&gt;Instead of memorizing definitions, I found it far more effective to observe actual packet exchanges and then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did that happen?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wireshark made invisible networking behavior visible.&lt;/p&gt;

&lt;p&gt;And once the packets became visible, many concepts that previously felt disconnected finally started fitting together.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>linux</category>
      <category>wireshark</category>
    </item>
    <item>
      <title>Learning DevOps from First Principles: What an EC2 Instance Actually Is</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:16:19 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-what-an-ec2-instance-actually-is-55dp</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-what-an-ec2-instance-actually-is-55dp</guid>
      <description>&lt;p&gt;One of the first cloud concepts many people encounter while learning AWS is &lt;strong&gt;EC2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The name sounds technical.&lt;/p&gt;

&lt;p&gt;The documentation is extensive.&lt;/p&gt;

&lt;p&gt;And the number of configuration options can make it feel like something fundamentally different from a regular computer.&lt;/p&gt;

&lt;p&gt;But while trying to understand cloud computing, I found myself repeatedly coming back to a simple thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At the end of the day, an EC2 instance is just another computer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That realization helped me understand cloud infrastructure much more clearly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Intimidation Factor
&lt;/h2&gt;

&lt;p&gt;When people first open the AWS console, they encounter terms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Elastic IPs&lt;/li&gt;
&lt;li&gt;Auto Scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is easy to feel that cloud computing is an entirely different world.&lt;/p&gt;

&lt;p&gt;But before diving into those concepts, it helps to ask a simpler question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is an EC2 instance actually providing?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Starting with the Name
&lt;/h2&gt;

&lt;p&gt;EC2 stands for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elastic Compute Cloud&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The important word here is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compute&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS is essentially renting computing resources.&lt;/p&gt;

&lt;p&gt;When you launch an EC2 instance, AWS allocates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;Memory (RAM)&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;to a virtual machine that you can access.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You are renting a computer that lives inside AWS's infrastructure.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Comparing It to a Personal Computer
&lt;/h2&gt;

&lt;p&gt;Consider a typical laptop.&lt;/p&gt;

&lt;p&gt;It contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A processor&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;An operating system&lt;/li&gt;
&lt;li&gt;Network connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now consider an EC2 instance.&lt;/p&gt;

&lt;p&gt;It also contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual CPUs&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;An operating system&lt;/li&gt;
&lt;li&gt;Network connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The location is different.&lt;/p&gt;

&lt;p&gt;The concepts are the same.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Main Difference: Ownership
&lt;/h2&gt;

&lt;p&gt;The biggest difference is not technical.&lt;/p&gt;

&lt;p&gt;It is operational.&lt;/p&gt;

&lt;p&gt;With a personal computer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You own the hardware.&lt;/li&gt;
&lt;li&gt;The machine sits near you.&lt;/li&gt;
&lt;li&gt;You maintain it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With EC2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS owns the hardware.&lt;/li&gt;
&lt;li&gt;The machine runs in a data center.&lt;/li&gt;
&lt;li&gt;AWS manages the physical infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You only manage the virtual machine running on top of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Linux Knowledge Transfers
&lt;/h2&gt;

&lt;p&gt;This was one of the most interesting observations during my learning.&lt;/p&gt;

&lt;p&gt;If an EC2 instance runs Linux, many of the same concepts apply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File permissions&lt;/li&gt;
&lt;li&gt;Processes&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Package management&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, if you already know how to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh user@server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;check running processes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or inspect network interfaces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;those skills remain useful inside a cloud environment.&lt;/p&gt;

&lt;p&gt;The cloud does not replace Linux.&lt;/p&gt;

&lt;p&gt;It builds upon it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Networking Suddenly Matters
&lt;/h2&gt;

&lt;p&gt;A local computer often works without much thought about networking.&lt;/p&gt;

&lt;p&gt;Cloud systems are different.&lt;/p&gt;

&lt;p&gt;To access an EC2 instance, you must think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;Ports&lt;/li&gt;
&lt;li&gt;Firewalls&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which traffic should be allowed in?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which traffic should be allowed out?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;become important very quickly.&lt;/p&gt;

&lt;p&gt;This is one reason networking appears so frequently in DevOps discussions.&lt;/p&gt;




&lt;h2&gt;
  
  
  The "Elastic" Part
&lt;/h2&gt;

&lt;p&gt;One aspect that does make EC2 different from a personal machine is elasticity.&lt;/p&gt;

&lt;p&gt;A laptop has fixed hardware.&lt;/p&gt;

&lt;p&gt;An EC2 instance can be changed relatively easily.&lt;/p&gt;

&lt;p&gt;Need more RAM?&lt;/p&gt;

&lt;p&gt;Choose a larger instance type.&lt;/p&gt;

&lt;p&gt;Need more CPU?&lt;/p&gt;

&lt;p&gt;Launch a different instance.&lt;/p&gt;

&lt;p&gt;Need multiple servers?&lt;/p&gt;

&lt;p&gt;Create several instances.&lt;/p&gt;

&lt;p&gt;The computer remains conceptually the same.&lt;/p&gt;

&lt;p&gt;The flexibility changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Useful Mental Model
&lt;/h2&gt;

&lt;p&gt;The way I currently think about it is:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="l6t4uy"&lt;br&gt;
Personal Computer&lt;br&gt;
       ↓&lt;br&gt;
Virtual Machine&lt;br&gt;
       ↓&lt;br&gt;
Cloud Virtual Machine (EC2)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


The further you move down this chain, the more infrastructure management is abstracted away.

But the underlying concepts remain familiar.

---

## Why This Perspective Helped Me

Initially, cloud services felt like hundreds of disconnected products.

But viewing EC2 as "just another computer" made many concepts easier to understand.

Instead of asking:

&amp;gt; "How does AWS work?"

I could start by asking:

&amp;gt; "How would I do this on a Linux machine?"

Often, the cloud version turns out to be an abstraction of something that already exists.

---

## Final Thoughts

Cloud computing introduces many new terms.

Some of them are genuinely new concepts.

Others are familiar ideas presented at a larger scale.

For me, EC2 became much easier to understand once I stopped thinking of it as a cloud product and started thinking of it as a computer.

A computer with CPU, RAM, storage, networking, and an operating system.

Just running somewhere else.

And sometimes, understanding a complex system begins by realizing that it may be simpler than it first appears.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title>Same Hardware, Different Experience: Why Linux Feels Faster</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:16:05 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/same-hardware-different-experience-why-linux-feels-faster-hih</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/same-hardware-different-experience-why-linux-feels-faster-hih</guid>
      <description>&lt;p&gt;A few weeks after switching from Windows to Linux, I noticed something interesting.&lt;/p&gt;

&lt;p&gt;The hardware had not changed.&lt;/p&gt;

&lt;p&gt;The processor was the same.&lt;/p&gt;

&lt;p&gt;The RAM was the same.&lt;/p&gt;

&lt;p&gt;The SSD was the same.&lt;/p&gt;

&lt;p&gt;And yet, the laptop felt noticeably faster.&lt;/p&gt;

&lt;p&gt;Not necessarily because applications were completing tasks dramatically quicker, but because the entire system felt more responsive.&lt;/p&gt;

&lt;p&gt;Keyboard input felt immediate.&lt;/p&gt;

&lt;p&gt;Windows opened faster.&lt;/p&gt;

&lt;p&gt;Terminal commands appeared instantly.&lt;/p&gt;

&lt;p&gt;The desktop experience felt smoother.&lt;/p&gt;

&lt;p&gt;This raised a question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can the same hardware feel different simply because the operating system changed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While I'm still learning, this is the mental model I've built so far.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hardware Didn't Change
&lt;/h2&gt;

&lt;p&gt;Consider a laptop with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AMD Ryzen processor&lt;/li&gt;
&lt;li&gt;16 GB DDR5 RAM&lt;/li&gt;
&lt;li&gt;NVMe SSD&lt;/li&gt;
&lt;li&gt;Modern integrated graphics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When switching operating systems, none of these components change.&lt;/p&gt;

&lt;p&gt;The CPU does not suddenly become faster.&lt;/p&gt;

&lt;p&gt;The RAM does not magically increase.&lt;/p&gt;

&lt;p&gt;The SSD remains identical.&lt;/p&gt;

&lt;p&gt;From a hardware perspective:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="u3m9xd"&lt;br&gt;
Before → Same Hardware&lt;br&gt;
After  → Same Hardware&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


So the difference must come from somewhere else.

---

## An Operating System Is Not Just a User Interface

Many people think of an operating system primarily as the desktop they see.

But an operating system does far more than display windows and icons.

It manages:

* Memory
* CPU scheduling
* Processes
* Storage
* Networking
* Device drivers
* Background services

In other words:

&amp;gt; The operating system decides how hardware resources are used.

Two operating systems can therefore create very different experiences using the same hardware.

---

## Perceived Performance vs Raw Performance

One thing I have learned is that performance is not always about benchmarks.

A system can have excellent benchmark scores and still feel sluggish.

Why?

Because users experience responsiveness, not benchmark numbers.

Examples include:

* How quickly a window opens
* How fast a menu appears
* How responsive typing feels
* How quickly applications launch

These small interactions shape our perception of speed.

---

## Background Services Matter

Modern operating systems often run numerous services in the background.

Examples include:

* Update services
* Search indexing
* Telemetry collection
* Synchronization services
* Device management services

Many of these provide useful functionality.

However, they also consume resources.

Even when no application is actively running, background processes may still be:

* Using memory
* Accessing storage
* Performing network activity
* Scheduling CPU work

This creates a baseline level of system activity.

---

## Resource Utilization Is a Shared Budget

A useful way to think about system resources is as a shared budget.

Your laptop has finite:

* CPU cycles
* Memory
* Storage bandwidth

Every running service consumes part of that budget.

The more resources allocated to background tasks, the fewer remain available for user-facing work.

This does not necessarily mean one operating system is "better" than another.

Different operating systems make different trade-offs.

---

## Different Priorities, Different Results

One realization that helped me understand the situation is this:

Operating systems are optimized for different goals.

Some prioritize:

* Broad hardware compatibility
* Enterprise features
* Legacy application support

Others prioritize:

* Simplicity
* Minimalism
* Resource efficiency

Neither approach is inherently right or wrong.

They simply optimize for different audiences.

---

## Why Linux Often Feels Lightweight

Many Linux distributions allow users to choose exactly what they install.

Examples include:

* Desktop environments
* Services
* Background applications
* System utilities

This flexibility often results in systems that run fewer background components by default.

Consequently:

* Memory usage may be lower
* Idle CPU usage may be lower
* Disk activity may be reduced

The hardware itself has not changed.

The workload placed on it has.

---

## The Importance of Responsiveness

One thing I did not fully appreciate before switching is how much responsiveness affects the user experience.

Consider typing.

If every keypress appears immediately, the system feels fast.

If there is even a slight delay, users notice it.

The same applies to:

* Opening terminals
* Launching applications
* Switching windows

The actual difference may only be milliseconds.

Yet those milliseconds accumulate into a perception of smoothness.

---

## Why This Matters for DevOps Learning

This observation also connects back to learning DevOps.

Many cloud servers run Linux.

Understanding Linux is not only about commands and configuration files.

It is also about understanding how operating systems manage resources.

Concepts such as:

* Memory usage
* Running processes
* Service management
* System monitoring

appear repeatedly in real-world infrastructure.

The desktop experience simply provides a visible example of those concepts.

---

## A Simple Mental Model

The way I currently think about it is:



```text id="r2n6wk"
Hardware
    +
Operating System
    +
Running Workloads
    =
User Experience
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hardware is only one part of the equation.&lt;/p&gt;

&lt;p&gt;The operating system and workload distribution matter just as much.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;After switching operating systems, the hardware remained exactly the same.&lt;/p&gt;

&lt;p&gt;Yet the overall experience changed noticeably.&lt;/p&gt;

&lt;p&gt;That experience made me realize something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Performance is not only about how powerful a machine is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is also about how efficiently its resources are used.&lt;/p&gt;

&lt;p&gt;The fastest-feeling system is not always the one with the most powerful hardware.&lt;/p&gt;

&lt;p&gt;Sometimes, it is simply the one asking the hardware to do less.&lt;/p&gt;

&lt;p&gt;And that has been one of the most interesting lessons from exploring Linux so far.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>performance</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Learning DevOps from First Principles: MAC Addresses vs IP Addresses — The Difference Finally Clicked</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:15:52 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-mac-addresses-vs-ip-addresses-the-difference-finally-3aef</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-mac-addresses-vs-ip-addresses-the-difference-finally-3aef</guid>
      <description>&lt;p&gt;One of the first networking concepts that confused me was this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why does a computer need both a MAC address and an IP address?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first glance, they seem to solve the same problem.&lt;/p&gt;

&lt;p&gt;Both appear to identify a device.&lt;/p&gt;

&lt;p&gt;Both show up in networking tools.&lt;/p&gt;

&lt;p&gt;Both appear in packet captures.&lt;/p&gt;

&lt;p&gt;So why do we need two different addresses?&lt;/p&gt;

&lt;p&gt;While exploring Linux networking tools and Wireshark, the distinction finally started making sense.&lt;/p&gt;

&lt;p&gt;This article summarizes the mental model that helped me understand the difference.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Inside the Machine
&lt;/h2&gt;

&lt;p&gt;Before discussing addresses, it helps to understand where they come from.&lt;/p&gt;

&lt;p&gt;If you open a typical laptop, you will usually find components such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Battery&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Processor&lt;/li&gt;
&lt;li&gt;Cooling system&lt;/li&gt;
&lt;li&gt;Network interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of those network interfaces is typically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Wi-Fi card&lt;/li&gt;
&lt;li&gt;An Ethernet controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These components are responsible for network communication.&lt;/p&gt;

&lt;p&gt;They are the parts of the machine that actually send and receive data across a network.&lt;/p&gt;




&lt;h2&gt;
  
  
  Every Network Interface Has an Identity
&lt;/h2&gt;

&lt;p&gt;A network interface needs a way to identify itself.&lt;/p&gt;

&lt;p&gt;This is where the &lt;strong&gt;MAC address&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;A MAC address is associated with a network interface card (NIC).&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="q3d9nm"&lt;br&gt;
2C:9C:58:8B:2D:7B&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Think of it as the identity of the network interface itself.

Not the operating system.

Not the browser.

Not the application.

The network hardware.

---

## What Is a MAC Address?

MAC stands for:

**Media Access Control**

A MAC address operates at the **Data Link Layer** of the OSI model.

Its primary purpose is to help devices communicate within a local network.

Examples include:

* Laptop to router
* Router to switch
* Switch to printer

In other words:

&amp;gt; MAC addresses help devices find each other on the same local network.

---

## What Is an IP Address?

An IP address serves a different purpose.

Example:



```text id="g8x4tc"
192.168.1.20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="v6u7mz"&lt;br&gt;
2405:201:8000::1&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


IP addresses operate at the **Network Layer**.

Their job is to identify where a device exists within a larger network.

This allows communication beyond a single local network.

For example:

* Home network → Internet
* Office network → Cloud server
* Laptop → GitHub

---

## The Question That Helped Me

The mental model that helped me most was:

**MAC Address answers:**

&amp;gt; Which physical device on this local network should receive this data?

**IP Address answers:**

&amp;gt; Which device anywhere in the world should receive this data?

They solve related but different problems.

---

## Hardware Identity vs Logical Identity

This is where things finally clicked for me.

A MAC address is tied to a network interface.

An IP address is assigned by the network.

Think of it this way:

### MAC Address



```text id="w2l7fa"
Identity of the network hardware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  IP Address
&lt;/h3&gt;



&lt;p&gt;```text id="h5r3ek"&lt;br&gt;
Identity assigned within a network&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


One identifies the hardware.

The other identifies the location.

---

## Why Not Use Only MAC Addresses?

Initially, I wondered:

&amp;gt; Why not simply use MAC addresses everywhere?

The problem is scale.

Imagine trying to communicate with a server on another continent.

Routers across the internet cannot practically route traffic based on MAC addresses alone.

Instead:

* IP addresses handle routing across networks.
* MAC addresses handle delivery within local networks.

This division of responsibility makes networking scalable.

---

## Seeing It in Linux

One of the easiest ways to observe this is:



```bash id="j8r4np"
ip addr show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Typical output includes interfaces such as:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="f2q7xs"&lt;br&gt;
lo&lt;br&gt;
eth0&lt;br&gt;
wlp2s0&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


You may also see:

### MAC Address



```text id="c9m5vn"
link/ether 2c:9c:58:8b:2d:7b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  IPv4 Address
&lt;/h3&gt;



&lt;p&gt;```text id="u4x6la"&lt;br&gt;
inet 192.168.1.20&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


### IPv6 Address



```text id="b7p8dw"
inet6 2405:201:8000::1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Seeing both together helped reinforce that they serve different purposes.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where Wireshark Made It Click
&lt;/h2&gt;

&lt;p&gt;While experimenting with Wireshark, I noticed that packets often contained both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source MAC Address&lt;/li&gt;
&lt;li&gt;Destination MAC Address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source IP Address&lt;/li&gt;
&lt;li&gt;Destination IP Address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first this felt redundant.&lt;/p&gt;

&lt;p&gt;But it eventually became clear:&lt;/p&gt;

&lt;p&gt;The packet needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP information to determine where it should go globally.&lt;/li&gt;
&lt;li&gt;MAC information to determine which device should receive it locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are necessary.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Simple Analogy
&lt;/h2&gt;

&lt;p&gt;Imagine sending a letter.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;city and street address&lt;/strong&gt; represent the IP address.&lt;/p&gt;

&lt;p&gt;They help the postal system route the letter across large distances.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;person's name on the mailbox&lt;/strong&gt; resembles the MAC address.&lt;/p&gt;

&lt;p&gt;Once the letter arrives at the correct location, it still needs to reach the correct recipient.&lt;/p&gt;

&lt;p&gt;The analogy is not perfect, but it helped me visualize the distinction.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Useful Mental Model
&lt;/h2&gt;

&lt;p&gt;The way I currently think about it is:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="n8y3vk"&lt;br&gt;
IP Address&lt;br&gt;
    ↓&lt;br&gt;
Find the correct network&lt;/p&gt;

&lt;p&gt;MAC Address&lt;br&gt;
    ↓&lt;br&gt;
Find the correct device&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Together they allow communication to scale from local networks to the global internet.

---

## Why This Matters for DevOps

At first glance, MAC addresses and IP addresses seem like purely networking topics.

But they appear everywhere:

* Cloud servers
* Containers
* Virtual machines
* Kubernetes networking
* Load balancers
* VPNs

Understanding the distinction makes many higher-level networking concepts easier to grasp.

---

## Final Thoughts

For a long time, MAC addresses and IP addresses felt like two different labels describing the same thing.

They are not.

A MAC address identifies a network interface on a local network.

An IP address identifies a device's location within a larger network.

One focuses on hardware-level delivery.

The other focuses on network-level routing.

And once that distinction clicked, many networking concepts suddenly became much easier to understand.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>networking</category>
      <category>linux</category>
      <category>wireshark</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Learning DevOps from First Principles: I Ran ping github.com and Opened Wireshark — Here's What I Learned</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Mon, 08 Jun 2026 03:15:37 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-i-ran-ping-githubcom-and-opened-wireshark-heres-what-i-27fi</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-i-ran-ping-githubcom-and-opened-wireshark-heres-what-i-27fi</guid>
      <description>&lt;p&gt;One of the most interesting things about learning networking is that many concepts seem abstract until you see them happening in real time.&lt;/p&gt;

&lt;p&gt;For example, I had heard terms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ICMP&lt;/li&gt;
&lt;li&gt;Packets&lt;/li&gt;
&lt;li&gt;Requests&lt;/li&gt;
&lt;li&gt;Replies&lt;/li&gt;
&lt;li&gt;Network traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they remained theoretical concepts until I opened Wireshark and watched them appear on my screen.&lt;/p&gt;

&lt;p&gt;What started as a simple command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;turned into a useful lesson about how computers communicate across networks.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Experiment
&lt;/h2&gt;

&lt;p&gt;The setup was intentionally simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Wireshark&lt;/li&gt;
&lt;li&gt;Select the active network interface&lt;/li&gt;
&lt;li&gt;Apply the filter:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;icmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Open a terminal&lt;/li&gt;
&lt;li&gt;Run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Observe what actually happens on the network when a ping command is executed.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Before Running Ping
&lt;/h2&gt;

&lt;p&gt;Before running the command, Wireshark showed no ICMP traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  📸 Before Capture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9uwk4vlmd9ljyjgf3f9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9uwk4vlmd9ljyjgf3f9.png" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1: Wireshark filtered by ICMP before running &lt;code&gt;ping github.com&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This initially confused me.&lt;/p&gt;

&lt;p&gt;I had applied the filter correctly, but nothing appeared.&lt;/p&gt;

&lt;p&gt;Then I realized something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Wireshark only shows packets that actually exist.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Since no ICMP traffic was being generated, there was nothing to display.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running the Command
&lt;/h2&gt;

&lt;p&gt;The command used was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Immediately, the terminal began showing responses similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;64 bytes from 20.xx.xx.xx:
icmp_seq=1 ttl=119 time=61 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the same time, Wireshark started filling with packets.&lt;/p&gt;




&lt;h2&gt;
  
  
  After Running Ping
&lt;/h2&gt;

&lt;p&gt;The moment the ping command started running, ICMP packets appeared in Wireshark.&lt;/p&gt;

&lt;h3&gt;
  
  
  📸 After Capture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkxfs1w6xpfku4k5beeh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkxfs1w6xpfku4k5beeh.webp" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 2: ICMP Echo Requests and Echo Replies captured after running &lt;code&gt;ping github.com&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was the first time I could visually observe what the &lt;code&gt;ping&lt;/code&gt; command was doing behind the scenes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does &lt;code&gt;ping&lt;/code&gt; Actually Do?
&lt;/h2&gt;

&lt;p&gt;Many beginners—including myself—treat &lt;code&gt;ping&lt;/code&gt; as a connectivity test.&lt;/p&gt;

&lt;p&gt;We run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and if responses appear, we assume everything is working.&lt;/p&gt;

&lt;p&gt;While that is true, there is more happening underneath.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;ping&lt;/code&gt; utility uses a protocol called:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ICMP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;which stands for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internet Control Message Protocol&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ICMP is part of the TCP/IP networking stack and is primarily used for diagnostics and troubleshooting.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Two Messages That Matter
&lt;/h2&gt;

&lt;p&gt;When &lt;code&gt;ping&lt;/code&gt; runs, two ICMP messages become important.&lt;/p&gt;

&lt;h3&gt;
  
  
  ICMP Echo Request
&lt;/h3&gt;

&lt;p&gt;Sent from your computer.&lt;/p&gt;

&lt;p&gt;It is essentially asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Are you there?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ICMP Echo Reply
&lt;/h3&gt;

&lt;p&gt;Sent back by the destination host.&lt;/p&gt;

&lt;p&gt;It is essentially saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Yes, I'm here."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Together, these create the familiar request–response pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Wireshark Was Showing
&lt;/h2&gt;

&lt;p&gt;Looking at the capture, I could see entries similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Echo (ping) request
Echo (ping) reply
Echo (ping) request
Echo (ping) reply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each request was followed by a corresponding reply.&lt;/p&gt;

&lt;p&gt;This was not just theory anymore.&lt;/p&gt;

&lt;p&gt;It was a live conversation occurring between my machine and GitHub's servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Simple Conversation
&lt;/h2&gt;

&lt;p&gt;The interaction can be visualized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My Laptop
    ↓
"Are you there?"
    ↓
github.com

github.com
    ↓
"Yes, I'm here."
    ↓
My Laptop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This exchange repeats continuously while the ping command runs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Something Interesting I Noticed
&lt;/h2&gt;

&lt;p&gt;In the capture, I could clearly see two IP addresses.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source:
192.168.1.x

Destination:
20.x.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then immediately afterwards:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source:
20.x.x.x

Destination:
192.168.1.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The addresses had reversed.&lt;/p&gt;

&lt;p&gt;That was the reply packet making its way back.&lt;/p&gt;

&lt;p&gt;Seeing this happen visually helped me understand networking far better than simply reading definitions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Inside a Packet
&lt;/h2&gt;

&lt;p&gt;Expanding a packet in Wireshark revealed multiple layers.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ethernet Frame
        ↓
IPv4 Packet
        ↓
ICMP Message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was an interesting moment because several concepts I had been studying separately suddenly appeared together.&lt;/p&gt;

&lt;p&gt;Inside a single packet I could see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source MAC Address&lt;/li&gt;
&lt;li&gt;Destination MAC Address&lt;/li&gt;
&lt;li&gt;Source IP Address&lt;/li&gt;
&lt;li&gt;Destination IP Address&lt;/li&gt;
&lt;li&gt;ICMP data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The OSI model was no longer just a diagram.&lt;/p&gt;

&lt;p&gt;I was seeing it in action.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Both MAC and IP Addresses Appear
&lt;/h2&gt;

&lt;p&gt;One question that had been bothering me earlier was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why do packets contain both MAC addresses and IP addresses?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Observing Wireshark helped answer that.&lt;/p&gt;

&lt;p&gt;The packet needs:&lt;/p&gt;

&lt;h3&gt;
  
  
  IP Address
&lt;/h3&gt;

&lt;p&gt;To determine where it should travel across networks.&lt;/p&gt;




&lt;h3&gt;
  
  
  MAC Address
&lt;/h3&gt;

&lt;p&gt;To determine which device should receive it on the local network.&lt;/p&gt;

&lt;p&gt;Both are required.&lt;/p&gt;

&lt;p&gt;They simply operate at different layers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Measuring Latency
&lt;/h2&gt;

&lt;p&gt;One of the most useful outputs from &lt;code&gt;ping&lt;/code&gt; is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time=61 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This represents the round-trip time.&lt;/p&gt;

&lt;p&gt;The measurement includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request sent
        ↓
Destination receives it
        ↓
Reply generated
        ↓
Reply received
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reported time covers the entire journey.&lt;/p&gt;

&lt;p&gt;This is why &lt;code&gt;ping&lt;/code&gt; is often used to estimate network latency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters for DevOps
&lt;/h2&gt;

&lt;p&gt;At first glance, &lt;code&gt;ping&lt;/code&gt; appears to be a very simple command.&lt;/p&gt;

&lt;p&gt;However, many real-world infrastructure problems eventually become questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the server reachable?&lt;/li&gt;
&lt;li&gt;Is DNS resolving correctly?&lt;/li&gt;
&lt;li&gt;Is the network path functioning?&lt;/li&gt;
&lt;li&gt;Are packets being dropped?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding what &lt;code&gt;ping&lt;/code&gt; actually does provides a foundation for answering those questions.&lt;/p&gt;

&lt;p&gt;Tools such as Wireshark simply make the invisible visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Useful Mental Model
&lt;/h2&gt;

&lt;p&gt;The way I currently think about it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ping command
      ↓
ICMP Echo Request
      ↓
Network
      ↓
Destination Host
      ↓
ICMP Echo Reply
      ↓
Back to Sender
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every successful ping is simply a completed request–reply conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Before opening Wireshark, &lt;code&gt;ping&lt;/code&gt; felt like a black box.&lt;/p&gt;

&lt;p&gt;You ran the command.&lt;/p&gt;

&lt;p&gt;A response appeared.&lt;/p&gt;

&lt;p&gt;And that was the end of the story.&lt;/p&gt;

&lt;p&gt;After watching the packets move across the network, the process became much easier to understand.&lt;/p&gt;

&lt;p&gt;A simple command turned into a visible exchange of requests and replies.&lt;/p&gt;

&lt;p&gt;And for the first time, concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ICMP&lt;/li&gt;
&lt;li&gt;Packet captures&lt;/li&gt;
&lt;li&gt;MAC addresses&lt;/li&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;started feeling less like networking terminology and more like parts of a real conversation between machines.&lt;/p&gt;

&lt;p&gt;Sometimes the best way to learn networking is not by reading about packets.&lt;/p&gt;

&lt;p&gt;It is by watching them travel.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>wireshark</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>If AI Gets Better at Coding, What Becomes the Bottleneck?</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sun, 07 Jun 2026 11:20:02 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/if-ai-gets-better-at-coding-what-becomes-the-bottleneck-28l3</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/if-ai-gets-better-at-coding-what-becomes-the-bottleneck-28l3</guid>
      <description>&lt;p&gt;One thought has been occupying my mind recently.&lt;/p&gt;

&lt;p&gt;As AI systems continue to improve, where does the bottleneck move?&lt;/p&gt;

&lt;p&gt;Historically, writing software involved two distinct challenges:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding the problem&lt;/li&gt;
&lt;li&gt;Translating the solution into code&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a long time, both were difficult.&lt;/p&gt;

&lt;p&gt;Today, however, the second challenge is becoming significantly easier.&lt;/p&gt;

&lt;p&gt;Modern AI systems can already generate substantial amounts of code from natural language instructions. Open-source models are improving rapidly, and frontier models continue to push capabilities forward.&lt;/p&gt;

&lt;p&gt;This raises an interesting question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If generating code becomes increasingly automated, what remains uniquely valuable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I do not claim to know the answer.&lt;/p&gt;

&lt;p&gt;But I have a hypothesis.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Historical Parallel
&lt;/h2&gt;

&lt;p&gt;Consider what happens when a program is compiled.&lt;/p&gt;

&lt;p&gt;Developers rarely write machine code directly.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human Logic
      ↓
Programming Language
      ↓
Compiler
      ↓
Machine Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a sense, compilers already generate the final executable instructions.&lt;/p&gt;

&lt;p&gt;Yet software engineers did not become irrelevant.&lt;/p&gt;

&lt;p&gt;The bottleneck simply shifted.&lt;/p&gt;

&lt;p&gt;Humans focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Problem solving&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Design decisions&lt;/li&gt;
&lt;li&gt;Trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while compilers handled translation.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI May Shift the Bottleneck Again
&lt;/h2&gt;

&lt;p&gt;Something similar may be happening today.&lt;/p&gt;

&lt;p&gt;The amount of code directly written by humans may decrease.&lt;/p&gt;

&lt;p&gt;The amount of guidance provided to AI systems may increase.&lt;/p&gt;

&lt;p&gt;The bottleneck may move from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Writing Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;toward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Defining Problems
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Communicating Intent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Articulacy May Become a Competitive Advantage
&lt;/h2&gt;

&lt;p&gt;One skill that increasingly feels important is articulacy.&lt;/p&gt;

&lt;p&gt;By articulacy, I mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The ability to translate thoughts into clear, precise language.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This sounds simple.&lt;/p&gt;

&lt;p&gt;In practice, it is surprisingly difficult.&lt;/p&gt;

&lt;p&gt;Many people know what they want.&lt;/p&gt;

&lt;p&gt;Far fewer can describe it precisely.&lt;/p&gt;

&lt;p&gt;The difference matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vague Requests Produce Vague Results
&lt;/h2&gt;

&lt;p&gt;Consider the difference between:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build me a web application.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a React application using Redux for state management,
with authentication, role-based access control,
server-side pagination, and optimistic UI updates.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both are requests.&lt;/p&gt;

&lt;p&gt;Only one provides meaningful constraints.&lt;/p&gt;

&lt;p&gt;The second request communicates intent more effectively.&lt;/p&gt;

&lt;p&gt;As AI systems become more capable, the quality of instructions may become increasingly important.&lt;/p&gt;




&lt;h2&gt;
  
  
  Asking Better Questions
&lt;/h2&gt;

&lt;p&gt;Another skill that feels increasingly valuable is asking the right questions.&lt;/p&gt;

&lt;p&gt;Good questions often emerge from understanding how systems work.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the trade-offs?&lt;/li&gt;
&lt;li&gt;What assumptions are being made?&lt;/li&gt;
&lt;li&gt;What constraints exist?&lt;/li&gt;
&lt;li&gt;What information is missing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions frequently matter more than syntax.&lt;/p&gt;

&lt;p&gt;The better the question, the more useful the answer tends to be.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Domain Knowledge Still Matters
&lt;/h2&gt;

&lt;p&gt;A common misconception is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If AI can write code, technical knowledge becomes unnecessary.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am not convinced that this is true.&lt;/p&gt;

&lt;p&gt;To guide an AI system effectively, one still needs to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Design patterns&lt;/li&gt;
&lt;li&gt;Framework choices&lt;/li&gt;
&lt;li&gt;Performance constraints&lt;/li&gt;
&lt;li&gt;Security considerations&lt;/li&gt;
&lt;li&gt;Operational requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In many cases, knowing what to ask requires understanding the domain first.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Source Models Will Continue Improving
&lt;/h2&gt;

&lt;p&gt;Another observation is that open-source models appear to be improving at a remarkable pace.&lt;/p&gt;

&lt;p&gt;Today's frontier models may remain ahead.&lt;/p&gt;

&lt;p&gt;But history suggests that capabilities often diffuse over time.&lt;/p&gt;

&lt;p&gt;What seems exclusive today may become widely accessible tomorrow.&lt;/p&gt;

&lt;p&gt;This raises another question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If capable models become available locally, what limits adoption?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Hardware May Become the Next Constraint
&lt;/h2&gt;

&lt;p&gt;One possible answer is hardware.&lt;/p&gt;

&lt;p&gt;A model can be open source and still be inaccessible.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because running it may require expensive hardware.&lt;/p&gt;

&lt;p&gt;Most people I know use laptops with configurations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;16 GB RAM&lt;/li&gt;
&lt;li&gt;Consumer CPUs&lt;/li&gt;
&lt;li&gt;Integrated graphics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a model requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-end GPUs&lt;/li&gt;
&lt;li&gt;Large memory pools&lt;/li&gt;
&lt;li&gt;Expensive infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;its practical adoption remains limited.&lt;/p&gt;

&lt;p&gt;In that case, the bottleneck shifts again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model Availability
         ↓
Hardware Availability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model may exist.&lt;/p&gt;

&lt;p&gt;The ability to run it becomes the challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Possible Future
&lt;/h2&gt;

&lt;p&gt;This makes me wonder whether future software development may increasingly look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human
    ↓
Idea
    ↓
Clear Instructions
    ↓
AI System
    ↓
Implementation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In that world, human value may not disappear.&lt;/p&gt;

&lt;p&gt;It may simply move higher up the stack.&lt;/p&gt;

&lt;p&gt;Towards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Problem definition&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Judgment&lt;/li&gt;
&lt;li&gt;Context&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Thought, Not a Prediction
&lt;/h2&gt;

&lt;p&gt;I could be completely wrong.&lt;/p&gt;

&lt;p&gt;Technology has a habit of surprising people.&lt;/p&gt;

&lt;p&gt;But if current trends continue, I suspect the most valuable skill may not be typing code faster.&lt;/p&gt;

&lt;p&gt;It may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinking clearly&lt;/li&gt;
&lt;li&gt;Communicating precisely&lt;/li&gt;
&lt;li&gt;Understanding systems deeply&lt;/li&gt;
&lt;li&gt;Asking better questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because even if machines become exceptional at implementation, someone still needs to decide what should be built in the first place.&lt;/p&gt;

&lt;p&gt;And that decision begins with a thought that can be articulated clearly enough for others—human or machine—to understand.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Learning DevOps from First Principles: Why Linux and Networking Might Be the Best Place to Start</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sun, 07 Jun 2026 10:32:10 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-why-linux-and-networking-might-be-the-best-place-to-start-1bnj</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/learning-devops-from-first-principles-why-linux-and-networking-might-be-the-best-place-to-start-1bnj</guid>
      <description>&lt;p&gt;One question has been occupying my mind recently:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If someone wants to learn DevOps, where should they actually begin?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The internet offers thousands of answers.&lt;/p&gt;

&lt;p&gt;Some recommend starting with Docker.&lt;br&gt;
Others suggest Kubernetes.&lt;br&gt;
Many point directly to AWS, Azure, or GCP.&lt;/p&gt;

&lt;p&gt;As someone currently learning DevOps, I've been trying to understand the subject from a more fundamental perspective.&lt;/p&gt;

&lt;p&gt;And the conclusion I've reached—at least for now—is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Linux and networking seem to be the foundation upon which many DevOps concepts are built.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I may be wrong, and I'm still learning, but this line of reasoning has helped me make sense of what initially felt like an overwhelming field.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Problem with Starting from Services
&lt;/h2&gt;

&lt;p&gt;Cloud providers offer an enormous number of services.&lt;/p&gt;

&lt;p&gt;AWS alone provides hundreds of them.&lt;/p&gt;

&lt;p&gt;For a beginner, this can create a feeling that DevOps is simply about memorizing services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;CloudWatch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And many more.&lt;/p&gt;

&lt;p&gt;The challenge is that learning services without understanding the underlying concepts can sometimes feel like memorizing buttons in a user interface.&lt;/p&gt;

&lt;p&gt;The service names may change.&lt;/p&gt;

&lt;p&gt;The concepts usually don't.&lt;/p&gt;


&lt;h2&gt;
  
  
  Looking Beneath the Cloud
&lt;/h2&gt;

&lt;p&gt;When I started looking past the service names, I noticed something interesting.&lt;/p&gt;

&lt;p&gt;Many cloud services ultimately provide access to concepts that already exist outside the cloud.&lt;/p&gt;

&lt;p&gt;For example, consider a virtual machine.&lt;/p&gt;

&lt;p&gt;In AWS, that service is called EC2.&lt;/p&gt;

&lt;p&gt;But what is an EC2 instance really?&lt;/p&gt;

&lt;p&gt;At a high level, it is a computer running somewhere else.&lt;/p&gt;

&lt;p&gt;It has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An operating system&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same concepts exist on a personal Linux machine.&lt;/p&gt;

&lt;p&gt;The environment changes.&lt;/p&gt;

&lt;p&gt;The fundamentals do not.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Linux Feels Important
&lt;/h2&gt;

&lt;p&gt;A significant amount of modern infrastructure runs on Linux.&lt;/p&gt;

&lt;p&gt;Servers.&lt;br&gt;
Containers.&lt;br&gt;
Cloud workloads.&lt;/p&gt;

&lt;p&gt;Many of them are Linux-based.&lt;/p&gt;

&lt;p&gt;This means concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File systems&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Processes&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Package managers&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;appear repeatedly across different technologies.&lt;/p&gt;

&lt;p&gt;Learning Linux does not teach a specific cloud provider.&lt;/p&gt;

&lt;p&gt;Instead, it teaches the environment where many cloud workloads live.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Networking Appears Everywhere
&lt;/h2&gt;

&lt;p&gt;The second concept that keeps showing up is networking.&lt;/p&gt;

&lt;p&gt;Every modern application communicates with something.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A browser talking to a server&lt;/li&gt;
&lt;li&gt;A server talking to a database&lt;/li&gt;
&lt;li&gt;Containers communicating with each other&lt;/li&gt;
&lt;li&gt;Services communicating across networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without networking, these systems become isolated.&lt;/p&gt;

&lt;p&gt;Concepts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;Ports&lt;/li&gt;
&lt;li&gt;Protocols&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;appear constantly throughout DevOps workflows.&lt;/p&gt;

&lt;p&gt;Even many cloud services are ultimately abstractions built on networking concepts.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Simple Mental Model
&lt;/h2&gt;

&lt;p&gt;The way I currently think about it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux → Understand the machine

Networking → Understand communication between machines

Cloud → Understand how those machines and networks are managed at scale
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whether this model is perfectly accurate, I'm still not sure.&lt;/p&gt;

&lt;p&gt;But it has helped me organize my learning.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Approach Appeals to Me
&lt;/h2&gt;

&lt;p&gt;One reason I find this approach attractive is that the knowledge feels transferable.&lt;/p&gt;

&lt;p&gt;If a cloud provider introduces a new service tomorrow, understanding Linux and networking still remains valuable.&lt;/p&gt;

&lt;p&gt;The terminology may change.&lt;/p&gt;

&lt;p&gt;The foundations usually remain.&lt;/p&gt;

&lt;p&gt;Learning fundamentals first seems to reduce the feeling of constantly chasing new tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm Learning Next
&lt;/h2&gt;

&lt;p&gt;As part of this journey, I'm currently exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux internals&lt;/li&gt;
&lt;li&gt;Network interfaces&lt;/li&gt;
&lt;li&gt;MAC addresses&lt;/li&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;Packet analysis using Wireshark&lt;/li&gt;
&lt;li&gt;DNS and routing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is not to become an expert overnight.&lt;/p&gt;

&lt;p&gt;It is simply to understand the systems beneath the abstractions a little better.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I don't yet know whether Linux and networking are &lt;em&gt;the&lt;/em&gt; best place to start learning DevOps.&lt;/p&gt;

&lt;p&gt;But they increasingly feel like a reasonable place to begin.&lt;/p&gt;

&lt;p&gt;The more I explore cloud technologies, the more I find myself returning to these fundamentals.&lt;/p&gt;

&lt;p&gt;Perhaps the fastest way to understand complex systems is not to start with the most advanced tools.&lt;/p&gt;

&lt;p&gt;Perhaps it is to understand the layers beneath them first.&lt;/p&gt;

&lt;p&gt;And right now, Linux and networking seem like two of those layers.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>networking</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Keep Your AI Conversations Local: Open WebUI + Ollama Setup</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sun, 05 Apr 2026 02:21:55 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/want-your-ai-to-stay-private-run-a-fully-local-llm-with-open-webui-ollama-3c8f</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/want-your-ai-to-stay-private-run-a-fully-local-llm-with-open-webui-ollama-3c8f</guid>
      <description>&lt;h1&gt;
  
  
  Want Your AI to Stay Private? Run a Fully Local LLM with Open WebUI + Ollama
&lt;/h1&gt;

&lt;p&gt;As LLMs become part of daily workflows, one question comes up more often:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where does the data go?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most cloud-based AI tools send prompts and responses to remote servers for processing.&lt;br&gt;&lt;br&gt;
For many use cases, that’s perfectly fine.&lt;/p&gt;

&lt;p&gt;But in some situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sensitive code&lt;/li&gt;
&lt;li&gt;Personal notes&lt;/li&gt;
&lt;li&gt;Internal documentation&lt;/li&gt;
&lt;li&gt;Experimental ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may prefer not to send that data outside your machine.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;local LLM setups&lt;/strong&gt; become useful.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 What This Setup Provides
&lt;/h2&gt;

&lt;p&gt;This setup creates a &lt;strong&gt;fully local ChatGPT-like experience&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs entirely on your machine&lt;/li&gt;
&lt;li&gt;No external API calls&lt;/li&gt;
&lt;li&gt;No data leaving your system&lt;/li&gt;
&lt;li&gt;Modern chat interface&lt;/li&gt;
&lt;li&gt;Model switching support&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ⚙️ Architecture Overview
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser (Open WebUI)
        ↓
Docker Container (Open WebUI)
        ↓
Ollama API (localhost:11434)
        ↓
Local LLM Model (e.g., mistral)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Everything runs locally.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Components
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Ollama
&lt;/h3&gt;

&lt;p&gt;Runs LLM models locally and exposes an API.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Open WebUI
&lt;/h3&gt;

&lt;p&gt;Provides a ChatGPT-like interface with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat history&lt;/li&gt;
&lt;li&gt;Model selection&lt;/li&gt;
&lt;li&gt;Clean UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔗 &lt;a href="https://openwebui.com/" rel="noopener noreferrer"&gt;https://openwebui.com/&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  3. Docker
&lt;/h3&gt;

&lt;p&gt;Runs Open WebUI in an isolated container.&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Installation &amp;amp; Setup
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Install Ollama
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Start Ollama
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;address already in use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It simply means Ollama is already running.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Pull a Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull mistral
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check available models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. Run Open WebUI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; open-webui:/app/backend/data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;OLLAMA_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://127.0.0.1:11434 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; open-webui &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--restart&lt;/span&gt; unless-stopped &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/open-webui/open-webui:main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌐 Access the Interface
&lt;/h2&gt;

&lt;p&gt;Open your browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You now have a local ChatGPT-style interface.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Important Fix (Docker Networking)
&lt;/h2&gt;

&lt;p&gt;If Open WebUI cannot detect Ollama:&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--network=host
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows the container to directly access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:11434
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without this, Docker may isolate the container from the local API.&lt;/p&gt;




&lt;h2&gt;
  
  
  ▶️ Daily Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start WebUI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker start open-webui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Stop WebUI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker stop open-webui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Check Models
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Run Model in Terminal
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run mistral
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Port already in use (11434)
&lt;/h3&gt;

&lt;p&gt;Ollama is already running — no action required.&lt;/p&gt;




&lt;h3&gt;
  
  
  Model not visible in UI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker restart open-webui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Connection issue
&lt;/h3&gt;

&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://127.0.0.1:11434
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔒 Why This Matters
&lt;/h2&gt;

&lt;p&gt;This setup ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompts stay local&lt;/li&gt;
&lt;li&gt;Files remain on your machine&lt;/li&gt;
&lt;li&gt;No external logging or tracking&lt;/li&gt;
&lt;li&gt;Full control over your environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers working with sensitive code&lt;/li&gt;
&lt;li&gt;Offline workflows&lt;/li&gt;
&lt;li&gt;Learning and experimentation&lt;/li&gt;
&lt;li&gt;Privacy-conscious users&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Trade-offs
&lt;/h2&gt;

&lt;p&gt;Local models are not identical to large cloud models.&lt;/p&gt;

&lt;p&gt;Expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slightly lower reasoning capability&lt;/li&gt;
&lt;li&gt;Slower responses (CPU-based inference)&lt;/li&gt;
&lt;li&gt;Limited context window (depending on model)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for many use cases, they are more than sufficient.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Final Result
&lt;/h2&gt;

&lt;p&gt;You now have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A local LLM (e.g., Mistral)&lt;/li&gt;
&lt;li&gt;A ChatGPT-like interface&lt;/li&gt;
&lt;li&gt;A fully private AI environment&lt;/li&gt;
&lt;li&gt;No dependency on external APIs&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧾 Quick Cheat Sheet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start WebUI&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker start open-webui

&lt;span class="c"&gt;# Open UI&lt;/span&gt;
http://localhost:8080

&lt;span class="c"&gt;# Check models&lt;/span&gt;
ollama list

&lt;span class="c"&gt;# Run model&lt;/span&gt;
ollama run mistral

&lt;span class="c"&gt;# Stop WebUI&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker stop open-webui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🏁 Final Thought
&lt;/h2&gt;

&lt;p&gt;Cloud AI is powerful and convenient.&lt;/p&gt;

&lt;p&gt;Local AI is controlled and private.&lt;/p&gt;

&lt;p&gt;Both have their place.&lt;/p&gt;

&lt;p&gt;This setup simply gives you the option.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>privacy</category>
      <category>linux</category>
    </item>
    <item>
      <title>What Happens Behind the Scenes When You Publish a Website</title>
      <dc:creator>Micheal Angelo</dc:creator>
      <pubDate>Sat, 07 Mar 2026 13:12:04 +0000</pubDate>
      <link>https://dev.to/micheal_angelo_41cea4e81a/what-happens-behind-the-scenes-when-you-publish-a-website-33n2</link>
      <guid>https://dev.to/micheal_angelo_41cea4e81a/what-happens-behind-the-scenes-when-you-publish-a-website-33n2</guid>
      <description>&lt;p&gt;Publishing a website may look simple from the outside.&lt;/p&gt;

&lt;p&gt;You buy a domain, deploy your code, and the site appears on the internet.&lt;/p&gt;

&lt;p&gt;But under the hood, several systems work together to make that happen.&lt;/p&gt;

&lt;p&gt;This article explains the backend journey of a website — from domain registration to a live, accessible website.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Domain Registration
&lt;/h1&gt;

&lt;p&gt;A &lt;strong&gt;domain name&lt;/strong&gt; is the human-readable address used to access a website.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.dev
example.com
example.org
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a domain is purchased through a &lt;strong&gt;domain registrar&lt;/strong&gt; (such as Namecheap, GoDaddy, or Google Domains), the registrar records the ownership in the &lt;strong&gt;global domain registry&lt;/strong&gt; for that specific top-level domain (TLD).&lt;/p&gt;

&lt;p&gt;This process performs three key tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The domain ownership is recorded in the global registry.&lt;/li&gt;
&lt;li&gt;The domain is associated with &lt;strong&gt;authoritative DNS servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;DNS zone&lt;/strong&gt; is created to store configuration records.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this stage, the domain exists — but it does &lt;strong&gt;not yet point to any website&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. DNS: The Internet's Phonebook
&lt;/h1&gt;

&lt;p&gt;The &lt;strong&gt;Domain Name System (DNS)&lt;/strong&gt; translates human-readable domain names into machine-readable IP addresses.&lt;/p&gt;

&lt;p&gt;Computers communicate using numbers such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.0.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Humans prefer domain names like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DNS performs the translation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;domain name → IP address
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When someone enters a domain in a browser, the browser performs a &lt;strong&gt;DNS lookup&lt;/strong&gt; to determine which server hosts the website.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common DNS Records
&lt;/h2&gt;

&lt;p&gt;The DNS zone contains several types of records.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Record
&lt;/h3&gt;

&lt;p&gt;Maps a domain directly to an IP address.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.dev → 192.0.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells browsers exactly which server hosts the site.&lt;/p&gt;




&lt;h3&gt;
  
  
  CNAME Record
&lt;/h3&gt;

&lt;p&gt;Creates an alias from one domain to another hostname.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.example.dev → hosting-provider-domain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is commonly used when hosting platforms manage the underlying infrastructure.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Website Hosting
&lt;/h1&gt;

&lt;p&gt;A website must be stored on a &lt;strong&gt;server connected to the internet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hosting providers manage these servers and respond to requests from visitors.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;static websites&lt;/strong&gt;, the server stores files such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index.html
styles.css
script.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These files are delivered directly to the user’s browser.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;dynamic websites&lt;/strong&gt;, the server may also run backend logic and interact with databases.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js applications&lt;/li&gt;
&lt;li&gt;Python backends&lt;/li&gt;
&lt;li&gt;PHP systems&lt;/li&gt;
&lt;li&gt;Database queries&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  4. Deployment
&lt;/h1&gt;

&lt;p&gt;Deployment is the process of transferring application code from a development environment to a production server where users can access it.&lt;/p&gt;

&lt;p&gt;A typical deployment workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer machine
       ↓
Source code repository
       ↓
Build / deployment system
       ↓
Hosting server
       ↓
Public website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever code is updated and pushed to the repository, the deployment system rebuilds and updates the live website.&lt;/p&gt;

&lt;p&gt;This process is often automated through &lt;strong&gt;CI/CD pipelines&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Connecting the Domain to the Website
&lt;/h1&gt;

&lt;p&gt;Once the website is deployed to a hosting server, the domain must be connected to that server through DNS configuration.&lt;/p&gt;

&lt;p&gt;This is done by adding DNS records that point the domain to the hosting infrastructure.&lt;/p&gt;

&lt;p&gt;The process looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User enters domain
        ↓
DNS lookup occurs
        ↓
DNS returns server IP
        ↓
Browser connects to server
        ↓
Server returns website files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the DNS records are correctly configured, the domain becomes the public entry point to the website.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. DNS Propagation
&lt;/h1&gt;

&lt;p&gt;DNS updates are not instant.&lt;/p&gt;

&lt;p&gt;When DNS records change, the new information must propagate through DNS caches and resolvers across the internet.&lt;/p&gt;

&lt;p&gt;Propagation typically takes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a few minutes to several hours
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During this time, some users may reach the new server while others still see the old configuration.&lt;/p&gt;

&lt;p&gt;This temporary inconsistency is normal.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Secure Access with HTTPS
&lt;/h1&gt;

&lt;p&gt;Modern websites use &lt;strong&gt;HTTPS&lt;/strong&gt; to encrypt communication between users and servers.&lt;/p&gt;

&lt;p&gt;HTTPS requires an &lt;strong&gt;SSL/TLS certificate&lt;/strong&gt; for the domain.&lt;/p&gt;

&lt;p&gt;Once installed, the website becomes accessible securely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encryption ensures that data transmitted between the browser and the server cannot be intercepted or modified.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Architecture Overview
&lt;/h1&gt;

&lt;p&gt;The entire process can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Domain registration
        ↓
DNS configuration
        ↓
Website deployment to hosting server
        ↓
DNS routes domain traffic to the server
        ↓
Users access the website via the domain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This chain of systems — domain registries, DNS servers, hosting infrastructure, and browsers — forms the core infrastructure that makes the modern web possible.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Launching a website involves more than uploading files to a server.&lt;/p&gt;

&lt;p&gt;Behind every domain is an ecosystem of systems working together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain registrars&lt;/li&gt;
&lt;li&gt;DNS infrastructure&lt;/li&gt;
&lt;li&gt;Hosting platforms&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;li&gt;Security layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding this flow provides a clearer mental model of how the internet serves websites to millions of users every day.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>internet</category>
      <category>beginners</category>
      <category>dns</category>
    </item>
  </channel>
</rss>
