/29 subnet: 255.255.255.248, 8 addresses

8 addresses (6 usable hosts)

A /29 has the netmask 255.255.255.248 and holds 8 addresses, 6 of them usable hosts. Every /29 starts on a multiple of 8: 10.0.0.8/29 has network 10.0.0.8, hosts 10.0.0.9 to 10.0.0.14, and broadcast 10.0.0.15.

The numbers

Network        10.0.0.8/29
Broadcast      10.0.0.15
Netmask        255.255.255.248
Wildcard       0.0.0.7
First host     10.0.0.9
Last host      10.0.0.14

How it fits

A /24 holds 32 /29s and a /28 holds two. A /29 splits into 2 /30s or 4 /31s.

Where you’ll see it

The smallest subnet on Azure and Google Cloud. Both accept a /29 as their smallest IPv4 subnet (AWS stops at /28), and each keeps its own share of the 8. Azure reserves the first four addresses and the last; Google Cloud the first two and the last two. In 10.0.0.8/29:

Azure          .8  .9  .10  .11  .15     3 usable, .12 to .14
Google Cloud   .8  .9  .14  .15          4 usable, .10 to .13

An ISP’s static block. Business internet plans often come with a public /29. Take 203.0.113.8/29: .8 and .15 are the network and broadcast addresses, .9 to .14 are the six hosts, and the ISP’s router takes one of those as your gateway. That leaves the 5 usable addresses the plan advertises.

Gotchas

  • “Usable” depends on who’s counting. The textbook /29 has 6 usable hosts, Azure leaves 3, Google Cloud 4, and an ISP block 5 once the gateway is set. When a form, a quote or a capacity plan says “usable”, find out which.
  • The gateway comes from the ISP. The router address in a static block is fixed by the provider. Configure hosts with the netmask 255.255.255.248 and that gateway, not with a /24 guessed from the first three octets.

In your stack

# Terraform: the second /29 of a /24
cidrsubnet("10.0.0.0/24", 5, 1)          # "10.0.0.8/29"
# Google Cloud: a /29 subnet
gcloud compute networks subnets create tiny --network=main --region=us-central1 --range=10.0.0.8/29

# Linux: one of the five public addresses, if the ISP's router is 203.0.113.9
ip addr add 203.0.113.10/29 dev eth0
ip route add default via 203.0.113.9
import ipaddress
[str(h) for h in ipaddress.ip_network("203.0.113.8/29").hosts()]
# ['203.0.113.9', '203.0.113.10', ..., '203.0.113.14']

Try it in the CIDR & Subnet Calculator

10.0.0.8/29 Private (RFC 1918)

Network10.0.0.8/29
Broadcast10.0.0.15
Netmask255.255.255.248
Wildcard0.0.0.7
Mask, binary11111111.11111111.11111111.11111000
First host10.0.0.9
Last host10.0.0.14
Addresses8
Usable hosts6
KindPrivate (RFC 1918)

Enter a longer prefix to list the subnets, like /30.

Runs in your browser. Nothing you enter is sent anywhere.