10

Я знаю, что IPv6 позволяет пропускать последовательные нули. Но как насчет IPv4? Я не нашел никакой ссылки на это в Интернете, включая Wikipedia и RFC 791 - Internet Protocol. В этом документе предполагается, что "начальные нули могут быть опущены" в адресе IPv4 (поиск по термину "опущен"). Не достаточно конкретно.

Проверьте эту сессию оболочки:

[~]$ ping -c 1 127.1
PING 127.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[~]$ ping -c 1 127.0.1
PING 127.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms

--- 127.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms
[~]$ ssh 127.1 :
The authenticity of host '127.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '127.1' (ECDSA) to the list of known hosts.
alex@127.1's password: 

Очевидно, что и ping, и ssh понимают 127.1 и 127.0.1 так же, как 127.0.0.1. Где это указано?

2 ответа2

13

Около года назад есть сообщение о переполнении стека, которое спрашивает о чем-то подобном (этот пост).

Основная причина в том, что inet_aton() (man-страница) преобразует октеты в двоичный адрес.

ABCD

Каждая из четырех числовых частей указывает байт адреса; байты назначаются в порядке слева направо для создания двоичного адреса.

азбука

Части a и b определяют первые два байта двоичного адреса. Часть c интерпретируется как 16-битное значение, которое определяет самые правые два байта двоичного адреса. Эта нотация подходит для указания (устаревших) сетевых адресов класса B.

аб

Часть a определяет первый байт двоичного адреса. Часть b интерпретируется как 24-битное значение, которое определяет самые правые три байта двоичного адреса. Эта нотация подходит для указания (устаревших) сетевых адресов класса C.

a

Значение a интерпретируется как 32-разрядное значение, которое сохраняется непосредственно в двоичный адрес без какой-либо перестановки байтов.

Это не определено POSIX.anything - но это доступно довольно широко.

3

Это пережиток старых времен классной адресации. 127.1 означает сеть 127 , хост 1 . (И да, 127.257 является законным, потому что сеть 127 может иметь более 256 хостов.

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