Действительно ли это допустимо, чтобы иметь часть обнуленного адреса IPv4?

Моя версия:

#!/bin/bash

if [ ! -f "/suid.old" ]; then                          # note: !
   find / -perm -4000 -o -perm -2000 -ls > /suid.old   # note: dash before ls; slash before file
else
   find / -perm 4000 -o -perm -2000 -ls > /suid.new
   diff /suid.old /suid.new > /newchanges.list
   mv /suid.new /suid.old                              # could be handy
fi
36
задан 12 August 2011 в 09:11
6 ответов

Нет, они являются абсолютно неправильными.

На самом деле это - допустимый IP-адрес: 192.168.24.0

Как 167.23.0.1.

Разделение IP-адреса в точечные сегменты является чисто человеческим удобством для дисплея. Намного легче помнить 192.168.1.42 чем 3232235818.

Какие вопросы к компьютерам разделение (сетевая маска). Это не допустимо, чтобы иметь адрес узла с разделом хоста набора адреса полностью к 0 или 1.

Так, 192.168.24.0, пока сетевая маска такова, что некоторые биты установлены в части хоста. Посмотрите следующие вычисления:


michael@challenger:~$ ipcalc 192.168.24.0/16
Address:   192.168.24.0         11000000.10101000. 00011000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

В этом случае часть адреса (правая сторона) имеет набор на 2 бита. Это - допустимый адрес узла в 192.168.0.0/16 подсети.


michael@challenger:~$ ipcalc 192.168.24.255/16
Address:   192.168.24.255       11000000.10101000. 00011000.11111111
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

В этом случае часть адреса имеет набор на 10 битов и сброс на 6 битов. Это - другой допустимый адрес узла в той же подсети.


michael@challenger:~$ ipcalc 192.168.24.0/24
Address:   192.168.24.0         11000000.10101000.00011000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.24.0/24      11000000.10101000.00011000. 00000000
HostMin:   192.168.24.1         11000000.10101000.00011000. 00000001
HostMax:   192.168.24.254       11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255       11000000.10101000.00011000. 11111111
Hosts/Net: 254                   Class C, Private Internet

В этом случае часть адреса имеет нулевой набор битов. Это не допустимый адрес узла в 192.168.24.0/24 сети.

70
ответ дан 28 November 2019 в 19:49

Если я не неправильно понимаю, Ваши тестеры мертвы неправильный. Допустимые IP-адреса могут, конечно, иметь 0 в них.

16
ответ дан 28 November 2019 в 19:49

Скажем, Вам нужны 510 адресов IP в одном диапазоне, и Ваш сетевой адрес 192.1.1.0, у Вас была бы/23 подсеть, которой один из Вашего IP хоста является.0 IP-адресами, Ваши тестеры неправы, если эти.0 адресов являются адресом узла. Если бы у Вас есть/24 сеть, было бы правильно сказать, что это было неправильно.

3
ответ дан 28 November 2019 в 19:49

В целом: Нет, не имеет значения, если существует 0 в адресе или нет.

Однако существует мелкая частица истины в том, что говорят Ваши тестеры. В некоторых случаях старое или поврежденное сетевое оборудование не будет работать правильно над адресами с 0 в последних октетах. Это происходит из-за старых classfull правил маршрутизации. В маршрутизации Classfull можно сказать сетевую маску от первого октета адреса. Если оборудование все еще будет следовать за classfull правилами маршрутизации, то оно, вероятно, обработает адрес как 200.100.1.0/16 неправильно.

12
ответ дан 28 November 2019 в 19:49

Предоставлять очень простой ответ: Один или несколько нулей в IP-адресе совершенно допустимы для адресов узла, пока те адреса не являются сетевым или широковещательным адресом.

Сетевые и широковещательные адреса являются допустимыми IP-адресами, они просто не применимы хостами.

2
ответ дан 28 November 2019 в 19:49

Если сетевой диапазон содержит более 256 адресов IPv4, некоторые из них будут содержать один или несколько нулей. Поскольку IPv4-адреса являются бесклассовыми, вы можете использовать sipcalc для проверки.

user@linux:~ # sipcalc 10.1.0.0/8 | grep "Usable range"
Usable range            - 10.0.0.1 - 10.255.255.254

user@linux:~ # sipcalc 10.0.0.1/8 | grep "Usable range"
Usable range            - 10.0.0.1 - 10.255.255.254

user@linux:~ # sipcalc 10.0.1.0/8 | grep "Usable range"
Usable range            - 10.0.0.1 - 10.255.255.254
2
ответ дан 31 January 2021 в 11:39

Теги

Похожие вопросы