/32адресация

/32адресация

Я вижу в этомвопрос, таблица маршрутизации имеет:

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. В этом случае как хост может существовать без идентификатора сети?

Связано:Почему моя маска подсети 255.255.255.255?

решение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-адреса определяется маской подсети. Например:

  • Сеть /24IPv4 имеет маску подсети 1111.1111.1111.0000, то есть первые 3 октета являются идентификатором сети, а последний октет используется для назначения идентификаторов хостов (доступно 256 идентификаторов, хотя обычно некоторые из них зарезервированы).
  • Сеть /16IPv4 имеет маску подсети 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-адрес хоста для хостов, напрямую доступных через этот интерфейс, какой исходный адрес мы должны поместить в пакет, если у хоста есть несколько исходных адресов, информацию о безопасности и т. д. Существует огромное количество разнообразных данных, которые могут там быть, но ничто из этого не важно для целей этого обсуждения, поскольку мы говорим только о том, как вы ищете правильный набор данных для заданного адреса, а не о том, что находится в самом наборе данных.

Связанный контент