How many IPv4 addresses are there?
An acquaintant posted the following question on an IRC channel earlier today:
How many IPv4 addresses are there?
The quick and simple answer is 232 = 4,294,967,296 addresses.
Is this an accurate answer? Yes, in a strict interpretation of the original question.
A far more interesting puzzle is if you want to account for all the IPv4 addresses usable on the public internet.
Let’s begin by summing all the available addresses from classes A, B, and C. After all, the multicast addresses in class D are limited to their specific usage. The same goes for the class E addresses, which are off-limits in most systems anyway.
Remember, class A addresses are distinguished by the most significant bit being set to 0 (zero), leaving 31 bits to play with. Class B addresses are distinguished by the two most significant bits being set to 10 (one-zero), leaving 30 bits to play with. And finally, class C addresses are distinguished by the three most significant bits being set to 110 (one-one-zero), leaving 29 bits to play with.
Here’s a fair approximation:
231 + 230 + 229 = 2,147,483,648 + 1,073,741,824 + 536,870,912 = 3,758,096,384.
What remain is to subtract all the subnets reserved for various purposes.
The Wikipedia article on Reserved IP addresses, as accessed on 2015-05-09T13:00:00+0200, marks these subnets within the classes A, B, and C, as reserved:
CIDR | Number of Unique Addresses | Purpose |
---|---|---|
0.0.0.0/8 | 16,777,216 | Used for broadcast messages to the current (“this”) network as specified by RFC 1700, page 4. |
10.0.0.0/8 | 16,777,216 | Used for local communications within a private network as specified by RFC 1918. |
100.64.0.0/10 | 4,194,304 | Used for communications between a Service Provider and its subscribers when using a Carrier-grade NAT (CGN), as specified by RFC 6598. |
127.0.0.0/8 | 16,777,216 | Used for lookback addresses to the local host, as specified by RFC 3330. |
169.254.0.0/16 | 65,536 | Used for autoconfiguration between two hosts on a single link when no IP address is otherwise specified, such as would have normally been retrieved from a DHCP server, as specified by RFC 3330. |
172.16.0.0/12 | 1,048,576 | Used for local communications within a private network as specified by RFC 1918. |
192.0.0.0/24 | 256 | Used for the IANA IPv4 Special Purpose Address Registry as specified by RFC 5736. |
192.0.2.0/24 | 256 | Assigned as “TEST-NET” in RFC 5737 for use solely in documentation and example source code and should not be used publicly. |
192.88.99.0/24 | 256 | Used by 6to4 anycast relays as specified by RFC 3068. |
192.168.0.0/16 | 65,536 | Used for local communications within a private network as specified by RFC 1918. |
198.18.0.0/15 | 131,072 | Used for testing of inter-network communications between two separate subnets as specified in RFC 2544. |
198.51.100.0/24 | 256 | Assigned as “TEST-NET-2” in RFC 5737 for use solely in documentation and example source code and should not be used publicly. |
203.0.113.0/24 | 256 | Assigned as “TEST-NET-3” in RFC 5737 for use solely in documentation and example source code and should not be used publicly. |
OK, let’s do some subtraction:
3,758,096,384 | 231 + 230 + 229 | |
– | 16,777,216 | 0.0.0.0/8 |
– | 16,777,216 | 10.0.0.0/8 |
– | 4,194,304 | 100.64.0.0/10 |
– | 16,777,216 | 127.0.0.0/8 |
– | 65,536 | 169.254.0.0/16 |
– | 1,048,576 | 172.16.0.0/12 |
– | 256 | 192.0.0.0/24 |
– | 256 | 192.0.2.0/24 |
– | 256 | 192.88.99.0/24 |
– | 65,536 | 192.168.0.0/16 |
– | 131,072 | 198.18.0.0/15 |
– | 256 | 198.51.100.0/24 |
– | 256 | 203.0.113.0/24 |
= | 3,702,258,432 | The final number |
All in all, this leaves the world with 3,702,258,432 IPv4 addresses for public use. Subnetting will further diminish this number.
With roughly six billion people on the Earth, this is clearly inadequate. And CGN is only a temporarily measure. Forget it. When will the world finally embrace IPv6, or its successor? Geoff Huston’s automated IPv4 address exhaustion report doesn’t scare people as much as it probably should.
Acknowledgement: Many thanks to MammaGutt
@EFnet for spotting my overuse of the minus sign.