35

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

3 ответа3

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
4

127.0.0.2 совпадает с 127.0.0.1? Ответ = НЕТ

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

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

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


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

0

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

Выдержка:

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

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

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

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