Из Википедия:
Наиболее часто используемый IP-адрес на устройстве обратной связи - 127.0.0.1 для IPv4, хотя ему сопоставляется любой адрес в диапазоне от 127.0.0.0 до 127.255.255.255.
Это не так, по крайней мере, для FreeBSD:
$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address
Это правильное поведение?
FreeBSD (также OS X, и я считаю, что NetBSD и OpenBSD) будет отвечать на запросы, отправленные в настроен адреса на интерфейсе обратной связи, как и для адресов на любом другом интерфейсе - если вы хотите получить ответ, вам нужно сначала назначить адрес:
mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
ping: sendto: Can't assign requested address
^C
[mgraziano@monitor ~]$ sudo ifconfig lo0 alias 127.1.1.1 netmask 0xFFFFFFFF
[mgraziano@monitor ~]$ ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet 127.1.1.1 netmask 0xffffffff
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
[mgraziano@monitor ~]$ ping 127.1.1.1
PING 127.1.1.1 (127.1.1.1): 56 data bytes
64 bytes from 127.1.1.1: icmp_seq=0 ttl=64 time=0.020 ms
^C
О логике этой реализации см. RFC 3330:
127.0.0.0/8 - Этот блок предназначен для использования в качестве Интернет-хоста
адрес обратной связи. Дейтаграмма, отправленная протоколом более высокого уровня в
адрес в любом месте этого блока должен возвращаться внутрь хоста.
Обычно это реализуется с использованием только 127.0.0.1/32 для обратной связи.,
но никакие адреса в этом блоке не должны появляться ни в какой сети
везде [RFC1700, стр. 5].
(курсив мой)
Linux и Windows здесь "полезны", однако с моего кресла, отвечая на запрос, который был отправлен на адрес не назначен этому хосту неправильное поведение ...
Я вижу то же поведение, что вы описываете, во FreeBSD 8.1. Mac OS X, которая имеет некоторые общие черты с FreeBSD, также, похоже, отображает только 127.0.0.1.
Windows 7 и Linux (debian с ядром 2.6.26), похоже, отображают полный диапазон адресов, как вы описываете в цитате из Википедии (и как предписано в RFC).
Цитата из RFC 3330:
127.0.0.0/8 - этот блок предназначен для использования в качестве адреса обратной связи узла Интернета. Дейтаграмма, отправленная протоколом более высокого уровня на адрес в любом месте этого блока, должна возвращаться внутри хоста. Обычно это реализуется с использованием только 127.0.0.1/32 для обратной связи, но никакие адреса в этом блоке никогда не должны появляться ни в какой сети где-либо [RFC1700, стр. 5].
В зависимости от того, насколько строго вы интерпретируете слово «следует», некоторые могут утверждать, что поведение FreeBSD / MacOS неверно. Но, учитывая повсеместное использование 127.0.0.1 в качестве адреса обратной связи, я сомневаюсь, что это имеет значение.
На данный момент на этот вопрос был дан полный ответ примерно три раза, поэтому я просто хотел добавить несколько центов.
Обратите внимание, что в течение некоторого времени конфигурация ipfw по умолчанию отбрасывает такие пакеты:
./rc.firewall: ${fwcmd} add 100 allow ip from any to any via lo0
./rc.firewall: ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any
поэтому с включенным брандмауэром вместо
ping: sendto: Can't assign requested address
вы можете получить
[savetherbtz@PH34R ~]$ ping 127.0.0.2
PING 127.0.0.2 (127.0.0.2): 56 data bytes
ping: sendto: Permission denied
PS. Конечно, сервер может быть построен без INET
(Поддержка IPv4) и у вас не будет даже 127.0.0.1
знак равно
Это противоречит тенденции. Не держите под рукой коробку FreeBSD, чтобы проверить, является ли это FreeBSD или ваша конфигурация.
В RFC сказано 127.0.0.1/24 - значит, он должен отвечать.