RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Route... (уточнение)


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : VicTor Smirnoff
To : Sergey K.
Subj : Route... (уточнение)

> > Ну и ладненько... Игорь выложил в коллекцию REXX-скриптов мой простенький калькулятор подсетей. Может быть будет полезен. Ссылка на главной в новостях.
>
> Спасибо.
> Вопрос только кто такой "Игорь" и где живет эта коллекция(вроде раньше видел, но сейчас что-то не ищется), ну и калькулятор у меня вроде бы есть из набора GNU.

"Игорь", он же "Игорь Васьков", он же "Igor Vaskov", он же главный тут, на RU/2 :))
Коллекция REXX-скриптов - тут же, на RU/2 ;)

> Посчитать подсеть может и не проблема, проблема в понимании по какой маске это все брать...
> Вот ты там понасчитал на полстраницы, я так и не понял из чего ты исходил в том или ином случае...

Попробую, но, прости, уж совсем человеческим голосом молвить не получится :)
Маска подсети определяет размеры подсети, маскируя постоянную часть адреса единичками в битовом представлении. Постоянная часть адреса всегда слева в битовом представлении, а переменная всегда справа, соответственно в маске все единички всегда расположены последовательно в старших разрядах, а нули - в младших. Поэтому удобнее записывать подсетку следующим образом, например, 172.16.0.0/16, где /16 обозначает, что старшие 16 бит маски содержат единички, остальные - нули.

Возьмем твой случай:

подсетка из которой надо вырезать две входящие в нее подсетки имеет адрес 172.16.0.0 маска 255.255.0.0, т.е. 172.16.0.0/16

172.16.0.0 - адрес в десятичном виде (AC.10.00.00 - в HEX)
10101100.00010000.00000000.00000000 - в двоичном виде

255.255.0.0 - маска в десятичном виде (FF.FF.00.00 - в HEX)
11111111.11111111.00000000.00000000 - в двоичном виде

10101100.00010000.11111111.11111111 - старший адрес в двоичном виде
172.16.255.255 - в десятичном виде (AC.10.FF.FF - в HEX)

Первая вырезаемая подсетка 172.16.144.0 маска 255.255.248.0 (ее получили по dhcp), т.е. 172.16.144.0/21:

172.16.144.0 - адрес в десятичном виде (AC.10.90.00 - в HEX)
10101100.00010000.10010000.00000000 - в двоичном виде

255.255.248.0 - маска в десятичном виде (FF.FF.00.00 - в HEX)
11111111.11111111.11111000.00000000 - в двоичном виде

10101100.00010000.10010111.11111111 - старший адрес в двоичном виде
172.16.151.255 - в десятичном виде (AC.10.97.FF - в HEX)

А теперь диапазон адресов 172.16.0.0-172.16.143.255 надо представить в виде набора подсеток.
Старший адрес первой оставляемой подсети можно рассчитать таким манером:

10101100.00010000.10010000.00000000 - 172.16.144.0 (уже вырезаемая)
10101100.00010000.01111111.11111111 - 172.16.127.255 (старший адрес оставляемой)
следовательно маска для этой оставляемой подсети
11111111.11111111.10000000.00000000 - 255.255.128.0 (/17)
следовательно эта оставляемая подсетка будет
10101100.00010000.00000000.00000000 - 172.16.0.0/17

Остается представить в виде подсеток диапазон 172.16.128.0-172.16.143.255:

10101100.00010000.10010000.00000000 - 172.16.144.0 (уже вырезаемая)
10101100.00010000.10001111.11111111 - 172.16.143.255 (старший адрес оставляемой)
следовательно маска для этой оставляемой подсети
11111111.11111111.11110000.00000000 - 255.255.240.0 (/20)
следовательно эта оставляемая подсетка будет
10101100.00010000.10000000.00000000 - 172.16.128.0/20

Ну и так далее для оставшихся диапазонов адресов...

С другой стороны, если не экономить записи в таблице маршрутизации, можно было просто наделать кучу записей:
route add -net 172.16.0.0 172.16.144.1 -netmask 255.255.255.0 -hopcount 1
route add -net 172.16.1.0 172.16.144.1 -netmask 255.255.255.0 -hopcount 1
route add -net 172.16.2.0 172.16.144.1 -netmask 255.255.255.0 -hopcount 1
route add -net 172.16.3.0 172.16.144.1 -netmask 255.255.255.0 -hopcount 1
...
route add -net 172.16.143.0 172.16.144.1 -netmask 255.255.255.0 -hopcount 1
...

пропустив вырезаемые подсетки.
что тоже будет работать :)

Mon 02 May 2011 15:24 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.8.1.21) Gecko/20




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.