Skip to content
All writing
Infrastructure31 May 20257 min read

Simplifying Web Infrastructure: Ports, Protocols & Performance

Have you ever used localhost:3000 when you're running a React or Node.js app on your computer? Or maybe you've tried localhost:8080 while working with a Java app? And what about visiting a secure website using https://?

What if I told you that all these actions depend on the same concept — TCP ports? By learning about this, you’ll get to know how things are handled internally.

We’ll break this blog into three parts:

  • Part 1: Localhost & Ports

  • Part 2: Server-Side Scaling

  • Part 3: Global Web Infrastructure

Part 1: Localhost & Ports

What Does localhost:3000 Actually Mean?

  • localhost → Special hostname that refers to your own machine

  • It maps to the loopback IP address: 127.0.0.1

  • 3000 → A port number: a logical gateway for apps to communicate

So, when you access localhost:3000, it means:

“Connect to a program running on my machine that is listening on port 3000.”

Understanding Ports: The Basics

A port is a 16-bit unsigned integer—a number from 0 to 65535.

It's used in both TCP and UDP networking protocols to identify a specific application running on a device.

Port Ranges

Range Type Example Services
0–1023 Well-known ports 80 (HTTP), 443 (HTTPS), 22 (SSH)
1024–49151 Registered ports 3306 (MySQL), 5432 (PostgreSQL)
49152–65535 Ephemeral/dynamic Used by OS for outbound connections

⚠️ Reserved Ports (0–1023)

You need admin/root privileges to use these ports. You can't simply run a server on port 80 without getting permission.

✅ Development Ports (e.g., 3000)

Ports like 3000, 5000, or 8080 are not reserved, which is why many frameworks choose them by default.

Are More Powerful Machines Given More Ports?

No. Every machine, regardless of its hardware, has exactly:

  • 65536 ports for each protocol (TCP and UDP)

  • This is set by networking standards, not by the machine's hardware

Here's the interesting part: even though the number of ports is fixed, how many connections a machine can handle at the same time depends on:

Factor Effect
RAM Each socket consumes memory
CPU Higher core count = more connections handled concurrently
File descriptors Limited per process (can be tuned)
OS constraints Like socket backlog size or TCP buffers

💡 File Descriptors (FDs)
In Unix-like systems, everything is a file — including sockets.

  • Each socket = 1 file descriptor

  • Per-process FD limits are governed by:

    • ulimit -n (soft limit)

    • /etc/security/limits.conf or /proc/sys/fs/file-max (system-wide)

Where Do Ports “Exist”?

Ports aren't physical like USB or HDMI ports. Instead, they are:

  • Tracked in kernel memory

  • Managed through a socket table

  • Referenced in TCP/UDP headers during data transmission

Layers Involved:

Layer What Happens
App Layer App binds to a port (e.g., listen(3000))
OS Kernel Allocates socket, tracks IP+port+protocol
Transport Layer TCP/UDP adds port info in headers
NIC (Network Card) Sends/receives raw packets — ports are irrelevant here

There’s no chip inside your PC that holds “the ports”—it’s all software abstraction.

How Tabs Use the Same Port 443 Without Collisions

If every HTTPS site uses port 443, how can different tabs or users all share it?

✅ The Answer: TCP 4-Tuple Uniqueness

Every TCP connection is identified by a unique combination of:

(source IP, source port, destination IP, destination port)

So your browser tabs do this:

Tab Source Port Destination (e.g., google.com:443)
A 53123 443
B 53124 443
C 53125 443

Even though they all aim for port 443, each connection is unique because they use different source ports. The operating system keeps track of them and manages them separately.

Part 2: Server-Side Scaling

How One Server Port (e.g., 443) Serves Thousands

On the server side:

  • The server listens on a single socket (e.g., 0.0.0.0:443).

  • Each client connection is given its own unique socket, created from:

  •   (client IP, client port, server IP, server port)
    

This is TCP multiplexing in action.

Every incoming connection is accepted, and the operating system creates a new socket for it, keeping the main listening port open for new connections.

Real-Life Example

Client IP Client Port Server IP Server Port Unique?
192.0.2.10 53100 93.184.216.34 443 ✅
192.0.2.11 53101 93.184.216.34 443 ✅

Maximum Limits of a Single Server

Here’s what actually limits how many clients a server can handle:

Resource Default Limit Tunable?
File Descriptors ~1024 per process ✅ Yes
Socket Backlog ~128 ✅ Yes
RAM Usage ~70KB per client ✅ Yes
CPU Threads Depends on design ✅ Yes
Bandwidth NIC-bound ✅ Yes

With 8 GB RAM, a well-optimized server can manage over 100,000 connections at the same time, as long as the data is lightweight and the architecture is asynchronous.

When One Server Isn’t Enough

As demand increases, one server can't:

  • Accept more connections

  • Handle more encryption (TLS)

  • Process more requests

That's when we need to scale.

Two Types of Scaling:

Type Description
Vertical Scaling Add more RAM/CPU to one machine
Horizontal Scaling Add more machines, distribute load

Load Balancers: The Gatekeepers of Scale

A load balancer sits in front of multiple servers and handles:

Function Purpose
Traffic Routing Directs requests to least-busy node
Health Checks Avoids sending traffic to failed nodes
Failover Switches traffic if a server dies
Sticky Sessions Keeps same user on same backend

Tools: NGINX, HAProxy, Envoy, AWS ELB, Cloudflare

Bonus: Port Exhaustion

Port exhaustion occurs when:

  • A client machine opens too many outbound connections

  • It runs out of temporary ports (49152–65535)

You can fix this by:

  • Using connection pooling

  • Enabling keep-alives to reuse TCP connections

  • Adjusting the interval for reusing temporary ports

Part 3: Global Web Infrastructure

DNS: More Than Just Names

DNS resolves example.com to an IP. But with advanced techniques, it also:

Type Behavior
GeoDNS Resolves to nearest server geographically
Round-Robin Alternates between multiple IPs
Anycast Routes to closest node sharing same IP

DNS is essential for scaling globally and delivering content based on region.

Other Tools in Large-Scale Web Infrastructure

Tool/Concept Purpose
Redis / Memcached Speed up repeated lookups with caching
CDNs (Cloudflare) Serve static assets from edge servers
WebSockets Persistent connection for real-time apps
HTTP/2 / QUIC Multiplexing streams, faster handshakes
Kafka / RabbitMQ Async task queues
Microservices Split app into smaller, manageable units

Firewalls, NAT, and Port Forwarding

Before your request even gets to the server:

  • Firewalls can block specific ports entirely, like port 22 from outside access.

  • NAT routers convert public IPs and ports to private ones.

  • Port Forwarding sends traffic from an external port X to an internal port Y.

Your localhost:3000 might become example.com:80 through forwarding and load balancing.

About me 👋🏻

Hi! I'm Ashutosh, a passionate Software Developer 🚀

Let's build the future of technology together!