A typical VPC subnet
- Input
- 10.0.1.0/24
- Result
- 254 usable hosts, 251 inside a VPC
The network and broadcast addresses are never assignable, and the cloud provider takes three more.
Work out what a CIDR block actually contains: network and broadcast addresses, the usable host range, and the smaller count you really get inside a VPC, where the provider keeps five addresses per subnet.
Common blocks
AWS, Azure and GCP each reserve five addresses per subnet.
Runs entirely in your browser. This page is a static file. Whatever you type stays in the tab, is never sent to a server, and is gone when you close it — so pasting a real token or config is safe.
/24 still has room before adding another node pool or load balancer.The network and broadcast addresses are never assignable, and the cloud provider takes three more.
Four subnets, so one is left spare — usually the right call, because you cannot resize a subnet later.
RFC 3021 removed the network/broadcast pair for /31, which is why router links use it.
A /28 looks like 14 usable hosts and gives you 11 in AWS. The provider takes the network address, the router, DNS, one for future use, and the broadcast address.
Two VPCs that both use 10.0.0.0/16 cannot be peered. Allocate non-overlapping ranges up front, because changing one later means rebuilding every subnet in it.
A subnet's prefix cannot be changed after creation. A /24 that fits now runs out the first time an autoscaler doubles the node count.
In every subnet AWS reserves the network address, the VPC router (.1), the DNS resolver (.2), one address for future use (.3) and the broadcast address. So a /24 yields 251 assignable addresses, not 254.
AWS, Azure and GCP accept prefixes from /16 down to /28, giving 11 usable addresses at the smallest. Outside the cloud, /31 is valid for point-to-point links and /32 describes a single host.
RFC 1918 defines 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16. Pick from 10/8 for anything that might grow, keep 192.168/16 for home and lab networks, and avoid 172.17/16 because Docker uses it by default.