Я только что прочитал этот удивительный ответ Serverfault на очень простой вопрос: как работает подсеть IPv4? Хотя я следую большей части всего того, что было сказано в принятом ответе, я все еще рисую большую мысленную пробел над самой важной концепцией, описанной в самом начале: как работают вычисления битовой маскировки подсети.

Пример в этом ответе - IP 10.13.216.41/18:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address as bytes

Затем автор предоставляет эту рабочую область:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask (/18 => 255.255.192.0)
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Я понимаю, как генерируется 3-я строка: это логическое соединение ("ANDing") битов в IP с битами в маске подсети. Это имеет полное значение для меня. Кстати, что это за третья строка (00001010.00001101.11000000.00000000): идентификатор хоста, идентификатор сети или идентификатор подсети?

Но 4-я строка (00000000.00000000.00011000.00101001) просто не имеет никакого смысла для меня. Я прочитал этот ответ несколько раз и не могу понять, как он вычисляется / получается, и для чего он даже представляет / полезен (идентификатор хоста, идентификатор сети, идентификатор подсети?). Есть идеи, откуда это ?! Заранее спасибо!

1 ответ1

1

Первое - обратите внимание, что 4-я строка имеет противоположный результат 3-й строки. Там, где битовое соединение с маской оставило нетронутыми 1 бит, строка 4 имеет противоположность, поэтому это должно было быть соединение с противоположностью маски.

Таким образом, если строка 3 была address AND mask , строка 4 является address AND (NOT mask) .

Что означают обе строки, дан ответ ниже.


Второе - забудьте про "идентификатор подсети". Это был отдельный номер назад, когда у вас были классные сети с подсетями. В современных сетях он больше не отделен от "идентификатора сети".

Это немного упрощает ситуацию, поскольку теперь у вас есть только два состояния: если оно покрыто маской в 1 бит, то это сетевая часть; если он покрыт 0-битами, то это часть хоста.

Кроме того, CIDR требует, чтобы биты маски подсети были смежными, поэтому становится еще проще: /18 означает, что первые 18 бит слева - это идентификатор сети, а все остальное (т.е. 14 оставшихся битов) - это идентификатор хоста.


1 Ну, вы все равно можете вычислить "идентификатор подсети", когда делите большую сеть на более мелкие - это гораздо более заметно в IPv6, где принято выделять /48 для сайтов и использовать подсети /64-размера, что приводит к очень аккуратное деление.

Однако, хотя ранние редакции IPv6 временно восстанавливали формальную структуру адресов (у вас были "агрегации верхнего уровня" и т.д.), Это опять-таки уже не вещь, и любые "идентификаторы подсети" - это исключительно ваше собственное решение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .