Loading content...
While well-known ports (0-1023) handle fundamental internet infrastructure, the vast majority of network services operate in a different territory: the registered port range from 1024 to 49151. This span of 48,128 port numbers hosts database servers, application frameworks, development tools, gaming platforms, enterprise software, and countless specialized protocols.\n\nWhen you connect to MySQL (3306), PostgreSQL (5432), MongoDB (27017), or Redis (6379), you're using registered ports. When your IDE communicates with a language server, when Docker manages containers, when Kubernetes orchestrates pods—all of these operate primarily on registered ports.\n\nUnderstanding this range is essential for application development, server administration, and network security. Unlike well-known ports with their strict privileged restrictions, registered ports are accessible to any user process—making them the practical workhorse of modern networking.
By the end of this page, you will understand the purpose and characteristics of registered ports, the major service categories within this range, how to choose ports for custom applications, port conflict resolution strategies, and best practices for managing registered port usage in production environments.
The registered port range occupies the space between the privileged well-known ports and the dynamic ephemeral ports. Understanding its characteristics helps clarify when and how to use it.\n\nKey Properties:\n\n1. No Privilege Requirements — Unlike well-known ports (0-1023), any user-level process can bind to registered ports on Unix-like systems. This makes them accessible for application development without root access.\n\n2. IANA Registration Available — While not as strictly controlled as well-known ports, services can register ports in this range with IANA. Registration prevents conflicts between major services.\n\n3. Mix of Official and Unofficial Usage — Some ports have formal IANA assignments (MySQL: 3306, PostgreSQL: 5432); others are used by convention without official registration; and many are completely unassigned.\n\n4. No Built-in Client Discovery — Unlike HTTP on port 80, clients for registered port services typically need explicit port configuration or discovery mechanisms (DNS SRV records, configuration files, etc.).
| Characteristic | Well-Known (0-1023) | Registered (1024-49151) | Dynamic (49152-65535) |
|---|---|---|---|
| Count | 1,024 ports | 48,128 ports | 16,384 ports |
| Privilege Required | Root/CAP_NET_BIND (Unix) | None | None |
| Primary Use | System services | Applications | Client connections |
| IANA Control | Strict | Moderate | None (private) |
| Typical Assignment | Infrastructure protocols | Databases, apps, dev tools | Ephemeral/temporary |
| Discovery | Implicit (HTTP→80) | Config or DNS SRV | Assigned by OS |
The upper limit of 49151 is defined by IANA to leave room for the ephemeral range. However, this boundary is a convention, not a technical limitation. Some systems configure ephemeral ranges starting as low as 32768 (Linux default: 32768-60999), creating overlap with the registered range. Applications should be aware of their system's actual ephemeral range.
Database servers are among the most important consumers of registered ports. Each major database system has a conventional port that's become a de facto standard, enabling predictable configuration across different environments.\n\nRelational Databases:
| Database | Default Port | Protocol | Notes |
|---|---|---|---|
| MySQL | 3306 | TCP | Proprietary protocol; also used by MariaDB |
| PostgreSQL | 5432 | TCP | Proprietary protocol |
| Microsoft SQL Server | 1433 | TCP | TDS protocol; 1434/UDP for discovery |
| Oracle Database | 1521 | TCP | TNS Listener; Oracle Net |
| IBM DB2 | 50000 | TCP | Also uses 523/TCP for discovery |
| SQLite | — | — | Embedded (no network port) |
NoSQL and Modern Databases:
| Database | Default Port(s) | Protocol | Notes |
|---|---|---|---|
| MongoDB | 27017 | TCP | Proprietary wire protocol |
| Redis | 6379 | TCP | RESP protocol; lightweight and fast |
| Elasticsearch | 9200, 9300 | TCP | 9200: HTTP REST, 9300: node transport |
| Cassandra | 9042 | TCP | CQL protocol; 7000 for inter-node |
| CouchDB | 5984 | TCP | HTTP-based REST API |
| Neo4j | 7474, 7687 | TCP | 7474: HTTP, 7687: Bolt protocol |
| InfluxDB | 8086 | TCP | HTTP API for time-series data |
| RethinkDB | 28015 | TCP | Client port; 29015 for cluster |
Database ports should almost never be exposed to the public internet. A publicly accessible MySQL (3306) or PostgreSQL (5432) is one of the most common attack vectors. Use firewalls, VPNs, or SSH tunnels to restrict access. Always bind databases to localhost or private network interfaces when possible.
12345678910111213141516
# Bind MySQL to localhost only (in my.cnf)[mysqld]bind-address = 127.0.0.1 # PostgreSQL listen addresses (in postgresql.conf)listen_addresses = 'localhost' # SSH tunnel for remote database accessssh -L 3306:localhost:3306 user@dbserver.example.com # Then connect through the tunnelmysql -h 127.0.0.1 -P 3306 -u dbuser -p # Firewall rules: allow database only from app serversiptables -A INPUT -p tcp --dport 5432 -s 192.168.1.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 5432 -j DROPDevelopment frameworks, application servers, and web technologies commonly use registered ports to avoid privileged port restrictions during development and to enable multiple services on a single host.\n\nCommon Development Ports:
| Technology | Port | Usage |
|---|---|---|
| React/Vite/Vue dev servers | 3000, 5173 | Local development servers |
| Node.js Express (common) | 3000 | REST APIs, web apps |
| Django | 8000 | Python web framework |
| Flask | 5000 | Lightweight Python web |
| Ruby on Rails | 3000 | Ruby web framework |
| ASP.NET Kestrel | 5000, 5001 | 5001 for HTTPS |
| PHP built-in server | 8080 | Development only |
| Jupyter Notebook | 8888 | Interactive computing |
Application and Proxy Servers:
| Server | Port(s) | Purpose |
|---|---|---|
| Apache Tomcat | 8080, 8443 | Java servlet container |
| Nginx (non-privileged) | 8080 | Common alternative HTTP port |
| HAProxy stats | 8404 | Admin interface (configurable) |
| PM2 | 9615 | Process manager API |
| Gunicorn | 8000 | Python WSGI server |
| uWSGI | 3031 | Application server |
| Puma (Ruby) | 9292 | Rack web server |
Port 8080 is the most common alternative HTTP port. It's used when 80 isn't available (privileged), when running multiple web servers, or for development. The '8' prefix is a common pattern for 'alternative' versions: 8080 (HTTP), 8443 (HTTPS), 8000 (generic web). This isn't a standard—just a widely adopted convention.
Modern infrastructure tools—container platforms, orchestrators, CI/CD systems, and observability stacks—each have their conventional ports. Understanding these is crucial for DevOps and platform engineering.\n\nContainer and Orchestration:
| Tool | Port(s) | Purpose |
|---|---|---|
| Docker daemon | 2375, 2376 | 2375: unencrypted, 2376: TLS |
| Docker Registry | 5000 | Container image storage |
| Kubernetes API Server | 6443 | Cluster control plane |
| Kubernetes kubelet | 10250 | Node agent |
| Kubernetes etcd | 2379, 2380 | 2379: client, 2380: peer |
| Kubernetes NodePort | 30000-32767 | Expose services externally |
| containerd | — | Uses Unix sockets (no port) |
| Podman | — | Rootless, typically Unix sockets |
CI/CD and Automation:
| Tool | Port(s) | Purpose |
|---|---|---|
| Jenkins | 8080 | Web UI and API |
| GitLab (all-in-one) | 80, 443, 22 | Web, HTTPS, SSH |
| GitHub Actions runner | 443 | Outbound only (HTTPS) |
| Artifactory | 8081 | Artifact repository |
| Nexus Repository | 8081 | Maven and Docker registry |
| SonarQube | 9000 | Code quality analysis |
| ArgoCD | 8080, 443 | GitOps deployment |
| Drone CI | 8080 | CI/CD platform |
Kubernetes reserves ports 30000-32767 for NodePort services. When running Kubernetes on bare metal or VMs, ensure no other applications use this range—conflicts can prevent pod scheduling or cause routing issues. This range is configurable with the --service-node-port-range flag.
Modern distributed systems rely heavily on message queues, event buses, and real-time communication platforms. Each has conventional ports that enable standard deployments.\n\nMessage Brokers and Queues:
| System | Port(s) | Protocol/Purpose |
|---|---|---|
| RabbitMQ | 5672, 15672 | 5672: AMQP, 15672: Management UI |
| Apache Kafka | 9092 | Broker port; 2181 for ZooKeeper |
| Apache ZooKeeper | 2181 | Coordination service |
| ActiveMQ | 61616 | OpenWire; 8161 for web console |
| NATS | 4222 | Client connections |
| Redis (as queue) | 6379 | Pub/sub and list-based queues |
| Amazon SQS | 443 | AWS API over HTTPS |
| NSQ | 4150, 4151 | 4150: TCP, 4151: HTTP |
Real-Time Communication:
| Technology | Port(s) | Purpose |
|---|---|---|
| MQTT (IoT) | 1883, 8883 | 1883: unencrypted, 8883: TLS |
| WebSocket | 80, 443 | Piggybacks on HTTP/HTTPS ports |
| Socket.IO | 3000+ | Uses WebSocket over HTTP ports |
| gRPC | Any (common: 50051) | HTTP/2-based RPC |
| XMPP | 5222 | Instant messaging |
| SIP | 5060, 5061 | VoIP signaling |
| RTP (VoIP media) | 10000-20000 | Dynamic range for voice/video |
gRPC services commonly use port 50051 by convention (seen in gRPC's 'Hello World' examples), but this is purely conventional. gRPC can run on any port. In microservice architectures, each gRPC service often gets its own unique port for direct access.
Monitoring, logging, and tracing systems form the observability stack essential for production systems. Understanding their ports helps with firewall configuration and network topology planning.\n\nMetrics and Monitoring:
| Tool | Port(s) | Purpose |
|---|---|---|
| Prometheus | 9090 | Metrics server and query API |
| Grafana | 3000 | Visualization dashboards |
| Node Exporter | 9100 | Host metrics for Prometheus |
| cAdvisor | 8080 | Container metrics |
| Alertmanager | 9093 | Alert routing and deduplication |
| StatsD | 8125 | UDP metrics aggregation |
| InfluxDB | 8086 | Time-series database API |
| Telegraf | 8125, 8092 | Metrics collection agent |
Logging and Tracing:
| Tool | Port(s) | Purpose |
|---|---|---|
| Elasticsearch | 9200, 9300 | Log storage and search |
| Logstash | 5044 | Log processing pipeline |
| Fluentd | 24224 | Log forwarding |
| Kibana | 5601 | Log visualization |
| Jaeger | 16686, 14268 | Distributed tracing |
| Zipkin | 9411 | Distributed tracing |
| Syslog (rsyslog) | 514 | Traditional logging (also UDP) |
| Graylog | 9000, 12201 | Log management |
Notice how many monitoring tools use the 9xxx range: Prometheus (9090), Node Exporter (9100), Alertmanager (9093), Jaeger (9411), Graylog (9000), Elasticsearch (9200). While not officially coordinated, this range has become an informal home for observability tools. Be aware of this when planning port allocations.
When developing your own services, selecting appropriate ports requires balancing several considerations:\n\nDecision Framework:\n\n1. Check for conflicts — Before choosing a port, verify it's not already assigned by IANA or commonly used by major software.\n\n2. Consider the environment — Ports used in development should differ from production. Development often uses higher ranges (3000-9999) while production may use lower registered ports with standardized meanings.\n\n3. Follow conventions — If your service is similar to an existing category (e.g., a database, web server, or metrics endpoint), consider nearby ports to signal its nature.\n\n4. Document your choice — Whatever port you choose, document it clearly. Include the port in service documentation, Docker Compose files, and Kubernetes manifests.
12345678910111213141516171819
// Good: Port is configurable via environmentconst PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);}); // Even better: With validationconst PORT = parseInt(process.env.PORT, 10) || 3000; if (PORT < 1 || PORT > 65535) { console.error('Invalid port number'); process.exit(1);} if (PORT < 1024 && process.getuid() !== 0) { console.error('Privileged port requires root'); process.exit(1);}We've explored the registered port range—the working space where most application-level networking occurs. Let's consolidate the key concepts:
What's Next:\n\nHaving covered well-known and registered ports, we'll complete the picture with the ephemeral port range (49152-65535) in the next page. This dynamic range is where client connections originate—automatically managed by operating systems and crucial for high-performance networking.
You now understand registered ports—the vast middle ground between privileged infrastructure ports and ephemeral client ports. This range hosts databases, application servers, DevOps tools, monitoring systems, and countless custom services that power modern networked applications.