Получим следующий адрес сети: 192.168.176.0/23. Каковы первый и последний IP-адреса этой сети?
После этого ответа https://serverfault.com/a/327782/288201 Я предполагаю, что:
/ 23 означает 23 бита для подсети. При 8 битах на байт мы получаем 16 бит для первых двух байтов, а затем семь (7) для третьего => 1111 1111. 1111 1111. 1111 1110. 0000 0000, верно?
Это означает, что наши последние два байта будут иметь форму (nnnn nnnH. HHHH HHHH), где n - бит подсети, а H - бит хоста.
Таким образом, сетевой адрес (nnnn nnn | 0 0000 0000) -> .0, широковещательная передача (nnnn nnn | 1 1111 1111) -> 2 ^ 9 широковещательно? Невозможно. Здесь я кое-что упускаю, что-то простое. Итак, каким будет первый и последний IP-адрес? Это то, чего я не получаю после ответа, упомянутого в приведенной выше ссылке (от b0fh).
Первый 192.168.176.1, последний 192.168.1770,254?
Я постараюсь пояснить, что я считаю источником вашего замешательства:
Адрес IPv4 - это одно 32-битное целое число, но обычно оно не форматируется таким образом, когда мы записываем адрес.
Как я уверен, вы знаете, что нормой является писать адрес как [first eight bits in decimal].[next eight bits in decimal].[next eight bits in decimal].[last eight bits in decimal]
но важно понимать, что на самом деле это просто другой способ форматирования этого единственного, потенциально очень большого числа.
Когда вы указываете CIDR маска сети (/n
), который говорит, сколько битов из 32-битного адреса образуют сетевой идентификатор, а оставшиеся биты образуют идентификатор хоста.
В вашем примере 192.168.176.0/23
первые 23 бита являются префиксом сети, оставляя 9 бит для идентификатора хоста, что означает, что идентификатор хоста пересекает границу последнего октета. Идентификатор хоста повлияет на последние два сегмента a.b.c.d
-форматированный адрес.
Чтобы проиллюстрировать это, я включу sipcalc
вывод, показывающий адреса как необработанные биты (действительно более важные для понимания математики), а также a.b.c.d
-форматированные адреса.
$ sipcalc -b 192.168.176.0/23
-[ipv4 : 192.168.176.0/23] - 0
[CIDR bitmaps]
Host address - 11000000.10101000.10110000.00000000
Network address - 11000000.10101000.10110000.00000000
Network mask - 11111111.11111111.11111110.00000000
Broadcast address - 11000000.10101000.10110001.11111111
Cisco wildcard - 00000000.00000000.00000001.11111111
Network range - 11000000.10101000.10110000.00000000 -
11000000.10101000.10110001.11111111
Usable range - 11000000.10101000.10110000.00000001 -
11000000.10101000.10110001.11111110
-
$
$ sipcalc 192.168.176.0/23
-[ipv4 : 192.168.176.0/23] - 0
[CIDR]
Host address - 192.168.176.0
Host address (decimal) - 3232280576
Host address (hex) - C0A8B000
Network address - 192.168.176.0
Network mask - 255.255.254.0
Network mask (bits) - 23
Network mask (hex) - FFFFFE00
Broadcast address - 192.168.177.255
Cisco wildcard - 0.0.1.255
Addresses in network - 512
Network range - 192.168.176.0 - 192.168.177.255
Usable range - 192.168.176.1 - 192.168.177.254
-
$
Что вас сбивает с толку, так это то, что вы пытаетесь преобразовать часть хоста в десятичное значение и суммировать его до сетевого адреса, в то время как часть хоста разделена на два октета.
Ваша сеть:
11000000.10101000.10110000.00000000
Ваша сетевая маска:
11111111.11111111.11111110.00000000
Ваша маска подстановки (часть, которая изменится):
00000000.00000000.00000001.11111111
Обычно, когда вы говорите 2^9 = 512
транслируется, вы просто забываете, что один бит части хоста находится в последнем бите третьего октета. По мере его изменения вы получите либо следующее:
11000000.10101000.10110000.<something>
Или это :
11000000.10101000.10110001.<something>
Итак, вот ваш "512
"десятичная форма на самом деле 0.0.1.255
(всегда следует использовать десятичную форму с точками, чтобы не допустить этой ошибки). Несетевая часть пойдет с 192.168.176.0
к 192.168.176.0 + 0.0.1.255
. Последний адрес, являющийся широковещательным адресом, вы узнаете, что это 192.168.177.255
.
Вы также можете получить его, добавив маску подстановки к своему сетевому адресу:
11000000.10101000.10110000.00000000
+ 00000000.00000000.00000001.11111111
= 11000000.10101000.10110001.11111111
Который 192.168.177.255
.