Разница между локальным и IP-адресом

16

Если привязать сокет в Python к localhost, 8200 это доступно через http: // localhost: 8200 / . но не http: // xxxx: 8200 /

Если привязать сокет в Python к xxxx, 8200, machinename, 8200, это доступно через http: // xxxx: 8200 / и http: // machinename: 8200 / , но не http: // localhost: 8200 /

Я подумал, что localhost означает «этот компьютер», и что при его использовании «возвратится» к IP-адресу компьютера, но, похоже, это разные ips.

Всегда ли 127.0.0.1 отличается IP-адресом от IP-адреса компьютера?

Обновить:

Я понимаю, что реальные цифры разные, но что делает петля?

Например, википедия говорит, что
«указание веб-браузера на URL-адреса http://127.0.0.1/ или http: // localhost / откроет собственный веб-сайт этого компьютера»

но этот веб-сайт также будет доступен в xxxx, и предположительно будет настроен с одним сокетом в xxxx. Так как же тогда работают обе ссылки?

вывод:

Я думаю, что я наконец понимаю, что 127.0.0.1 и xxxx работают так

--127.0.0.1 ==\
               >- Computer
--x.x.x.x   ==/

и не

--127.0.0.1 ==\
--------------- x.x.x.x >- Computer

или

--x.x.x.x ==\
--------------- 127.0.0.1 >- Computer

Спасибо всем за помощь

Дэвид
источник
1
Вы написали "это 127.0.0.1 всегда IP-адрес отличается от IP-адрес машины". Числа между точками разные, то есть другой IP-адрес. Какой странный вопрос вы задаете. Если под ip-адресом машины вы подразумеваете что-то отличное от 127.0.0.1, тогда да, это будет другой IP-адрес. И если IP-адрес вашего устройства называется 192.168.0.1 (или каким-либо другим стандартным локальным диапазоном), то вам не нужно бояться говорить это. Вы можете написать это вместо хххх. Этот адрес 192 в любом случае не будет существовать в Интернете.
barlop
Ссылки для обоих работают из-за того, как настроен веб-сервер. Вы можете указать серверу привязываться ко всем адресам или прослушивать только определенные адреса. Поскольку Loopback и фактический IP являются разными адресами, конфигурация определяет, какой IP прослушивать. Поскольку localhost - это просто запись hosts для 127.0.0.1, он будет работать только тогда, когда веб-сервер привязан к 127.0.0.1.
Пилман

Ответы:

17

Ответить на ваш вопрос.

127.0.0.1 - это не просто IP-адрес, отличный от IP-адреса компьютера, но и другой интерфейс. 127.0.0.1 не должно быть видно в локальной сети. Это специальный внутренний IP-адрес для петлевого адаптера.

хххх будет вашей сетевой картой.

кстати, 'localhost' - это просто запись в вашем файле hosts, которая указывает на 127.0.0.1

Если вы привязываете сокет к 127.0.0.1:8200, то только клиенты, работающие локально, смогут получить к нему доступ и только с http://127.0.0.1:8200 или http: // localhost: 8200 (или с записью файла dns или hosts). это указывает на 127.0.0.1).

Сокет, связанный с xxxx: 8200, будет доступен только через http: // xxxx: 8200 или через запись файла DNS или хостов, которая указывает на это.

Привязка сокета к 127.0.0.1 не делает его автоматически доступным также и для интерфейса Ethernet.

Вот почему вы не можете подключиться к хххх: 8200

Вы можете привязать порт 8200 ко всем доступным интерфейсам (0.0.0.0), тогда он должен работать.

Мэтт Н
источник
Так что же делает бит «петля»? Что это за петля? Я думал, что это был способ ссылаться на IP-адрес компьютера, что бы это ни было, то есть 127.0.0.1 => xxxx
David
1
Петлевой интерфейс представляет собой виртуальный интерфейс. Это часто используется, чтобы позволить программам общаться друг с другом на одном компьютере. Это не способ ссылки на IP-адрес устройства. 127.0.0.1 IS - IP-адрес виртуального петлевого адаптера.
Мэтт Х
1
Еще одна вещь, связанная с петлевым адаптером, заключается в том, что, поскольку он виртуальный, он фактически не передает какие-либо пакеты на сетевую карту.
Мэтт H
1
буквально впустую потратил 4 часа, не понимая этой концепции ... очевидно, некоторые веб-серверы автоматически связываются с xxxx и 127.0.0.1 для вас, что вызывает путаницу. Отличный вопрос и ответ, ребята. Спасибо =)
jrhee17
3

Например, википедия говорит, что «указание веб-браузера на URL-адреса http://127.0.0.1/ или http: // localhost / откроет собственный веб-сайт этого компьютера»

Слегка неточно. Это может сделать так. Точно так же он может не открывать какой-либо веб-сайт, и даже можно отобразить другой внутренний веб-сайт, отличный от того, который вы получаете при использовании своего адреса xxxx.

127.0.0.1 указывает на вашу собственную машину, но это не значит, что она будет вести себя так же, как только достигнет вашей машины

Если вы хотите нетехническую аналогию, вы можете рассматривать их как разные двери в ваш дом.

Оба указывают на один дом, но это не одно и то же. Каждая дверь может привести вас в одну и ту же комнату, или они могут привести вас в другую комнату. Также возможно заблокировать одну дверь, а не другую.

Когда вы настраиваете веб-сайт, вы указываете, к каким адресам привязываться, и часто ответом являются все адреса. (Это эквивалентно тому, что все двери ведут в одну комнату)

Вы также можете указать веб-сайт для привязки только к одному адресу. (Это эквивалентно запиранию всех дверей, кроме одной.)

Если у вас есть два (или более) веб-сайта, вы можете привязать их к отдельным адресам. (Это эквивалентно тому, что каждая дверь входит в отдельные комнаты).

Пример того, как работают обе ссылки, на моем компьютере с Windows 7 установлен IIS, когда я захожу в IIS Manager и щелкаю правой кнопкой мыши на веб-сайте по умолчанию, он дает мне пункт меню «Редактировать привязки». Выбор, который вызывает список привязок. У меня есть только один, но для IP-адреса он имеет *, что означает, что IIS прослушивает все мои IP-адреса.

sgmoore
источник
Отличная аналогия! Большое спасибо! Я только что сделал испытание. Я успешно привязан 127.0.0.1:5000к сайту и привязан 192.168.1.104:5000к другому сайту. Ключ в том, что address:portозначает другую комнату (услугу) в доме (компьютер).
Рик
1

Каждый IP-адрес в системе является независимым и может быть связан с сокетами отдельно, за исключением специального адреса 0.0.0.0, который указывает ОС привязать сокет ко всем интерфейсам.

Игнасио Васкес-Абрамс
источник
1
Но 127.0.0.1 также является специальным адресом, как наиболее распространенный выбор для интерфейса обратной связи. К чему этот адрес возвращается?
Дэвид
Это не делает его «особым», а просто делает его «адресом интерфейса обратной связи» (если только вы не скажете «каждый адрес особенный по-своему», но давайте не будем туда идти). Зацикливается интерфейс, а не адрес.
Игнасио Васкес-Абрамс