IP addresses and subnets
Read an IPv4 address and prefix
Interpret an IPv4 address together with its CIDR prefix length instead of treating the address alone as a network.
An IPv4 address contains 32 bits, usually written as four decimal numbers such as 192.0.2.34. Each number is one byte, 0 through 255. An interface also needs a prefix length, such as /24, and the address means very little without it.
The prefix length says how many leading bits identify the network. The remaining bits identify addresses inside that network. 192.0.2.34/24 belongs to the prefix 192.0.2.0/24: the first 24 bits (the first three numbers) name the network, and the last 8 bits name this particular host.
Look at your own interface and you’ll always find the two together:
ip -4 address show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.1.20/24 brd 192.168.1.255 scope global dynamic eth0
The inet line is the fact that matters: this interface is 192.168.1.20, inside the network 192.168.1.0/24. On macOS, ifconfig en0 shows the same information as an address plus netmask 0xffffff00. That hexadecimal mask is /24 written the old way, 24 one-bits followed by 8 zero-bits.
The prefix decides who’s local
Two addresses that look similar are not necessarily local neighbors. The prefix length determines whether the sender considers a destination on-link or sends it to a router.
Ask your kernel directly how it would reach two destinations:
ip route get 192.168.1.50
# 192.168.1.50 dev eth0 src 192.168.1.20
ip route get 192.168.2.50
# 192.168.2.50 via 192.168.1.1 dev eth0 src 192.168.1.20
192.168.1.50 matches your /24, so the answer has no via: deliver directly on the link. 192.168.2.50 differs in the third byte, falls outside the prefix, and gets a via 192.168.1.1. Hand it to the router. One byte of difference, a completely different delivery path.
Record both, always
Always write down an interface as address plus prefix. An address without its prefix is incomplete configuration information. You can’t tell which destinations are local, what the broadcast address is, or whether two machines should see each other directly.
A classic misconfiguration: two machines on the same cable, one set to /24 and the other to /16. Each computes a different idea of what’s local. Traffic flows one way but not the other, and everything half-works. Whenever direct communication between neighbors fails, compare prefixes first.
Lesson completed