An IPv4 address looks like this:
192.168.1.20
Four numbers, each 0 to 255, separated by dots. That format is a convenience for humans. The machine sees a single 32-bit number, and the dots are there because 32 ones and zeros are unreadable.
Each of the four numbers is called an octet, because each represents 8 bits. Four octets, 8 bits each, 32 bits in total — which is why there are about 4.3 billion IPv4 addresses, and why we ran out.
An address has two parts
This is the idea the whole section rests on.
An IP address is not one flat number. It is split into a network part and a host part:
192.168.1 .20
└─network─┘ └host┘
The network part says which network this machine is on. The host part says which machine within that network.
The analogy that holds up: a street name and a house number. Everyone on the same street shares the street name; the house number distinguishes them. A postal worker delivering across the city routes by street, and only looks at house numbers once on the right street.
Routers work exactly this way. They move packets toward the right network, and only the final router on that network cares which host.
Where is the split?
Here is the question that makes this non-trivial. In 192.168.1.20, is the network part 192.168.1? Or 192.168? Or something that does not fall on a dot at all?
You cannot tell from the address alone. The address by itself is ambiguous, and this is the single most common reason people find subnetting confusing — they look for the answer in the address, and it is not there.
The split is defined by a second piece of information that always travels with the address: the subnet mask. Which is the next lesson, and the rest of this section.
An IP address on its own is incomplete, in the same way "20" is not an address without a street. Whenever you see an address written without a mask or a slash, some default is being assumed — and assumed defaults are where mistakes live.