Для чего нужен IP-адрес 127.0.0.2?
Я запускаю пример в hiredis, который использует "127.0.0.2" в качестве IP-адреса сервера Redis, и он работает правильно. На самом деле, сервер Redis работает на той же машине. Я знаю, что "127.0.0.1" - это IP-адрес "lo", но как насчет "127.0.0.2"? Это так же, как "127.0.0.1"?
3 ответа
Да:
Стандарты сети 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.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.1
→ 127.255.255.254
тот же самый. Некоторые могут работать только с 127.0.0.1
,
смотрите также
Не полный общий ответ (он уже есть). Этот мой ответ показывает пример, где 127.0.0.2
был использован для решения проблемы.
Выдержка:
Оператор попытался протестировать некоторое программное обеспечение в случае, когда его соединение с сервером было отклонено. Это было сделано на сервере временным iptables
Правило, которое отклоняет весь трафик с IP-адреса клиента. Клиент сразу же смог "увидеть", что соединение было отклонено.
Проблема возникла, когда этот человек перенес серверное программное обеспечение на тот же компьютер, что и клиент, и попытался использовать петлевой интерфейс. Правило было установлено, чтобы заблокировать связь с 127.0.0.1
но информация о том, что соединение было отклонено, подчинялась тому же правилу и никогда не доходила до клиентского программного обеспечения, которое зависало (предположительно, до истечения времени ожидания).
Решение было использовать 127.0.0.2
в качестве адреса сервера и установить правило, которое отклоняет подключения к нему. Информация об отказе пошла в 127.0.0.1
и смог передать клиенту программное обеспечение.