Для чего нужен IP-адрес 127.0.0.2?


39

Я запускаю пример в hiredis, который использует «127.0.0.2» в качестве IP-адреса сервера Redis, и он работает правильно. На самом деле, сервер Redis работает на той же машине. Я знаю, что «127.0.0.1» - это IP-адрес «lo», но как насчет «127.0.0.2»? Это так же, как "127.0.0.1"?

Ответы:


37

Да:

Стандарты сети IPv4 резервируют весь адресный блок 127.0.0.0/8 для целей обратной связи. Это означает, что любой пакет, отправленный на один из этих 16 777 214 адресов (с 127.0.0.1 по 127.255.255.254), возвращается обратно. IPv6 имеет только один адрес: :: 1.

Для этой цели в различных стандартах IETF зарезервирован блок адресов IPv4 127.0.0.0/8 в нотации CIDR и адрес IPv6 :: 1. Наиболее часто используемый адрес IPv4 - 127.0.0.1. Обычно эти петлевые адреса отображаются на имена хостов, localhost или loopback.

или из самого RFC:

127.0.0.0/8 - этот блок назначен для использования в качестве петлевого адреса узла Интернета. Датаграмма, отправленная протоколом более высокого уровня на адрес в любом месте этого блока, должна вернуться обратно в хост. Обычно это реализуется с использованием только 127.0.0.1/32 для обратной связи, но никакие адреса в этом блоке никогда не должны появляться ни в одной сети [RFC1700, стр. 5].

Для развлечения попробуйте пинговать:

$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms

С тех пор страница в Википедии изменилась и теперь говорит «хотя любой адрес в диапазоне от 127.0.0.1 до 127.255.255.254 сопоставлен с ней», что делает суть этого ответа в прямом конфликте с Википедией.
SilverSkin

6
@SilverSkin Не могли бы вы объяснить, что вы имеете в виду? Единственное различие между тем, что находится в ответе и тем, что сейчас есть в Википедии, состоит в том, что они (правильно) исключили 127.0.0.0 и 127.255.255.255, которые являются сетевыми / широковещательными адресами. Суть все та же - 127.xxx == 127.0.0.1 (за исключением 127.0.0.0 и 127.255.255.255, что ожидается в любой сети / 8).
icyrock.com

1
Таким образом, нет никакой разницы между привязкой к 127.0.0.1 и привязкой к 127.0.0.124? Так почему hiredis беспокоится о 127.0.0.2, если это тот же адрес? И что произойдет, если вы отправите сообщение на 127.0.0.0?
CMCDragonkai

7
Нужно отметить, что это не то же самое в OS X, который только 127.0.0.1 маршрутизировать в loopback. Смотрите здесь .
Венбинг Ли

6
@CMCDragonkai 127.0.0.1 и 127.0.0.124 могут находиться на одном и том же интерфейсе, но они не совпадают по адресу. Можно использовать необычный ip, такой как 127.0.0.2, если вы хотите использовать настройку службы на общем порте и не мешать другим службам, которые могут прослушивать этот же порт на 127.0.0.1
Кейт Рейнольдс

6
  • «Все ли 127.x.x.xадреса ограничены локальной машиной?» Да
  • «Все ли 127.x.x.xадреса связаны с loинтерфейсом» Да
  • « 127.x.x.xАдреса маршрутизируются по сети?» Нет.

127.0.0.0/8 - этот блок назначен для использования в качестве петлевого адреса узла Интернета. Датаграмма, отправленная протоколом более высокого уровня на
адрес в любом месте этого блока, возвращается обратно в хост. Это
является обычно реализуется с использованием только 127.0.0.1/32 для шлейфа. Как
описано в [RFC1122], раздел 3.2.1.3, адреса внутри всего блока 127.0.0.0/8 нигде законно не появляются ни в одной сети. - RFC5735

  • «Это так 127.0.0.2же, как 127.0.0.1НЕТ

Несмотря на то , 127.0.0.1чтобы 127.255.255.254все локальные адреса , привязанные к интерфейсу lo. Они не одинаковы. Вы можете использовать каждый адрес для привязки разных сервисов к одному и тому же порту. Например, 16 миллионов веб-серверов на порту 80, доступные только с локального компьютера (если у вас не хватает памяти или других ресурсов в первую очередь)

Я только что установил сервис докеров для привязки 127.0.0.2:80. Затем я добавил псевдоним для /etc/hosts. Теперь я могу подключиться к нему через http://myserver, но не через http://127.0.0.1или http://localhost. Однако это доступно только для этой машины. Как есть, только на loинтерфейсе.

Затем я установил другую службу докера для привязки 127.0.0.3:80, включил службу Python localhost:80и другую 127.0.0.4:80.


Это может не работать на всех операционных системах. Я использую Debian (9) Gnu / Linux, ядро ​​Linux 4.9.0-3-amd64. Некоторые ОС могут обрабатывать все адреса 127.0.0.1127.255.255.254одинаково. Некоторые могут работать только с 127.0.0.1.

смотрите также



Это заняло у меня около часа исследований, но я наконец смог понять, что вы пытаетесь передать. Я обновил цитату из статьи Википедии в принятом ответе. Так как цитируемое утверждение изменилось за эти годы, я процитировал другое утверждение, чтобы восстановить ту оригинальную информацию, которая содержалась в ответе.
Ramhound

1

Не полный общий ответ (он уже есть). Этот мой ответ показывает пример, где 127.0.0.2был использован для решения проблемы.

Выдержка:

Оператор попытался протестировать некоторое программное обеспечение в случае, когда его соединение с сервером было отклонено. Это было сделано на сервере с помощью временного iptablesправила, которое отклоняет весь трафик с IP-адреса клиента. Клиент сразу же смог «увидеть», что соединение было отклонено.

Проблема возникла, когда этот человек перенес серверное программное обеспечение на тот же компьютер, что и клиент, и попытался использовать петлевой интерфейс. Было установлено, что правило блокирует связь, 127.0.0.1но информация, от которой было отклонено соединение, прошла то же правило и никогда не доходила до зависшего клиентского программного обеспечения (предположительно, до истечения времени ожидания).

Решение состояло в том, чтобы использовать 127.0.0.2в качестве адреса сервера и установить правило, которое отклоняет подключения к нему. Информация об отказе пошла 127.0.0.1и смогла передать клиенту программное обеспечение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.