Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Сетевые технологии > Расчета адресов в подсети и сетевых масок


Автор: admsasha 26.11.2006, 14:49
Подскажите алгоритм для расчета адресов в подсети и сетевых масок.

Как что вычисляется ?

Автор: maxim1000 26.11.2006, 14:55
перенёс из Алгоритмов

Автор: SoWa 26.11.2006, 19:00
Не понимаю. А разве не Random функция распределяет с исключением?

Автор: bilbobagginz 27.11.2006, 02:06
Цитата

А разве не Random функция распределяет с исключением? 

да не всегда рандом: иногда рандом, иногда псевдо-рандом, а иногда - тщательно отобранные рандомные величины.

по-всякому бывает...

Автор: admsasha 27.11.2006, 03:20
Цитата(SoWa @ 27.11.2006,  02:00)
Не понимаю. А разве не Random функция распределяет с исключением?

непонял, причет тут Random для расчета сети ???
задача такая, есть ip и маска, как посчитать сеть ?

т.е. есть данные
ip=192.168.1.10
mask=255.255.255.0
-----
надо получить
сеть 192.168.1.0 с префиксом /24


В двоичную систему всё это перевел, а как дальше ? что из чего вычитать ?

Автор: MuToGeN 27.11.2006, 10:47
192.168.1.10  = 11000000 10101000 00000001 00001010
255.255.255.0 = 11111111 11111111 11111111 00000000
После битового "и" имеем - 
11000000 10101000 00000001 00001010
(жирное - ИД сети, курсив - ИД хоста).
Адреса, где ИД хоста состоит только из нулей или единиц, отбрасываем - они используются для бродкастов. Остаются адреса с 00000001 по 11111110.

Автор: admsasha 27.11.2006, 12:37
Цитата(MuToGeN @  27.11.2006,  17:47 Найти цитируемый пост)
Адреса, где ИД хоста состоит только из нулей или единиц, отбрасываем - они используются для бродкастов. Адрес с последним байтом 11111110 (.254) тоже отбрасываем, т.к. используется для мультикастов. Остаются адреса с 00000001 по 11111101. 


На счет этого я не понял, подробнее распиши....
И сразу вопрос, как узнать минимальный IP и максимальный IP из этого диапозона... 

Автор: spin2 27.11.2006, 14:35
Добавлено @ 14:39 
Цитата(MuToGeN @  27.11.2006,  10:47 Найти цитируемый пост)
192.168.1.10  = 11000000 10101000 00000001 00001010
255.255.255.0 = 11111111 11111111 11111111 00000000
После битового "и" имеем:
11000000 10101000 00000001 00001010
(жирное - ИД сети, курсив - ИД хоста).


Сеть как раз есть кусок ID сети, а вместо ID хоста - все нули, то есть
11000000 10101000 00000001 00000000 = 192.168.1.0
А маска "/24" - это означает, что из 32-х бит маски 24 отводятся на идентификатор сети.
Первый и последний адреса: первый - 1, естественно. 
11000000 10101000 00000001 00000001 = 192.168.1.1
Последний - 254, потому что 255  - широковещательный.
11000000 10101000 00000001 11111110 = 192.168.1.254

Автор: MuToGeN 27.11.2006, 14:45
admsasha, подробнее:

Есть такое устаревшее понятие как бродкаст. IP-пакет, отправленный на бродкастный адрес сети, должен приходить на все доступные в сети хосты. Для этого используются 2 адреса, состоящих из ИД сети и нулей вместо ИД хоста и единиц вместо ИД хоста. В данном случае это 192.168.1.0 и 192.168.1,255. В ipv6 его не будет, все ф-ии, связанные с ним, достанутся мультикастам.
На бродкастах например работает ARP. Ситуация примерно такая - я - 192.168.1.24 и мне надо подключиться к 192.168.1.1, но я знаю только его IP и не знаю MAC адрес. Я посылаю бродкаст-пакет "У кого IP 192.168.1.1?", 192.168.1.1 отвечает "У меня", из ответа я узнаю его MAC.

Фигню сморозил:
И есть такое понятие как мультикаст - машины сначала договариваются о том, кому нужна передаваемая информация, и далее при отправке пакета его получают только те, кто должен его получить.

Т.е., минимальный IP в бинарном виде сотоит из ID сети + (32 - маска по CIDR - 1) нулей + единица, максимальный - ID сети + (32 - маска по CIDR - 1) единиц + '1', т.е. все возможные комбинации, кроме первого и последнего ИД хоста.

Автор: spin2 27.11.2006, 15:29
MuToGeN, странные вещи Вы рассказываете. 254-й адрес - вполне обычное дело. А со всеми нулями на месте хоста - это адрес сети, а не широковещательный.

Автор: admsasha 27.11.2006, 16:28
Цитата(spin2 @  27.11.2006,  21:35 Найти цитируемый пост)
Первый и последний адреса: первый - 1, естественно. 
11000000 10101000 00000001 00000001 = 192.168.1.1
Последний - 254, потому что 255  - широковещательный.
11000000 10101000 00000001 11111110 = 192.168.1.254


Что-то я не понял, как вы вычислили эти адреса (мин/макс) ?

С Broadcast разобрался.

Автор: MuToGeN 27.11.2006, 17:59
Цитата(spin2 @  27.11.2006,  15:29 Найти цитируемый пост)
странные вещи Вы рассказываете

Извиняюсь, действительно фигню сказал -)
http://www.iana.org/assignments/multicast-addresses, http://www.google.ru/url?sa=t&ct=res&cd=7&url=http%3A%2F%2Fwww.cisco.com%2Funivercd%2Fcc%2Ftd%2Fdoc%2Fcisintwk%2Fito_doc%2Fipmulti.htm&ei=8vxqReyDEKXa2AKbvriOCw&usg=__lacR3xKc0HGEcGJkuj560BYAzfA=&sig2=8FT-w7tkhk7NALya8wPTQA

Автор: spin2 27.11.2006, 18:38
admsasha, у Вас есть ip=192.168.1.10 и mask=255.255.255.0. 
У маски в двоичном виде 24 "1" сначала, а потом 8 "0". То, где "1" дает нам адрес сети и 8 бит остается у нас на адрес хоста.
А что такое 8 бит? Это все от 00000000 до 11111111:
00000000
00000001
00000010
...
11111100
11111101
11111110
11111111

Далее, всегда первое уходит на сеть (00000000) и последнее - на широковещательный (11111111). Что остается? Первый хост - 00000001 и последний - 11111110. Или в десятичном виде 1 и 254.

Автор: admsasha 28.11.2006, 03:42
Цитата(spin2 @  28.11.2006,  01:38 Найти цитируемый пост)
admsasha, у Вас есть ip=192.168.1.10 и mask=255.255.255.0. 
У маски в двоичном виде 24 "1" сначала, а потом 8 "0". То, где "1" дает нам адрес сети и 8 бит остается у нас на адрес хоста.

Это то понятно, я думал какой то другой подсчет имеется, тут грубо говоря: min=сеть+1, max=бродкаст-1.


Спасибо.

Автор: spin2 28.11.2006, 14:59
Цитата(admsasha @  28.11.2006,  03:42 Найти цитируемый пост)
Это то понятно, я думал какой то другой подсчет имеется, тут грубо говоря: min=сеть+1, max=бродкаст-1.

Одно и то же. smile

Автор: admsasha 2.12.2006, 19:38
Кстате, вот что получилось.
http://www.unix.lviv.ua/component/option,com_wrapper/Itemid,47/

Прошу не считать это рекламой, я даю ссылку на конкретном топике на конкретную страницу. 

Автор: ZeeLax 3.12.2006, 09:06
Цитата(admsasha @  2.12.2006,  22:38 Найти цитируемый пост)
Кстате, вот что получилось.
То что получилось

работает smile
только параметры переобзовите в одном стиле. А то "Сеть", потом "BroadCast".

Автор: Secandr 3.12.2006, 11:03
Ещё что хотел сказать, надо бы в програмку встроить проверку на правильность маски, ибо сейчас она хавает маску 255.252.255.0, что есть неправильно smile

Есть конечно в циске вилдкармаск(кажется так называется), которая может быть и 255.0.0.255, но это уже вне стандарта smile

Автор: ZeeLax 3.12.2006, 13:09
Цитата(Secandr @  3.12.2006,  14:03 Найти цитируемый пост)
Есть конечно в циске вилдкармаск(кажется так называется), которая может быть и 255.0.0.255, но это уже вне стандарта smile 

Не совсем верно. Wildcard bits - набор, определяющий, в каких позициях будет производится сравнение IP-адреса пакета с IP-адресом, указанным, например в списке контроля доступа. Уменьшает количество операций над адресом/маской и как следствие ускоряет обработку пакетов маршрутизатором. Так что всё в рамках стандарта smile

Автор: admsasha 3.12.2006, 13:38
Цитата(ZeeLax @  3.12.2006,  16:06 Найти цитируемый пост)
только параметры переобзовите в одном стиле. А то "Сеть", потом "BroadCast". 
 Имеется введу по русски ? "бродкаст" ?

Автор: Secandr 3.12.2006, 13:41
ZeeLax, по сути Wildcard bits не есть маска, так что всё же проверку маски стоит ввести в софтинке.

Автор: ZeeLax 3.12.2006, 13:54
Цитата(Secandr @  3.12.2006,  16:41 Найти цитируемый пост)
проверку маски стоит ввести в софтинке. 

конечно конечно, против этого я ничего не говорил.

Добавлено @ 13:56 
Цитата(admsasha @  3.12.2006,  16:38 Найти цитируемый пост)
 Имеется введу по русски ? "бродкаст" ? 

Имеется ввиду на одном языке. Если на русском, то по-русски, а не транслитом.

Автор: spin2 4.12.2006, 16:45
admsasha, еще я бы добавила такую функциональность: если маска не указана, то берется маска соответствующего класса. 

Автор: admsasha 4.12.2006, 16:53
Всё, поправленно :-)

Еще замечания есть ? 
Буду рад предложениям, заранее потренируюсь :-D

Да и админам вдруг пригодится

Добавлено @ 17:02 
spin2, хорошо... 
только уточнение...
если стоит сеть x.y.z.0 - то маска 255.255.255.0
если x.y.0.0 - то 255.255.0.0

так ?
а если x.y.z.23 - то ?

Автор: spin2 4.12.2006, 18:32
admsasha, это по первому числу (х) нужно смотреть. Есть же разбиение сетей на классы:
A - маска /8, адреса 1-126
B - /16, адреса 129-191
C - /24, адреса 192-223

Автор: admsasha 4.12.2006, 19:11
Цитата(spin2 @  5.12.2006,  01:32 Найти цитируемый пост)
A - маска /8, адреса 1-126
B - /16, адреса 129-191
C - /24, адреса 192-223

эм.. куда 127 и 128 делись ? :-D
а адреса > 223 ?

Автор: DENNN 5.12.2006, 00:51
Цитата(admsasha @  4.12.2006,  16:53 Найти цитируемый пост)
Да и админам вдруг пригодится

админы пользуют ipcalc когда в голове посчитать не удается )))

Автор: Secandr 5.12.2006, 08:46
Админы пользуются простым калькулятором smile
Количество хостов в сети:
2^(32-[маска в битах])-2
количество хостов, которое можно выдать клиенту, если есть шлюз:
2^(32-[маска в битах])-3
Первый айпи для маски XX бит должен быть
2^(32-[маска в битах])*N
шлюз
2^(32-[маска в битах])*N+1
броадкаст:
2^(32-[маска в битах])*(N+1)-1

Степени двойки админ должен помнить до 2^12   smile 



а адреса > 223 относятся к мультикастовому диапазону, если мне память не изменяет.

Автор: MuToGeN 5.12.2006, 12:46
Цитата(admsasha @  4.12.2006,  19:11 Найти цитируемый пост)

эм.. куда 127 и 128 делись ? :-D
а адреса > 223 ?

Общая логика такая - раскладываем маску на биты и смотрим за тем, чтобы оно состояло чтрого из 2х частей, одна из них - только единицы (первая), другая - только нули (вторая), т.е. что-то типа 11110000 может являться маской, а что-то типа 00111001 не может.

Добавлено @ 12:49 
Цитата(Secandr @  5.12.2006,  08:46 Найти цитируемый пост)
а адреса > 223 относятся к мультикастовому диапазону

Мультикаст - это только .0 и .225 (для класса C). Я сам про .224 я несколько раз писал фигню, извиняюсь, был неправ.

Автор: Secandr 5.12.2006, 23:32
MuToGeN, это броадкаст

http://www.iana.org/assignments/multicast-addresses
Код

The multicast addressess are in the range 224.0.0.0 through 239.255.255.255.


P.S. Ну уж модератор-то раздела "Сетевые технологии" должен мультикаст от броадкаста отличать  smile 

Автор: DENNN 6.12.2006, 01:07
Спасибо Secandr, а то я уже сам сомневаться начал  smile 

Автор: admsasha 6.12.2006, 09:52
Цитата(spin2 @  4.12.2006,  23:45 Найти цитируемый пост)
admsasha, еще я бы добавила такую функциональность: если маска не указана, то берется маска соответствующего класса.  
 Добавил такую возможность :-) можете протестить

Еще замечания ?  smile 

Автор: MuToGeN 6.12.2006, 11:08
Secandr, сори, второй раз ошибаюсь

Автор: spin2 6.12.2006, 17:02
admsasha, отлично. smile

Автор: NEt_Hunter 4.3.2007, 21:44
Цитата

Админы пользуются простым калькулятором 
Количество хостов в сети:
2^(32-[маска в битах])-2
количество хостов, которое можно выдать клиенту, если есть шлюз:
2^(32-[маска в битах])-3
Первый айпи для маски XX бит должен быть
2^(32-[маска в битах])*N
шлюз
2^(32-[маска в битах])*N 1
броадкаст:
2^(32-[маска в битах])*(N 1)-1

Secandr, N это что? Покажите, пожалуйста, эти вычисления для данного примера

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)