IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Сети (http://www.imho.ws/forumdisplay.php?f=145)
-   -   Как по маске определить конкретный ip адрес (http://www.imho.ws/showthread.php?t=140318)

alsergeich 23.06.2009 21:21

Как по маске определить конкретный ip адрес
 
Доброго времени суток.
Был на собеседовании.. дали такую задачку... ниже пишу дословно. Всё голову себе выжег.

"Пусть имеется подсеть 192.168.35.0/24. Написать маску (или множество) масок, выделяющее из этой сети один единственный адрес 192.168.35.150.
Решить задачу таким образом, чтобы множество имело минимум записей."

В последствии выяснилось - что там именно ряд масок. Использовавшихся в своё время в этой организации при настройке RRAS.
Для задачи ограничения доступа ко всей 35 подсети, кроме 192.168.35.150
Почему нельзя было ограничить по ip незнаю. Задание звучало именно так как я написал.

Borland 23.06.2009 22:18

Вопрос поставлен некорректно как минимум...
Я так понимаю, оно должно звучать так: "разбить сеть на подсети таким образом, чтобы в одной из подсетей оказался единственный адрес XXX.XXX.XXX.XXX и количество подсетей при этом было минимальным"?
Тогда вспоминаем, что маска подсети (как и IP-адрес) - двоичные числа, соответственно увеличение длины маски на 1 делит сеть на пару подсетей. (Вообще рекомендую поискать инфу по теме хотя б в Википедии - в двоичном виде оно просто нагляднее).
Для данного конкретного случая:
192.168.35.0/24=192.168.35.0/25+192.168.35.128/25
(т.е. диапазон 0-255 делится на поддиапазоны 0-127 и 128-255).
В первую подсеть искомый адрес не попал - соответственно её мы оставляем в покое. Вторую делим ещё напополам:
192.168.35.128/26 и 192.168.35.192/26 (соответственно диапазоны последней группы адреса 128-191 и 192-255).
Искомого адреса во втором диапазоне второго этапа разбиения нет, посему оставляем подсеть 192.168.35.192/26 в покое, а 192.168.35.128/26 снова бьём напополам.
И так далее, пока в результате последнего шага алгоритма не получим одну из подсетей 192.168.35.150/32
В качестве результата предъявляем список "отброшенных" сетей + обе с последнего шага алгоритма.
При помощи спец. программ типа IP Calculator задача решается быстрее, но алгоритм в конечном итоге именно таков...

alsergeich 23.06.2009 23:56

Похоже на правду?

192.168.35.0/25
192.168.35.128/28
192.168.35.144/30
192.168.35.148/31
192.168.35.150/32

Borland 24.06.2009 00:10

Цитата:

Сообщение от alsergeich (Сообщение 1661166)
Похоже на правду?

Частично.
Где /26,/27,/29 и вторая /32? Без них список неполный (в смысле, неполностью перекрывается исходная 192.168.35.0/24).

Borland 24.06.2009 00:49

У меня получилось 9 "записей" (подсетей):
192.168.35.0/25 (192.168.35.0-192.168.35.127)
192.168.35.192/26 (192.168.35.192-192.168.35.255)
192.168.35.160/27 (192.168.35.160-192.168.35.191)
192.168.35.128/28 (192.168.35.128-192.168.35.143)
192.168.35.152/29 (192.168.35.152-192.168.35.159)
192.168.35.144/30 (192.168.35.144-192.168.35.147)
192.168.35.148/31 (192.168.35.148-192.168.35.149)
192.168.35.150/32
192.168.35.151/32

Или, в порядке расположения их в исходном адресном пространстве:
192.168.35.0/25 (192.168.35.0-192.168.35.127)
192.168.35.128/28 (192.168.35.128-192.168.35.143)
192.168.35.144/30 (192.168.35.144-192.168.35.147)
192.168.35.148/31 (192.168.35.148-192.168.35.149)
192.168.35.150/32
192.168.35.151/32
192.168.35.152/29 (192.168.35.152-192.168.35.159)
192.168.35.160/27 (192.168.35.160-192.168.35.191)
192.168.35.192/26 (192.168.35.192-192.168.35.255)

Метод дихотомии в действии. Возможно, будет понятнее, если нарисовать картинку...

alsergeich 24.06.2009 00:54

эти цифры мне выдал http://ipcalc.dewil.ru/
когда Адрес1 был 192.168.35.0 а адрес2 192.168.35.150
может это и не очень корректно...

когда расписал на бумажке, получил такие данные:
192.168.35.0/25
192.168.35.128/26
192.168.35.128/27
192.168.35.128/28
192.168.35.144/29
192.168.35.144/30
192.168.35.148/31
192.168.35.150/32

добавлено через 3 минуты
Вот у меня реально мозг разрушается...
почему так???
192.168.35.0/25 (192.168.35.0-192.168.35.127)
192.168.35.128/28 (192.168.35.128-192.168.35.143)
192.168.35.144/30 (192.168.35.144-192.168.35.147)
192.168.35.148/31 (192.168.35.148-192.168.35.149)
192.168.35.150/32
192.168.35.151/32
192.168.35.152/29 (192.168.35.152-192.168.35.159)
192.168.35.160/27 (192.168.35.160-192.168.35.191)
192.168.35.192/26 (192.168.35.192-192.168.35.255)

диапозоны которые написаны у меня:
192.168.35.0/25
192.168.35.128/26
192.168.35.128/27
192.168.35.128/28
192.168.35.144/29

а если конкретнее

192.168.35.128/26
192.168.35.128/27
192.168.35.128/28

они какбы объединяются? почему их нет в вашем списке???


Или почему "недостающие" подсети у вас в конце...

192.168.35.0/25 (192.168.35.0-192.168.35.127)
192.168.35.128/28 (192.168.35.128-192.168.35.143)
192.168.35.144/30 (192.168.35.144-192.168.35.147)
192.168.35.148/31 (192.168.35.148-192.168.35.149)
192.168.35.150/32
192.168.35.151/32
192.168.35.152/29 (192.168.35.152-192.168.35.159)
192.168.35.160/27 (192.168.35.160-192.168.35.191)
192.168.35.192/26 (192.168.35.192-192.168.35.255)

не очень понимаю теорию...
то что написал я вроде бы правильно.. хотя опять таки. в том что написаля есть ньюанс - а что делать с теми частями которые я отбрасывал, что делать со вторыми половинками? может быть их тоже нужно вносить?

Borland 24.06.2009 01:13

Цитата:

Сообщение от alsergeich (Сообщение 1661180)
почему так???

Блин, ну я ж написАл алгоритм: "полусеть", в которую адрес не попал "отбрасываем" а оставшееся делим пополам. Дихотомия потому что! :)
Картинку нарисуйте...

Цитата:

Сообщение от alsergeich (Сообщение 1661180)
192.168.35.128/26
192.168.35.128/27
192.168.35.128/28

они какбы объединяются? почему их нет в вашем списке???

Классическая матрёшка. /28 это половина /27, которая половина /26.
В моём списке, (если его изобразить :biggrin:) подсети не пересекаются, все принадлежат сети /24 и занимают её полностью.

alsergeich 24.06.2009 01:32

вот мои расчеты на бумажке...
какой итоговый диапозон все же мой ответ на поставленную мне задачу.
0-127 128-255 /25
128-191 192-255 /26
128-159 160-191 /27
128-143 144-159 /28
144-151 152-159 /29
144-147 148-151 /30
148-149 150-151 /31
150/32

вот такие у меня расчёты получились..
но почему Вы сделали выборку именно таким способом?

Borland 24.06.2009 01:38

Цитата:

Сообщение от alsergeich (Сообщение 1661180)
эти цифры мне выдал

Он всё правильно выдал. Только отвечал на другой вопрос... ;) Список сетей (минимальный), перекрывающий заданный диапазон 192.168.35.0-192.168.35.150. Именно эти сети и выделит вам провайдер из своего пула, если вам дозарезу нужен данный диапазон адресов, не больше и не меньше. Задача со сходным, но не совсем тем же алгоритмом. И решение, соответственно, другое получается.

alsergeich 24.06.2009 01:39

а по поводу моих расчётов. приведенных сообщением выше?

Borland 24.06.2009 01:51

Цитата:

Сообщение от alsergeich (Сообщение 1661197)
почему Вы сделали выборку именно таким способом?

Двоичная математика. Дихотомия. Ну хоть у того же Девила гляньте про маски!!! http://ipcalc.dewil.ru/netmask/
Извините, с хренового ГПРС искать справочники проблематично...
Иначе чем напополам любая сеть не делится. Обратите внимание на количество и размеры кусков, из которых сложен любой "недвоичный" диапазон... в рассмотренном случае это куски размером от 1/2 до 1/256 (маска соответственно от /25 до /32) от исходного диапазона из 256 адресов (маска /24).

Borland 24.06.2009 02:03

Цитата:

Сообщение от alsergeich (Сообщение 1661201)
по поводу моих расчётов. приведенных сообщением выше?

Ну. И я так же практически считал. Только записано у меня по-другому немного...
Ответом на Вашу задачу (если я её правильно понял) является приведённый мной список из 9 подсетей, полученный последовательным распополамливанием исходной сети на полусети.
При этом исходный диапазон IP-адресов используется полностью (это не совсем так, но сейчас неважно), а искомый IP выделен в отдельную подсеть.

werwulf 24.06.2009 02:15

Цитата:

Сообщение от Borland (Сообщение 1661179)
192.168.35.151/32

Это как бы ошибка, туда 150 адрес не входит никак
выделение одного единственного адреса это 32 маска, но если адрес нужно выделить для канала точка-точка то, по классическому варианту будет 30 маска, ну и еще 31 маска не может использовать в жизни
Сама задача странна и в общем некорректна подозреваю, что умышленно

Borland 24.06.2009 02:35

Цитата:

Сообщение от werwulf (Сообщение 1661208)
Это как бы ошибка, туда 150 адрес не входит никак

Это не ошибка, он туда и не должен входить. Это "отходы производства" при выделении 192.168.35.150/32 в отдельную сеть.
Цитата:

Сообщение от werwulf (Сообщение 1661208)
для канала точка-точка то, по классическому варианту будет 30 маска

Я как бы и в курсе... ;) Маска 30 бит подразумевает 4 IP адреса, из которых 1 адрес сети, 1 broadcast и 2 могут быть использованы устройствами для канала.
Но в данном случае ни о каком канале речи нет.

werwulf 24.06.2009 03:38

не сомневаюсь, что в курсе ;) канал точка-точка, это не только канал, но и выделенная машина, что в общем по-моему все же коррелирует со статусом выделенного адреса.
Вообще, повторюсь, что впечатление от вопроса такое, что хотели услышать не набор масок в ответ..
ЗЫ
а можно расширить про "отходы производства", а то как-то в голову сходу ничего не приходит..

Borland 24.06.2009 12:39

Цитата:

Сообщение от werwulf (Сообщение 1661229)
впечатление от вопроса такое, что хотели услышать не набор масок в ответ

:confused:Тогда я вообще ничего не понимаю...
Цитата:

Сообщение от alsergeich (Сообщение 1661105)
Написать маску (или множество) масок, выделяющее из этой сети один единственный адрес 192.168.35.150

Я так понял, задача к роутингу относится. И что это задача деления сети на подсети.

Цитата:

Сообщение от werwulf (Сообщение 1661229)
расширить про "отходы производства"

Блин, уже и не знаю, как объяснять! :баран: Ну, нельзя из сети /24 выделить одиночную подсеть /32 так, чтобы не получилось "дырки" в адресном пространстве. Соответственно, таких подсетей будет пара.
Собственно, это следствие двоичности масок.
На самом деле, сетей каждого уровня в сети предыдущего уровня всегда две.
Ну рисовать не хотите - хоть представьте себе эту хрень графически...
О! или в дробях.
Принимаем за 1 сеть /24 (256 адресов).
нам нужно разбить её на минимальное количество частей так, чтобы одна из частей была 1/256 (одиночный адрес).
Имеем:
1=1/2+1/4+1/8+1/16+1/32+1/64+1/128+1/256+1/256
Т.е. одиночных адресов будет 2.

werwulf 25.06.2009 00:13

Цитата:

Сообщение от Borland (Сообщение 1661272)
:confused:Тогда я вообще ничего не понимаю...

если это было собеседование, а не тупой тест, то собеседующего иногда интересует прежде всего реакция на задачу и ход мыслей.
Цитата:

Сообщение от Borland (Сообщение 1661272)
Я так понял, задача к роутингу относится. И что это задача деления сети на подсети.
Блин, уже и не знаю, как объяснять! :баран: Ну, нельзя из сети /24 выделить одиночную подсеть /32 так, чтобы не получилось "дырки" в адресном пространстве. Соответственно, таких подсетей будет пара.
Собственно, это следствие двоичности масок.
На самом деле, сетей каждого уровня в сети предыдущего уровня всегда две.
Ну рисовать не хотите - хоть представьте себе эту хрень графически...
О! или в дробях.
Принимаем за 1 сеть /24 (256 адресов).
нам нужно разбить её на минимальное количество частей так, чтобы одна из частей была 1/256 (одиночный адрес).
Имеем:
1=1/2+1/4+1/8+1/16+1/32+1/64+1/128+1/256+1/256
Т.е. одиночных адресов будет 2.

согласен, вчера чего-то заклинило после работы .. извиняюсь


Часовой пояс GMT +4, время: 15:25.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.