Private IP Address Ranges

Private IP addresses are reserved for internal network use and are not routable on the public internet. RFC 1918 defines three private address ranges for IPv4, while additional special-use ranges serve specific purposes like link-local addressing and loopback testing.

info Key Point

Private IPs can be reused across different networks. Your home router uses 192.168.1.1 - and so do millions of others. NAT (Network Address Translation) maps private IPs to public IPs for internet access.

RFC 1918 Private Ranges

These three ranges are defined by RFC 1918 for private internets. They will never be assigned as public addresses.

10.0.0.0/8

Class A private range. The largest block, commonly used by enterprises and cloud providers.

Range
10.0.0.0 - 10.255.255.255
Subnet Mask
255.0.0.0
Total Addresses
16,777,216
Common Use
Enterprise, AWS VPC, Kubernetes

172.16.0.0/12

Class B private range. Often used for container networks and internal services.

Range
172.16.0.0 - 172.31.255.255
Subnet Mask
255.240.0.0
Total Addresses
1,048,576
Common Use
Docker (172.17.x.x), Medium orgs

192.168.0.0/16

Class C private range. The most recognized range, used by home routers worldwide.

Range
192.168.0.0 - 192.168.255.255
Subnet Mask
255.255.0.0
Total Addresses
65,536
Common Use
Home networks, Small offices

Quick Lookup Table

CIDR Block First IP Last IP Addresses Type
10.0.0.0/8 10.0.0.0 10.255.255.255 16,777,216 Private
172.16.0.0/12 172.16.0.0 172.31.255.255 1,048,576 Private
192.168.0.0/16 192.168.0.0 192.168.255.255 65,536 Private
lightbulb Memory Trick

10.x.x.x - Starts with 10 (easy to remember)
172.16-31.x.x - Second octet 16-31 only (not all 172.x.x.x)
192.168.x.x - The "home network" range everyone knows

Other Special-Use IPv4 Ranges

Beyond RFC 1918, several other address ranges have special purposes and are not routable on the public internet.

CIDR Block Range Purpose RFC
127.0.0.0/8 127.0.0.0 - 127.255.255.255 Loopback Local host (typically 127.0.0.1) RFC 1122
169.254.0.0/16 169.254.0.0 - 169.254.255.255 Link-Local Auto-configured when DHCP fails RFC 3927
100.64.0.0/10 100.64.0.0 - 100.127.255.255 CGN Carrier-grade NAT (ISP internal) RFC 6598
192.0.0.0/24 192.0.0.0 - 192.0.0.255 IETF Protocol Protocol assignments RFC 6890
192.0.2.0/24 192.0.2.0 - 192.0.2.255 Documentation TEST-NET-1 for examples RFC 5737
198.51.100.0/24 198.51.100.0 - 198.51.100.255 Documentation TEST-NET-2 for examples RFC 5737
203.0.113.0/24 203.0.113.0 - 203.0.113.255 Documentation TEST-NET-3 for examples RFC 5737
198.18.0.0/15 198.18.0.0 - 198.19.255.255 Benchmarking Network device testing RFC 2544
224.0.0.0/4 224.0.0.0 - 239.255.255.255 Multicast One-to-many delivery RFC 5771
240.0.0.0/4 240.0.0.0 - 255.255.255.254 Reserved Future use (Class E) RFC 1112
255.255.255.255/32 255.255.255.255 Broadcast Limited broadcast address RFC 919
0.0.0.0/8 0.0.0.0 - 0.255.255.255 This Network Source only, for DHCP/boot RFC 1122

IPv6 Private/Special Ranges

Prefix Purpose IPv4 Equivalent
::1/128 Loopback Localhost 127.0.0.1
fc00::/7 Unique Local Private IPv6 (ULA) 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
fe80::/10 Link-Local Auto-configured, single link only 169.254.0.0/16
::ffff:0:0/96 IPv4-Mapped IPv4 addresses in IPv6 format N/A
2001:db8::/32 Documentation Examples and documentation 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24
ff00::/8 Multicast One-to-many delivery 224.0.0.0/4

Common Network Configurations

home Home Router

192.168.1.0/24
Gateway: 192.168.1.1
Hosts: 192.168.1.2 - 192.168.1.254

cloud AWS Default VPC

172.31.0.0/16
Subnets: 172.31.0.0/20 per AZ
65,536 total addresses

developer_board Docker Default

172.17.0.0/16
Bridge network default
Gateway: 172.17.0.1

hub Kubernetes Pods

10.244.0.0/16
Flannel default (varies by CNI)
Per-node: /24 subnets

Is This IP Private?

# Quick regex check for private IPv4
# 10.x.x.x
^10\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

# 172.16.x.x - 172.31.x.x
^172\.(1[6-9]|2[0-9]|3[0-1])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

# 192.168.x.x
^192\.168\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
# Bash function to check if IP is private
is_private_ip() {
    local ip=$1
    if [[ $ip =~ ^10\. ]] || \
       [[ $ip =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]] || \
       [[ $ip =~ ^192\.168\. ]]; then
        echo "Private"
    else
        echo "Public (or special-use)"
    fi
}

# Usage
is_private_ip "192.168.1.100"  # Private
is_private_ip "8.8.8.8"        # Public
warning Common Mistake

172.16-31.x.x is private, but 172.0-15.x.x and 172.32-255.x.x are PUBLIC. The entire 172.x.x.x range is not private - only 172.16.0.0 through 172.31.255.255.

Check Your IP Address

See your public and private IP addresses instantly.

search What Is My IP