Diferencia entre localhost y la dirección ip

16

Si enlaza un socket en Python a localhost, 8200 se puede acceder a través de http: // localhost: 8200 / . pero no http: // xxxx: 8200 /

Si vincula un socket en Python a xxxx, 8200, machinename, 8200, se puede acceder a través de http: // xxxx: 8200 / y http: // machinename: 8200 / , pero no http: // localhost: 8200 /

Pensé que localhost significaba 'esta máquina', y que usarla 'volvería en bucle' a la dirección IP de la máquina, pero parece ser diferentes ips.

¿127.0.0.1 es siempre una dirección IP diferente a la dirección IP de la máquina?

actualizar:

Entiendo que los números reales son diferentes, pero ¿qué hace el loopback?

Por ejemplo, wikepedia dice que
'apuntar un navegador web a las URL http://127.0.0.1/ o http: // localhost / accederá al sitio web de esa computadora'

pero ese sitio web también será accesible en xxxx, y probablemente esté configurado con un solo socket en xxxx Entonces, ¿cómo funcionan ambas referencias entonces?

conclusión:

Creo que finalmente entiendo que 127.0.0.1 y xxxx funcionan así

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

y no

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

o

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

gracias por toda la ayuda

David
fuente
1
usted escribió "es 127.0.0.1 siempre una dirección IP diferente a la dirección IP de la máquina". Los números entre los puntos son diferentes, es decir, una dirección IP diferente. Qué pregunta más extraña haces. Si por la dirección IP de la máquina, quiere decir algo diferente a 127.0.0.1, entonces sí, sería una dirección IP diferente. Y si lo que llama la dirección IP de su máquina es 192.168.0.1 (o algún otro rango local estándar), entonces no tiene que tener miedo de decirlo. Puede escribirlo en lugar de xxxx Esa dirección 192 no existirá en Internet de todos modos.
barlop
Las referencias para ambos funcionan debido a cómo está configurado el servidor web. Puede decirle al servidor que se vincule a todas las direcciones o que solo escuche las específicas. Dado que el Loopback y la IP real son direcciones distintas, la configuración determina qué IP escuchar. Dado que localhost es solo una entrada de host para 127.0.0.1, solo funcionará cuando el servidor web esté vinculado a 127.0.0.1.
peelman

Respuestas:

17

Para responder tu pregunta.

127.0.0.1 no es solo una dirección IP diferente a la dirección IP de la máquina, también es una interfaz diferente. 127.0.0.1 no debe verse en la red local. Es una dirección IP interna especial para el adaptador de bucle invertido.

xxxx será su tarjeta de ethernet.

por cierto, 'localhost' es simplemente una entrada en su archivo de hosts que apunta a 127.0.0.1

Si vincula un socket a 127.0.0.1:8200, solo los clientes que se ejecutan localmente podrán acceder a él y solo con http://127.0.0.1:8200 o http: // localhost: 8200 (o una entrada de archivo dns o hosts que apunta a 127.0.0.1).

Un socket vinculado a xxxx: 8200 solo estará disponible a través de http: // xxxx: 8200 o una entrada de archivo dns o hosts que apunte a eso.

Vincular un socket a 127.0.0.1 tampoco lo hace automáticamente disponible en la interfaz ethernet.

Por eso no puedes conectarte a xxxx: 8200

Puede vincular el puerto 8200 a todas las interfaces disponibles (0.0.0.0), entonces debería funcionar.

Matt H
fuente
Entonces, ¿qué hace el bit 'loopback'? ¿A qué sirve el loopback? Pensé que era una forma de hacer referencia a la dirección IP de la máquina, sea lo que sea '127.0.0.1 => xxxx
David
1
La interfaz de bucle invertido es una interfaz virtual. A menudo se usa para permitir que los programas se comuniquen entre sí en la misma máquina. No es una forma de hacer referencia a la dirección IP de la máquina. 127.0.0.1 ES la dirección IP del adaptador virtual de bucle invertido.
Matt H
1
La otra cosa sobre el adaptador de bucle invertido es que, debido a que es virtual, en realidad no pasa ningún paquete a la tarjeta de red.
Matt H
1
literalmente desperdició 4 horas sin entender este concepto ... aparentemente algunos servidores web se unen automáticamente a xxxx y 127.0.0.1 para usted, lo que genera confusión. Gran pregunta y respuesta chicos. Thx =)
jrhee17
3

Por ejemplo, wikepedia dice que 'apuntar un navegador web a las URL http://127.0.0.1/ o http: // localhost / accederá al sitio web de esa computadora'

Ligeramente inexacto. Se puede hacerlo. Igualmente, es posible que no muestre ningún sitio web e incluso es posible mostrar un sitio web interno diferente del que obtiene cuando usa su dirección xxxx.

127.0.0.1 apunta a su propia máquina, pero eso no significa que se comportará de la misma manera una vez que llegue a su máquina

Si desea una analogía no técnica, puede considerarlas diferentes puertas a su casa.

Ambos apuntan a la misma casa pero no son lo mismo. Es posible que cada puerta lo lleve a la misma habitación o podrían llevarlo a una habitación diferente. También es posible bloquear una puerta y no la otra.

Cuando configura un sitio web, especifica a qué direcciones enlazar y, a menudo, la respuesta es todas las direcciones. (Eso es equivalente a que todas las puertas te lleven a una habitación)

También puede especificar el sitio web para que se enlace solo a una dirección. (Eso es equivalente a bloquear todas las puertas excepto una).

Si tiene dos (o más) sitios web, puede vincularlos a direcciones separadas. (Eso es equivalente a que cada puerta entre en habitaciones separadas).

Un ejemplo de cómo funcionan ambas referencias, mi computadora con Windows 7 tiene IIS instalado, cuando entro al Administrador de IIS y hago clic derecho en Sitio web predeterminado, me da la opción de menú 'Editar enlaces'. Al seleccionar eso, aparecerá una lista de enlaces. Solo tengo uno, pero para la dirección IP tiene *, lo que significa que IIS escucha en todas mis direcciones IP.

sgmoore
fuente
¡Gran analogía! Muchas gracias! Acabo de hacer una prueba. Me uní 127.0.0.1:5000con éxito a un sitio web y me uní 192.168.1.104:5000a otro sitio. La clave es que address:portsignifica una habitación diferente (servicio) en la casa (la computadora).
Rick
1

Cada dirección IP en el sistema es independiente y se puede vincular por sockets por separado, con la excepción de la dirección especial 0.0.0.0 que indica al sistema operativo que vincule el socket a todas las interfaces.

Ignacio Vazquez-Abrams
fuente
1
Pero 127.0.0.1 también es una dirección especial, como la opción más común para la interfaz de bucle invertido. ¿A qué se remonta esa dirección?
David
Eso no lo hace "especial", solo lo hace "una dirección en la interfaz de bucle invertido" (a menos que usted diga "cada dirección es especial a su manera", pero no vayamos allí). Es la interfaz la que realiza el bucle, no la dirección.
Ignacio Vazquez-Abrams