IP over Ethernet #2 Таблица маршрутизации для утюга и пылесоса
После долгих раздумий о судьбах мира и созерцания пупка было принято волевое решение продолжить писать всякое. Однако я считаю, что для дальнейшего продвижения в дебри эзернет простого резонерства на тему фреймов, без ухода хотя бы немного в практическую плоскость, недостаточно, нужно добавлять хотя бы зачатки того, зачем это все. А если отбросить разные сантименты, то на вопрос зачем же все это, ответ будет однозначным - в подавляющем большинстве случаев для передачи IP.
И здесь для дальнейшего движения в правильном направлении об этом самом IP нужно бы хоть немного рассказать.
Тут я начну не с истории, а с практики. Представьте обычную советскую семью поклонников продукции эплл, у них в квартире наверняка есть устройства, которые что-то передают по IP. Предлагаю рассмотреть пылесос, который по заполнению мусорника отправляет в облако эппл соответствующие фоточки голой хозяйки данные о необходимости почистить или заменить пакет, ну и периодически шлет сообщения о необходимости замены расходников на новые оригинальные. Ну или в крайнем случае утюг, утюг может быть был бы даже лучше, но пусть все-таки будет пылесос. Облако в свою очередь шлет что надо в АНБ хозяйке на айфон. Большая часть коммуникаций работает в IP сетях. А IP сети, прошу прощения за тавтологию, в свою очередь в ethernet сетях.
Что же делает пылесос, когда ему надо передать информацию?! (Предлагаю профантазировать о модели пылесоса с подключением к таймкапсулю по вайфаю).
Предположим, что все автоматизировано, как положено в эппл и пылесос автоматически подключается к сети и получает настройки для сетевого подключения. Внутри пылесоса для функционирования передачи данных в облака при такой схеме должен быть предусмотрен какой-то компьютер-контроллер, который содержит программно-аппаратные средства для осуществления контроля параметров работы пылесоса, обработки данных и передаче данных куда нужно. Как минимум нам интересны сетевая карта вайфая (сетевой интерфейс) и операционная система с tcp/ip стеком.
В момент включения пылесос подключится к вайфай сети, запросит и получит настройки сетевого подключения, в числе которых скорее всего:
3. Шлюз по умолчанию
4. IP адреса ДНС серверов
Отличия вайфай сети от эзернета я пока рассматривать не буду, просто пока примем, что вайфай в таймкапсуле работает в режиме точки доступа, который эмулирует эзернет. Эзернет на схеме показан как труба, к которой подключены маршрутизатор и пылесос, так в схемах сетей обозначают разные шинные топологии.
Итак что же произошло при получении пылесосом настроек сети? Сетевой интерфейс пылесоса произвел автонастройку параметров, необходимых для полноценной передачи данных в соответствии с информацией, полученной от dhcp сервера таймкапсуля. Предположим он получил от домашнего маршрутизатора (таймкапсуля)
1. IP адрес - 192.168.0.100
2. Маску сети - 255.255.255.0
3. Шлюз по умолчанию - 192.168.0.1
4. IP адреса ДНС серверов - 192.168.0.1, 8.8.8.8
Итак зачем все это нужно.
IP адрес - идентификатор хоста в IP сети, уникальное в сети 32хбитное число, представляемое для удобства человека чаще всего как набор из 4х 8мибитных десятичных чисел (байтов или октетов). Октет это восьмиразрядное двоичное число, например 11111111. В большинстве случаев сейчас байт тоже восьмиразрядное двоичное число, поэтому в данном контексте они тождественны.
192.168.0.100 - 11000000101010000000000001100100 или 3232235620 (в десятичной системе), или 11000000.10101000.00000000.01100100 с разделением октетов точками.
Тут нужно опять сделать отступление. Представьте, что вам нужно перемножить 2 числа -
LXXVIII * CXI, для многих задача покажется невыполнимой, потому что я привел числа, записанные римскими цифрами, а данная система записи чисел - непозиционная.
В то врtмя как мы привыкли использовать арабские цифры и позиционную систему записи чисел с основанием в 10.
LXXVIII * CXI = 78 * 111 = 78*100+78*10+78*1 = 7800+780+78 = 7000+800+700+80+70+8 =
= 7000+1500+150+8=8658, ну или в столбик. Эти все итерации в примере возможны потому, что каждая цифра может обозначать разные числа, находясь в разных позициях, позиции определяют соответствующие степени основания системы счисления (для нас привычно степени 10ти - 10^0 - единицы, 10^1 - десятки, 10^2 -сотни и т.д.), а цифра в позиции определяет их количество. То есть 111 = 1 единица + 1 десятка + 1 сотня.
Эти же принципы используются в системах счисления с другим основанием (двоичной, восьмеричной, шестнадцатиричной), нас будет интересовать двоичная система.
В двоичной системе основание не 10, а 10, шутка, а нет, не шутка - основание 2 то есть в двоичной записи - 10, цифр соответственно не 10 (0-9), а 2 (0,1), переход в числа в следующую позицию осуществляется при исчерпании цифр в текущей позиции. То есть как в десятичной системе, пока можно увеличивать число изменяя цифру в позиции, количество позиций не изменяется. Например число будет одноразрядным, пока для единиц хватает цифр - 1, 2, 3, 4, 5, 6, 7, 8, 9, а вот цифры закончились, дальше для увеличения числа нужно изменять разряд. 10,11,12..99, опять закончились цифры уже в десятках, опять добавляем разряд, и следующее число - 100.
Еще раз в двоичной системе цифр только 2 (0,1), поэтому натуральный ряд чисел выглядит так - 1, 10, 11, 100, 101, 110, 111 и т. д. Его не трудно перевести на человеческий (десятичный), это соответственно 1, 2, 3, 4, 5, 6, 7.
5-101 (дальше как с 909)
6-110 (а тут как с 990)
7-111 (а это похоже на 999).
Теперь попробуем подвести это к IP адресам, то есть к их частям - октетам. Возьмем последние октеты наших устройств (таймкапсуль-маршрутизатор - 192.168.0.1, пылесос - 192.168.0.100), то есть 1 и 100, и переведем их в двоичную систему с сохранением количества цифр в октете.
100 - 01100100 (1100100)
Чтобы количество цифр сохранялось равным 8ми (это важно), в части чисел нужны лидирующие нули.
Далее нужно понять зачем все это. А все это для маршрутизации.
У каждого компьютера, оборудованного сетевым интерфейсом с настроенным IP есть таблица маршрутизации, которая создается после настройки IP адреса на интерфейсе и некоторых дополнительных параметров.
Посмотрим как выглядит такая таблица у пылесоса, после настройки сети.
После добавления IP адреса 192.168.0.100 и маски сети 255.255.255.0 к интерфейсу в таблицу маршрутизации добавилось 2 записи:
1. - 192.168.0.100 255.255.255.255 - локальный адрес
2. - 192.168.0.0 255.255.255.0 - сеть непосредственно подключена к интерфейсу
После добавления шлюза по умолчанию - 192.168.0.1 в таблицу маршрутизации добавилась 1 запись:
3. - 0.0.0.0 0.0.0.0 - через шлюз 192.168.0.1.
Итого, еще раз, в таблице маршрутизации пылесоса появилось 3 записи:
1. - 192.168.0.100 255.255.255.255 - локальный адрес
2. - 192.168.0.0 255.255.255.0 - сеть непосредственно подключена к интерфейсу
3. - 0.0.0.0 0.0.0.0 - через шлюз 192.168.0.1.
Записи обычно сортируются по возрастанию, так что при просмотре это будет выглядеть так:
0.0.0.0 0.0.0.0 - через шлюз 192.168.0.1.
192.168.0.0 255.255.255.0 - сеть непосредственно подключена к интерфейсу
192.168.0.100 255.255.255.255 - локальный адрес
Вот как это выглядит,например, в windows 7:
Здесь кроме тех маршрутов, что я перечислял выше, есть еще несколько, но про них позже.
1. IP адрес отправителя
2. IP адрес получателя
Хост готовит пакет, в котором IP адрес отправителя - 192.168.0.100, IP адрес получателя - 8.8.8.8, остальное пока не важно. Далее встает вопрос куда же это отправлять? За ответом хост отправляется выбирать из собственной таблицы маршрутизации маршрут, по которому отправить пакет.
Выбор маршрута происходит просто - из таблицы выбирается маршрут для которого выполняются следующие условия:
1. IP адрес получателя входит в диапазон адресов, описанных сетевым адресом и маской сети
2. Из нескольких подходящих маршрутов выбираются те, у которых маска сети максимальна
3. Из оставшихся выбираются те, у которых метрика минимальна.
Теперь нужно понять, зачем нужны маски и как все это работает.
Итак в большинстве машинных языков наряду с арифметическими операциями используются также разные операции логические. Логику сейчас в школе не изучают, что прискорбно, но нам нужен минимум.
Чаще всего эквивалентом истинности чего-либо в вычислениях является двоичная единица, а эквивалентом лжи - ноль.
Истина И Истина = Истина, Ложь И (Истина или Ложь) = Ложь, (если есть хоть немного лжи, то все целиком - ложь) или так:
1 И 1 = 1, 1 И 0 = 0, 0 И 1 = 0, 0 И 0 = 0, или так:
1 * 1 = 1, 1 * 0 = 0, 0 * 1 = 0, 0 * 0 = 0.
То есть если один из операндов - ноль, результат тоже ноль.
Истина ИЛИ Истина = Истина, Истина ИЛИ Ложь = Истина, Ложь ИЛИ Ложь = Ложь (если есть хоть немного истины, то все целиком - истина) или так:
1 ИЛИ 1 = 1, 1 ИЛИ 0 = 1, 0 ИЛИ 1 = 1, 0 ИЛИ 0 = 0, или так:
1 + 1 = 1 (сумма, конечно, 2, но главное, что она больше нуля, то есть результат суммирования не 0), 1 + 0 = 1, 0 + 1 = 1, 0 + 0 = 0.
То есть если один из операндов - единица, то результат тоже единица.
НЕ Истина = Ложь, а НЕ Ложь = Истина, или так:
НЕ 1 = 0, а НЕ 0 = 1.
То есть после операции результат будет противоположным операнду.
Теперь вернемся к маскам. Маски представляют собой некий числовой трафарет (похожий на решетку Кардано), который нужен для необходимых в маршрутизации IP пакетов расчетов.
Чаще всего это набор единиц слева направо в 32х-разрядном двоичном числе. Например:
10000000000000000000000000000000 - маска /1 (1 единица) или 128.0.0.0,
11000000000000000000000000000000 - маска /2 (2 единицы) или 192.0.0.0,
11100000000000000000000000000000 - маска /3 (3 единицы) или 224.0.0.0,
11111111.00000000.00000000.00000000 - маска /8 (8 единиц) или 255.0.0.0,
11111111.11111111.00000000.00000000 - маска /16 (16 единиц) или 255.255.0.0,
11111111.11111111.11111111.00000000 - маска /24 (24 единицы) или 255.255.255.0.
Маски (32 бита) накладывается на IP адреса (32 бита), чтобы производить разнообразные расчеты.
В нашем примере с пылесосом маска 255.255.255.0 накладывается на IP адрес интерфейса - 192.168.0.100 для расчетов записей, добавляемых в таблицу маршрутизации:
Повторю еще раз 192.168.0.100 это в двоичной системе -
Итак на первом этапе стек рассчитывает из комбинации адреса и маски адрес IP сети, непосредственно подключенный к интерфейсу при помощи побитовой операции И:
11000000.10101000.00000000.00000000 или 192.168.0.0.
Расчетный адрес подсети соответственно - 192.168.0.0 с маской 255.255.255.0, нужно отметить, что в знакоместах адреса биты, закрытые единицами маски, не изменились, а в знакоместах закрытых нулями все единицы изменились на нули.
Далее производится операция инвертирования маски - НЕ
Данное число называется wildcard. Это эквивалент количества адресов в данной сети.
Таким образом минимальный адрес в сети, подключенной к вайфай интерфейсу пылесоса -
192.168.0.0, а максимальный (192.168.0.0+0.0.0.255) - 192.168.0.255.
Для адресов из данного диапазона пылесос будет отправлять IP пакеты непосредственно в интерфейс, а хосты с адресами из данного диапазона будут соответственно доступны пылесосу непосредственно, то есть без промежуточных шлюзов.
Все это нужно, чтобы при настройке интерфейса добавить в таблицу маршрутизации запись, указанную ранее:
192.168.0.0 255.255.255.0 - сеть непосредственно подключена к интерфейсу.
А также чтобы определять принадлежность произвольного адреса назначения в IP пакете определенной сети из таблицы маршрутизации.
Например 8.8.8.8 совершенно точно не входит в 192.168.0.0 255.255.255.0, но в таблице маршрутизации была еще одна запись:
0.0.0.0 0.0.0.0 - через шлюз 192.168.0.1,
Как понимать что такое сеть 0.0.0.0 0.0.0.0.
00000000.00000000.00000000.00000000, маска такая же:
00000000.00000000.00000000.00000000, после операции И, получим
00000000.00000000.00000000.00000000, это 0.0.0.0 - адрес сети (а также и минимальный адрес в данной сети), после инверсии маски:
11111111.11111111.11111111.11111111, то есть 255.255.255.255 (wildcard, количество адресов в сети), после арифметического сложения адреса сети и wildcard (0.0.0.0+255.255.255.255) получим 255.255.255.255 - максимальный адрес в сети.
После данных операций становится понятно, что сеть 0.0.0.0 0.0.0.0 (короткая запись с маской, указывающей на количество единиц маски, - 0.0.0.0/0) содержит все IPv4 адреса в сети IP. Адреса 8.8.8.8, 192.168.0.1 и 192.168.0.100 являются частью данной сети.
Лига Сисадминов743 поста 13.6K подписчик
Правила сообщества# mount -o remount,rw /sysadmins_league
- # mount /dev/good_story /sysodmins_league
- # mount /dev/photo_it /sysodmins_league
- # mount /dev/best_practice /sysodmins_league
- # mount /dev/tutorial /sysodmins_league
Из всего написанного я понял что пылесосы следят за нами.
Чёто у меня оперативка забилась, пока читал. Люди, о чём речь?
Зачем вся эта адская математика? Интернет вещей будет на IPv6. IP-адреса будут зашиты в устройства как сейчас MAC-адреса.
Про вайлдкард зря наверное. Это отдельная тема уже, только путать тут таким определением неполным. А так супер :)
Бог мой! Как же бездарно изложена весьма интересная суть!
ТС, ну зачем? ЗАЧЕМ так много воды? Ну кто тебя покусал? Что за таблетки? Зачем столько кофе?
IP over Ethernet #0.1 с чего все начиналось или кому мутаторы
Итак об локальных сетях.
Сети были относительно молодыми и нужны были для разного. К RS-485, например, подключались какие-нибудь промышленные контроллеры, передававшие телеметрию из какого-нибудь большого адронного гудронного коллайдера в недрах какой-нибудь ТЭЦ районной котельной, где не нужны были эти ваши мегабиты, а пары килобит хватало за глаза, да и доморощенных кулхацкеров на таких предприятиях обычно быстро выкидывали на мороз.
В офисах и на заводах жили arcnet, ethernet и token-ring. Причем где надо было качественно передавать данные - преимущественно аркнет и токенринг, а где надо было дешево и быстро - преимущественно эзернет. Собственно вот это главное.
А дальше будет не менее главное второстепенное.
RS-485, arcnet, ethernet и token-ring - сети с множественным доступом (каждый участник может передавать каждому) на то время использовавшие общую разделяемую физическую среду передачи (за исключением токенринга, где все несколько сложнее/проще). Одной из существенных проблем, которую обязательно нужно решить в такой схеме - необходимость передачи информации в сети от только одного участника в каждый момент времени при молчании всех остальных. Если передавать одновременно будут несколько устройств, в сети произойдет смешение сигналов с последующей потерей данных. Решить эту проблему технически можно разными способами. Один из самых простых вариантов в MODBUS поверх RS-485 - master-slave модель, при таком варианте одно устройство в сети назначается ведущим, а остальные ведомыми, ведущее устройство опрашивает ведомые по очереди, после запроса у ведомых есть определенное время на ответ в течение которого ведущее устройство молчит и ждет, не отправляя новых запросов.
В аркнет с токен-рингом использовалась передача маркера, при этом владеющее маркером устройство могло передавать информацию, а остальные молчали и ждали, после истечения времени маркер передавался следующему устройству участнику сети, а предыдущее устройство замолкало.
Два вышеописанных примера - маркерный доступ и модель ведущий-ведомый это варианты так называемого детерминированного доступа к среде передачи. В эзернет же использовался случайный или недетерминированный доступ с механизмом распознавания коллизий, не особенно хороший и довольно сложный, иногда делавший 10ти-мегабитную эзернет сеть менее эффективной чем 2х-мегабитный аркнет.
И тем не меннее вокруг нас один сплошной эзернет, а остальные почили, ну RS-485 нет, но он и не ЛВС, а промышленная сеть, а вот новых arcnet и token-ring нам скорее всего уже не увидеть.
Итак сначала об топологиях ЛВС на то время:
Эзернет - шина, токенринг - кольцевая шина, нет кольцо,нет даже сложно точно сформулировать, скорее точка-точка-кольцо или точка1->точка2->точка3->точка1, кольцевые бусы?, аркнет смешанная шина/звезда, сеть-мечта с практически произвольной топологией. В эзернет и аркнет для создания физической среды передачи применялся коаксиальный кабель, в токенринге неэкранированная витая пара.
Что было хорошего у аркнет - отсутствие коллизий, почти произвольная топология, передача данных в общей среде передачи всем участникам одновременно, у токенринга - отсутствие коллизий, 4 мбит/с против 2.5 мбит/с у аркнет, международный стандарт, у эзернет - 2 и 10 мбит/с, международный стандарт. В отличии от сетей с маркерным доступом, где очевидно были ограничения на размерность сетевого адреса и соответственно на количество устройств в сети, в эзернет довольно быстро появились 48-битные уникальные MAC адреса с механизмом их получения для производителей устройств, что позволяло теоретически запилить сеть с сотнями или тысячами устройств.
Дальше произошло несколько событий, определивших текущее положение вещей.
Сначала у эзернет появилась звездчатая топология с концентраторами/хабами (hub) внутри (как у аркнет), использующая витую пару (как у токенринг). И это произвело революционные изменения в дальнейшем. После появления сетей с хабами оказалось возможным коренным образом изменить все, заменив хаб на новое устройство, которое незамедлительно появилось. Называлось оно коммутатор или switch (свич) и представляло собой специализированный сетевой компьютер, обрабатывающий пакеты данных как пакеты, а не как электрические сигналы. Появление свичей сделало эзернет совершенно отличным от других ЛВС технологий, управление сетью стало более простым, надежность и скорость работы сети значительно увеличились, увеличилась качественно и сетевая безопасность. Доступ к среде передачи стал почти детерминированным как у конкурентов, коллизии практически ушли в прошлое. Цифровая обработка пакетов сразу предоставила громадные возможности для фантазии и творчества разработчикам программного обеспечения для сетевых устройств на десятилетия вперед.
Мутация из хабов в коммутаторы стала первой из череды особо значимых революций эзернета, во многом предопределив более 25 лет назад, то что происходит сегодня.