Я вижу в этомвопрос, таблица маршрутизации имеет:
192.168.1.1/32 link#4 UCS 2 0 en0
openwrt.lan 46:94:fc:63:fc:7 UHLWIir 11 3610 en0 1200
192.168.1.125/32 link#4 UCS 2 0 en0
Что значит иметь маску подсети /32
и в этом случае каков будет ее сетевой идентификатор? Может ли существовать хост без сетевого идентификатора, если мы рассматриваем вышеперечисленное как один хост?
Насколько мне известно, идентификатор сети и IP-адрес, назначенный хосту в этой сети, — это две разные вещи. 192.168.0.0 — это идентификатор сети, и если его подсеть — 255.255.255.0, то хосты в этой сети могут быть 192.168.0.1 — 192.168.0.254. В этом случае как хост может существовать без идентификатора сети?
решение1
Здесь есть небольшая путаница; /32 относится не к размеру какой-либо (под)сети, а к диапазону адресов, к которому применяется конкретная запись таблицы маршрутизации. Обычно это одно и то же (потому что вы маршрутизируете сеть или подсеть как единое целое, верно?), но macOS делает все немного иначе для других хостов в той же локальной сети. Позвольте мне добавить несколько строк перед теми, которые вы процитировали:
Destination Gateway Flags Refs Use Netif Expire
default openwrt.lan UGSc 10 0 en0
...
192.168.1 link#4 UCS 2 0 en0
192.168.1.1/32 link#4 UCS 2 0 en0
openwrt.lan 46:94:fc:63:fc:7 UHLWIir 11 3610 en0 1200
192.168.1.125/32 link#4 UCS 2 0 en0
Обратите внимание, что 192.168.1 (сокращенно от 192.168.1.0/24) маршрутизируется через en0 (он же link#4); не через какой-либо шлюз, а просто через сам интерфейс. Это сеть, в которой находится сам Mac. 192.168.1.1 и 192.168.1.125 — это конкретные адресав пределах этого диапазона сети. Если сравнить эти записи /32 с записью 192.168.1, то они по сути являются избыточными дубликатами; они говорят об одном и том же, просто о конкретных адресах, а не обо всем диапазоне сети.
Я не знаю, почему macOS создает эти избыточные записи, специфичные для адреса, но это, вероятно, связано с другой вещью, которую вы можете видеть в листинге выше: macOS перечисляет свои записи таблицы ARP в таблице маршрутизации. Запись "openwrt.lan" выше (которая, я почти уверен, на самом деле 192.168.1.1, просто указана по имени, а не по номеру) говорит, что она маршрутизируется через en0 на MAC-адрес 46:94:fc:63:fc:7.
Итак, в списке маршрутов вы видите смесь реальных сетевых маршрутов (например, «default» и 192.168.1) и записей для каждого хоста (/32 и записи, ориентированные на MAC-адрес).
решение2
/32
адресация
В общем случае это /32
означает, что сеть имеет только один адрес IPv4 и весь трафик будет проходить напрямую между устройством с этим адресом IPv4 и шлюзом по умолчанию. Устройство не сможет взаимодействовать с другими устройствами в локальной подсети.
Я видел несколько возможных причин этого. Это может быть:
- Веб-сервер, обслуживающий несколько сайтов, каждый из которых привязан к определенному адресу IPv4.
- Аадрес обратной связииспользуется для тестирования.
- Сетевой трюк безопасности: изолировать машину с сетевой маской /32 от остальных систем в подсети. Это позволяет трафику проходить только к пунктам назначения, явно определенным статическими маршрутами в системе. Например, это может использоваться для вывода системы из эксплуатации.
Сетевой идентификатор
Theсетевой идентификаторЧасть IP-адреса определяется маской подсети. Например:
- Сеть
/24
IPv4 имеет маску подсети1111.1111.1111.0000
, то есть первые 3 октета являются идентификатором сети, а последний октет используется для назначения идентификаторов хостов (доступно 256 идентификаторов, хотя обычно некоторые из них зарезервированы). - Сеть
/16
IPv4 имеет маску подсети1111.1111.0000.0000
, то есть первые 2 октета являются идентификатором сети, а последний октет используется для назначения идентификаторов хостов (доступно 65536 идентификаторов, хотя обычно некоторые из них зарезервированы).
В случае /32
это не применимо, поскольку адрес является как идентификатором сети, так и идентификатором хоста. /31
Все адреса также являются идентификаторами хостов без зарезервированного нулевого адреса.
решение3
Это просто значение CIDR. Вы можете узнать больше вздесьдля CIDR.
TL;DR
Сетевой адрес CIDR в IPv4 выглядит следующим образом:
192.30.250.00/18
«192.30.250.0» — это сам сетевой адрес, а «18» говорит о том, что первые 18 бит — это сетевая часть адреса, а последние 14 бит предназначены для конкретных адресов хостов. маска подсети
решение4
То, что вы видите, не является масками подсети.. Они указывают на длину префиксов таблицы маршрутизации¹.
Наивная реализация таблицы маршрутизации перечислила бы все возможные IP-адреса, так что, имея любой IP-адрес, вы бы нашли именно этот адрес и получили бы связанную с ним информацию о маршрутизации².
Очевидно, что необходимо какое-то сжатие. Природа маршрутной информации такова, что смежные адреса, скорее всего, будут использовать одну и ту же информацию, поэтому мы можем использовать формурадиксное деревочтобы сжать их вместе. Вот, вкратце, как это работает.
Имея числа от 0 до 7, мы можем представить их в двоичной системе следующим образом:
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
Теперь, если у нас есть две записи таблицы маршрутизации, одна для адресов 0 и 1, а другая для адресов 2 и 3, мы можем сохранить их под двоичными префиксами, которые они разделяют. Если мы используем a .
для обозначения «неиспользуемого» бита после конца префикса, мы имеем 00.
для диапазона 0-1 и
01.
для диапазона 2-3.
Стандартный способ представления этого — указать наименьшее число из диапазона, за которым следует длина префикса; в данном случае это будет 0/2
диапазон 0-1 и 2/2
диапазон 2-3.
Но что произойдет, если мы захотим найти информацию о маршрутизации для адреса 6? Обычно мы добавляем "стандартный" набор информации о маршрутизации с префиксом 0/0
, т. е. соответствие любым битам вообще, а затем при поиске мы ищем наиболее конкретную информацию, т. е. самый длинный соответствующий префикс, который мы можем найти. Таким образом, полная таблица маршрутизации, которую мы только что описали, выглядит так:
0/2 00. Matches addresses 1 and 2.
2/2 01. Matches addresses 3 and 4.
0/0 ... Matches any address.
Маски подсети можно описать префиксами таким же образом, и поэтому эта схема часто используется для этого. Но имейте в виду, что только потому, что эта схемаможетбыть использовано для описания подсетей не означает, что оно используетсятолькодля описания подсетей.
В качестве примера префиксов таблицы маршрутизации, не являющихся подсетями, у вас может быть два сетевых интерфейса, подключенных к одной и той же сети, скажем, 192.168.2.0/24. (Это можно реализовать, подключив две отдельные сетевые карты к одному коммутатору, каждую с помощью своего кабеля.) Затем вы можете настроить таблицу маршрутизации для «балансировки» исходящего трафика через два интерфейса, используя две записи таблицы маршрутизации:
192.168.2.0/25 eth0 # range ...2.0 to ...2.127
192.168.2.128/25 eth1 # range ...2.128 to ...2.255
Это отправит пакеты, предназначенные для адресов 0-127 в этой сети, наружу eth0
, но пакеты, предназначенные для адресов 128-255 в этой сети, наружу eth1
. Это плохой способ сделать это (по причинам, в которые я не буду здесь вдаваться), но он демонстрирует, как префиксы маршрутизации и сетевые адреса могут не совпадать.
¹ Статья в Википедии отаблицы маршрутизациик сожалению, говорит, что поле префикса содержит «Идентификатор сети». Хотя это может быть верно в некоторых конкретных реализациях таблиц маршрутизации, в общем случае это не всегда идентификатор сети, как видно и из приведенного вами примера, и из моего примера далее в этом ответе.
² Эта информация о маршрутизации обычно включает в себя такие вещи, как какой интерфейс использовать, с каким маршрутизатором связаться на этом интерфейсе, если таковые имеются, MAC-адрес хоста для хостов, напрямую доступных через этот интерфейс, какой исходный адрес мы должны поместить в пакет, если у хоста есть несколько исходных адресов, информацию о безопасности и т. д. Существует огромное количество разнообразных данных, которые могут там быть, но ничто из этого не важно для целей этого обсуждения, поскольку мы говорим только о том, как вы ищете правильный набор данных для заданного адреса, а не о том, что находится в самом наборе данных.