Однако после значительного увеличения числа хостов, подключенных к Internet, возникла необходимость разбивать сети на подсети иными способами. Теперь можно встретить маску сети, которая не заканчивается на границе байта. Например, маска сети 255.255.255.128 (с двоичным представлением 11111111,11111111,11111111,10000000) разбивает последний байт на две части и создает множество сетей со 126 хостами.
Современные маршрутизаторы Internet перенаправляют пакеты на основе более гибкой схемы, получившей название бесклассовой междоменной маршрутизации (CIDR — Classless Inter-Domain Routing). В схеме CIDR используется способ сокращенного обозначения сети, согласно которому за адресом сети следует косая черта и целое число, содержащее число единиц в маске. Например, сеть лаборатории CSHL может быть описана адресом CIDR 143.48.0.0/16. Схема адресации CIDR подробно описана в документах RFC с 1517 по 1520.
Определение сетевого и широковещательного адресов при работе с масками сети не оканчивающимися на границе байта, может оказаться сложным. Модуль Net::Netmask, который можно найти в архиве CPAN, предоставляет удобные средства вычисления этих значений. Также есть небольшой модуль Net::NetmaskLite. Изучив этот код, вы сможете понять, как связаны между собой адрес сети, широковещательный адрес и маска сети.
Первый и последний адреса в подсети имеют специальное значение и не могут применяться в качестве обычных адресов хостов. Первый адрес, который иногда называют адресом со всеми нулями, зарезервирован для использования в таблицах маршрутизации, в которых он обозначает всю сеть как единое целое. Последний адрес в этом диапазоне, который, соответственно, называют адресом со всеми единицами, зарезервирован как широковещательный адрес.
IP-пакеты, отправленные по этому адресу, будут получены всеми хостами подсети. Например, компьютеры в сети с адресами 192.18.4.x (адрес класса С или адрес 192.18.4.0/24 в формате CIDR) имеют адрес сети 192.18.4.0 и широковещательный адрес 192.18.4.255.