Visual Subnet Calculator
Split any IPv4 block into a tree, join siblings back, and see what each cloud provider actually reserves — entirely on this device.
| Block | Usable range | Usable hosts | Label | Split or join |
|---|---|---|---|---|
| 10.0.0.0/24 | 10.0.0.1 – 10.0.0.254 | 254 |
Every address of the root block is in exactly one row above. Network, broadcast, mask and binary view for one block
Press ? for shortcuts
Do it offline:$ python3 -c "import ipaddress; print(*ipaddress.ip_network('10.0.0.0/24').subnets(new_prefix=26))"
How to use it
- Type the block into the root field — 10.0.0.0/24, a dotted mask, or a bare address, read as a /24 with a note saying so.
- Press Split on any row to halve it; repeat on either half to go deeper. The tree keeps every leaf, not just the last cut.
- Press Join to undo one cut. Only the pair a single split produced can recombine, so the plan stays aligned.
- Label the rows you have settled — dmz, db; splitting a block retires its label until the halves rejoin.
- Choose a provider for per-row reserved counts, then copy the plan as JSON or CSV, download it, or Share a link carrying cuts and labels.
Start from one block, cut it where your networks actually fall, and put the pieces back when a plan changes: each row splits into two halves, and any pair a split produced joins again. Pick a cloud provider and each row also shows what that provider takes out of every subnet, with its own count and its own documentation date.
Examples
10.0.0.0/2410.0.0.0/26 · 10.0.0.64/26 · 10.0.0.128/26 · 10.0.0.192/26 — 62 usable hosts eachTwo rounds of splitting: the /24 becomes two /25s, and each of those two /26s — four quarters covering the block end to end.
10.0.0.0/26 + 10.0.0.64/2610.0.0.0/25 · usable 10.0.0.1 – 10.0.0.126 · 126 usable hostsThe reverse of the first cut: two halves of one /25, so Join returns the parent — 126 usable addresses where the halves held 62 each, because the boundary pair in the middle stops being one.
10.0.0.64/26 + 10.0.0.128/2610.0.0.64/26 and 10.0.0.128/26 aren't the two halves of one block — a join only recombines the pair a single split produced; split a block first, then join its two halvesThe edge case worth knowing: the blocks touch, but no single cut produced them as a pair — their common parent is the /24, not a /25. The tree is left as it was.
10.0.0.0/28Amazon Web Services 11 usable · Microsoft Azure 11 usable · Google Cloud 12 usableSixteen addresses, three answers, side by side and never averaged into one cloud figure: two providers take five addresses per subnet, the third takes four.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
A /31 splits into two host routes, and a /32 refuses
Cutting a /31 hands back two /32 rows, each one address with no range inside it. Splitting one of those is refused: there is no /33.
Touching is not the same as joinable
Same-size neighbours join only when one split made them: the higher network address must differ from the lower by exactly one bit. Different-sized rows never join.
What the root field accepts, and what it turns away
A prefix, a dotted mask, or a bare address read as a /24 with the assumption on screen. A colon is turned away as IPv6 — out of scope here — and so is a leading zero. The single-block numbers for any row, binary view included, live on /subnet-calculator.
The plan stops at 1,024 rows
Ten levels of splitting from one root reach the cap; past it Split is unavailable and the reason is printed, nothing trimmed to make room.
Each provider's smallest subnet is its own number
Reserved counts only mean something inside the sizes a provider will allocate, so a row outside that range shows that provider's own note. Every limit is dated to its own documentation.
Common errors
10.0.0.64/26 and 10.0.0.128/26 aren't the two halves of one block — a join only recombines the pair a single split produced; split a block first, then join its two halves- Same size, side by side, different parents — join each row's own pair first.
0.0.0.0/0 is the whole IPv4 address space — /0 has no parent block to join into; split it instead, or start from a smaller root block- Nothing sits above the root, so at the top a join has no meaning.
10.0.0.0/25 and 10.0.0.0/26 overlap or are out of order — a plan is a sorted list of non-overlapping blocks; sort the rows by network address and remove the overlap- An engine-API guard, not a page path: replaying a shared link only splits, so no row can nest. Gaps are fine, overlap is not.
This plan has 1,025 rows — the limit is 1,024 rows; join some blocks or start from a smaller root block- Another engine-API guard; on the page the cap arrives a row at a time, under the tool's own banner.
/32 can't be split into 2 subnets — that needs /33, past /32- A single address is the end of the road: IPv4 has 32 bits, with no thirty-third to borrow.
This looks like an IPv6 address — this calculator is IPv4-only. An IPv6 subnet calculator is planned but not yet available.- Any colon in the root field lands here, since no IPv4 form has one, and your text is left in place.
`010` is ambiguous (octal in some parsers) — write `10`- Some parsers read a leading zero as base 8 and some as base 10, so one string can name two networks. The refusal hands back the unambiguous spelling.
FAQ
How do I split a /24 into four /26 subnets?
Split the /24 once for two /25s, then split each: the result is 10.0.0.0/26, 10.0.0.64/26, 10.0.0.128/26 and 10.0.0.192/26, with 62 usable hosts in each. Every level doubles the count and halves the size, so reachable counts are powers of two.
Why won't two neighbouring subnets of the same size join?
Because a join is the exact inverse of a split, not a general merge. Take 10.0.0.64/26 and 10.0.0.128/26: adjacent and equal in size, yet the first is the upper half of 10.0.0.0/25 and the second the lower half of 10.0.0.128/25. No single cut produced them, so the tool refuses rather than invent an overlapping block.
How many usable addresses does a /28 have on AWS, Azure and Google Cloud?
Eleven on Amazon Web Services, eleven on Microsoft Azure and twelve on Google Cloud, out of the 16 a /28 contains: the first two reserve five addresses per subnet, the third four. Each figure carries its own source document and read date.
Keyboard shortcuts
- s
- Split the focused row into two halves (ignored while typing).
- j
- Join the focused row with its sibling, when one split made the pair.
- ⌘/Ctrl + Z
- Step back through the structural edits, labels included, fifty deep.
- ⌘/Ctrl + Shift + Z
- Step forward again after stepping back.
- ⌘/Ctrl + C
- Copies the plan as JSON when nothing is selected; label fields are exempt.
- ⌘/Ctrl + Shift + C
- Copies the plan as JSON whatever is selected.
- ⌘/Ctrl + S
- Downloads the plan as a .json file, overriding the browser's save dialog.
- t
- Cycle the color theme (ignored while typing or composing with an IME).
- ?
- Opens the shortcuts overlay (inactive while typing).
- Esc
- Closes the topmost overlay and restores focus to its opener.