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


Автор: Orthenner 23.5.2004, 15:40
Значит так, задача такая:
Имеется адрес и маска, например: 62.118.0.0/16
Необходимо проверить, попадает ли в эту сеть адрес, ну например 62.118.0.58.
Не могли бы подсказать алгоритм этой проверки - чем детальнее, тем лучше.
Заранее спасибо.
Orthenner.

Автор: Secandr 23.5.2004, 15:55
маска - это способ разделить IP на две области - сеть и адрес машины.
маска - совокупность бит:11111100000

где первые единицы - сеть, последнии нули - компьютер.
насколько я помню 16 - количество еиниц.

Тоесть где стоят 11111 - нужно брать байты из IP, где 0000 - можно ставить любой.

Пример:
IP = 101100111***101(в двоичной форме)
маска=1111111***100 (все 1, кроме последних двух)
тогда диапазон ip:
101100111***100
101100111***111

Для того чтобы определить диапазон нужно перевести IP в двоичную систему, взять первых 16 битов, дополнить остаток нулями(по идеи ip - 4 байта = 32 бита) - в твоём случае 16 нулей, и перевести обратно в десятичную запись. Получим первый IP диапазона

Затем берём первых 16 байт из IP, и добавляем 1 (16 штук) - получаем последний
Пример:
62 =
118=
тогда ip=00111110011101100000000000000000
маска = 11111111111111110000000000000000

тогда диапазон от 00111110011101100000000000000000 до 00111110011101101111111111111111
в десятичной записи:
62.118.0.0
62.118.255.255

Автор: Orthenner 23.5.2004, 16:20
Спасибо большое. Теперь разобрался smile.gif.
Т.е. биты адресов, которые попадают в данную сеть - последние (32-маска).
Если маска - 19, то в данную сеть попадает 11111.11111111 адресов или
8191 адресов.

Автор: Secandr 23.5.2004, 23:47
Orthenner Я сам разобрался, вспомнить бы ещё, что есть сети класса A,B,C smile.gif

Автор: dwr_budr 4.6.2004, 07:18
Secandr

Дык A, B и C это оч просто smile.gif

Просто псевдонимы сетей разных размерностей
A это ххх.ххх.ххх.ххх/24
B это ххх.ххх.ххх.ххх/16
C это ххх.ххх.ххх.ххх/8

Автор: Akina 4.6.2004, 07:28
dwr_budr
Цитата
Просто псевдонимы сетей разных размерностей
A это ххх.ххх.ххх.ххх/24
B это ххх.ххх.ххх.ххх/16
C это ххх.ххх.ххх.ххх/8

Наоборот biggrin.gif
A это ххх.ххх.ххх.ххх/8
B это ххх.ххх.ххх.ххх/16
C это ххх.ххх.ххх.ххх/24

И вообще с учетом того что CIDR теперь стандарт, надо бы забыть о классах.

Автор: dwr_budr 4.6.2004, 08:48
Akina

Блин точно smile.gif

Автор: ida 21.7.2004, 16:35
Народ, можно поподробнее о безклассовой междоменной маршрутизации (CIDR)? Насколько я понимаю, в такой записи число после слэша - это количество разрядов, которые предназначены для идентификации хоста внутри сети?... А все остальные разряды перед ними - это адрес сети?...

Akina, а когда CIDR стал стандартом (дай сцылочку на RFC, если знаешь, плиз)?

Автор: MuToGeN 23.7.2004, 11:00
Число после слеша - это кол-во единиц, если взять маску в двоичном виде.

Автор: Akina 23.7.2004, 15:22
ida
RFC - не стандарт. Стандарт - STDxxx.
Насчет конкретных документов - http://www.faqs.org/rfcs/index.html
Первый (кажется) документ касательно стандартизации CIDR - это "RFC 1817 - CIDR and Classful Routing". Можешь искать по обратным ссылкам на него.

PS. Кстати, бывают еще и "дырявые" маски... biggrin.gif

Автор: ida 26.7.2004, 14:11
Всем спасибо, все нашла, толстые книжки forever. Цитирую, господа:

Цитата
В 1993 году группа IETF приняла стандарт CIDR (Classless Inter-Domain Routing - безклассовая внутридоменная маршрутизация). Данный стандарт (RFC 1519) позволяет использовать сетевую часть адреса любой длины, не обязательно кратной 8 бит. Сетевой адрес стандарта CIDR записывается четырьмя десятичными числами, разделенными точками, например а.б.в.г/д, где д указывает количество разрядов в сетевой части адреса.


А я думала, что после слэша количество разрядов хостовой части адреса. Пэрэпутала.

Автор: Akina 26.7.2004, 16:04
ida
В принципе все началось с супернеттинга (RFC 1338)...

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