IP addresses are divided into classes (A, B, C, D, E) based on the first bits of the address. Classful addressing wastes address space. Subnetting and supernetting borrow bits from the host/network parts to create more efficient variable length subnets and supernets. Classless addressing uses CIDR notation of address/prefix length to define variable length blocks.