Все системы, использующие TCP/IP для связи с другими системами, обращаются к локальной "информационной базе данных" или к локальной таблице маршрутизации, которая поддерживается системой.
Запись в таблице маршрутизации в основном выглядит следующим образом:
Сеть назначения / Шлюз / Маска подсети назначения / Метрика
Вот моя текущая таблица маршрутизации:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth2
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 eth2
172.16.160.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth2
192.168.87.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Каждый раз, когда система хочет отправить трафик на IP, она ищет эту таблицу. Если он находит сеть назначения, которая соответствует и вписывается в маску подсети, он отправляет трафик из сетевого адаптера, идентифицированного Iface.
Все эти сетевые адаптеры "подключены напрямую" - вот почему вы видите 0.0.0.0 для шлюза. Это означает, что если система хочет отправить что-либо, например, на 192.168.2.80, она может просто отправить это напрямую на 192.168.2.80 через интерфейс eth2.
Однако из-за маски подсети 192.168.87.80 не будет проходить через eth2, он будет выходить через vmnet1.
Если IP-адрес умещается в двух записях, используется тот, который имеет большую маску подсети CIDR ("более конкретный"). Если есть две с одинаковой маской подсети, метрика используется для разрыва связи, и если это время, система может выбрать одну и придерживаться ее или распределить нагрузку между ними.
например
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth2
192.168.2.0 0.0.0.0 255.255.255.240 U 100 0 0 ethX
255.255.255.240 - это CIDR /28, а 255.255.255.0 - это CIDR /24. Таким образом, если бы существовали две записи, что-то, выходящее в 192.168.2.1, вышло бы из интерфейса ethX, а что-то, выходящее в 192.168.2.241, вышло бы из интерфейса eth2.
Что делать, если ничего не соответствует? Затем используется шлюз по умолчанию. Обратите внимание, что она имеет "самую низкую" маску подсети 0.0.0.0 (которая является косой чертой /0).
Так вот для чего нужна подсеть. Сообщая системе, какие сети могут быть достигнуты через какой интерфейс. Ваша система использует это при отправке трафика (чтобы определить разницу между Интернетом и локальной сетью), а маршрутизаторы используют это для пересылки трафика.
Вне этих ситуаций маска подсети не нужна. Это не нужно после уровня сетевой маршрутизации, в основном. HTTP это прикладной уровень.