«Правильный» интерфейс - это запись с наиболее определенной маской сети, IP-адрес которой находится в той же подсети, что и ваш ввод.
Давайте посмотрим, что такое маски и как они работают, более подробно.
Обозначение
Хотя сетевые маски обычно пишутся в точечно-десятичном или шестнадцатеричном формате, двоичное представление сетевой маски IPv4 всегда составляет 32 бита; то есть он точно такой же длины, как и IP-адрес. Маска сети всегда начинается с нуля или более 1
битов и дополняется 0
битами для завершения 32-битной длины. Когда сетевая маска применяется к IP-адресу, они «выстраиваются» по крупицам. Биты в IP-адресе, которые соответствуют 1
битам в маске сети, определяют номер сети IP-адреса; те, которые соответствуют 0
битам в маске сети, определяют номер устройства .
Назначение
Маски сети используются для разделения адресного пространства на меньшие подсети . Устройства в одной подсети могут связываться друг с другом напрямую, используя стек протоколов TCP / IP. Устройства в разных подсетях должны использовать один или несколько маршрутизаторов для пересылки данных между ними. Поскольку они изолируют подсети друг от друга, маски сетей являются естественным способом создания логических групп устройств. Например, у каждого местоположения или отдела в компании может быть своя собственная подсеть, или у каждого типа устройства (принтеры, ПК, и т.д. .) Может быть своя собственная подсеть.
Пример сетевых масок:
255.255.255.128
& rarr; FF FF FF 10
& rarr; 1111 1111
1111 1111
1111 1111
1000 0000
Эта маска сети указывает, что первые 25 бит IP-адреса определяют номер сети; последние 7 бит определяют номер устройства. Это означает, что может быть 2 25 различных подсетей, каждая с 2 7 = 128 устройств. *
255.255.255.0
& rarr; FF FF FF 00
& rarr; 1111 1111
1111 1111
1111 1111
0000 0000
Эта маска сети определяет адресное пространство с 2 24 подсетями, каждая с 2 8 = 256 отдельных адресов. Это очень распространенная конфигурация & mdash; настолько распространенная, что ее называют просто "сетью класса".
255.255.192.0
& rarr; FF FF FC 00
& rarr; 1111 1111
1111 1111
1111 1100
0000 0000
Эта маска сети указывает 2 22 * 1069 * подсетей, каждая с 2 10 = 1024 адресами. Он может использоваться внутри большой корпорации, где в каждом отделе есть несколько сотен устройств, которые должны быть логически сгруппированы.
An недействительно маска сети (обратите внимание на внутренние нули):
255.128.255.0
& rarr; FF 80 FF 00
& rarr; 1111 1111
1000 0000
1111 1111
0000 0000
Расчеты
Вот несколько примеров, которые показывают, как маска сети определяет номер сети и номер устройства IP-адреса.
IP-адрес: 192.168.0.1
& rarr; C0 A8 00 01
Маска сети: 255.255.255.0
& rarr; FF FF FF 00
Это устройство находится в подсети 192.168.0.0. Он может напрямую связываться с другими устройствами, чьи IP-адреса имеют вид 192.168.0. x
IP-адрес: 192.168.0.1
& rarr; C0 A8 00 01
IP-адрес: 192.168.0.130
& rarr; C0 A8 00 82
Маска сети: 255.255.255.128
& rarr; FF FF FF 80
Эти два устройства находятся в разных подсетях и не могут связываться друг с другом без маршрутизатора.
IP-адрес: 10.10.195.27
& rarr; 0A 0A C3 1B
Маска сети: 255.255.0.0
& rarr; FF FF 00 00
Это адрес в сети «класса B», который может связываться с адресами 2 16 в сети 10.10.0.0.
Вы можете видеть, что чем больше 1
битов в начале маски сети, тем более она конкретна. То есть больше 1
битов создают «меньшую» подсеть, состоящую из меньшего количества устройств.
Собираем все вместе
Таблица маршрутизации, как и ваша, содержит три маски сетей, IP-адреса и интерфейсы.(Он также может содержать метрику «стоимости», которая указывает, какой из нескольких интерфейсов является «самым дешевым» для использования, если они оба способны маршрутизировать данные в конкретное место назначения. Например, можно использовать дорогую выделенную линию.)
Для маршрутизации пакета маршрутизатор находит интерфейс с наиболее точным соответствием адресату пакета. Запись с адресом addr
и маской сети mask
соответствует IP-адресу назначения dest
если (addr & netmask) == (dest & netmask)
, где &
обозначает побитовую операцию AND
. На английском языке нам нужна наименьшая подсеть , которая является общей для обоих адресов .
Почему? Предположим, что вы и коллега находитесь в отеле, который является частью огромной цепочки с корпоративной проводной и беспроводной сетью. Вы также подключились к VPN вашей компании. Ваша таблица маршрутизации может выглядеть примерно так:
Destination Netmask Interface Notes
----------- -------- --------- -----
Company email FFFFFF00 VPN Route ALL company traffic thru VPN
Wired network FFFF0000 Wired Traffic to other hotel addresses worldwide
Default 00000000 Wireless All other traffic
Самое конкретное правило будет направлять электронную почту вашей компании через VPN, даже если адрес совпадает ссеть также.Весь трафик на другие адреса в сети отелей будет направляться через проводную сеть.И все остальное будет отправлено через беспроводную сеть.
* Фактически, в каждой подсети 2 адреса - самый высокий исамые низкие - зарезервированы.Адрес «все единицы» - это адрес широковещательный : этот адрес отправляет данные на каждое устройство в подсети.А адрес «все нули» используется устройством для обращения к себе, когда у него еще нет собственного IP-адреса.Я проигнорировал их для простоты.
Так что алгоритм будет выглядеть примерно так:
initialize:
Sort routing table by netmask from most-specific to least specific.
Within each netmask, sort by IP address.
search:
foreach netmask {
Search IP addresses for (input & netmask) == (IP address & netmask)
Return corresponding interface if found
}
Return default interface