¿Cuál es la diferencia entre 127.0.0.1 y localhost?

157

Suponiendo que lo siguiente se define en .../hosts:

127.0.0.1 localhost

¿Cuáles, si las hay, son las diferencias reales entre usar 127.0.0.1y localhostcomo el nombre del servidor, especialmente cuando se ejecutan procesos que se ejecutan localmente y que están escuchando conexiones?

Bohemio
fuente
15
Se podría decir que localhostes independiente del protocolo, tanto IPv4 como IPv6 funcionarán.
Steve-o

Respuestas:

122

Bueno, la diferencia más probable es que todavía tienes que hacer una búsqueda real de localhostalgún lugar.

Si lo usa 127.0.0.1, entonces el software (inteligente) lo convertirá directamente en una dirección IP y lo usará. Algunas implementaciones de gethostbynamedetectarán el formato punteado (y presumiblemente el formato IPv6 equivalente) y no realizarán ninguna búsqueda.

De lo contrario, el nombre debe ser resuelto. Y no hay garantía de que su hostsarchivo se use realmente para esa resolución (en primer lugar, o en absoluto), por lo que localhostpuede convertirse en una dirección IP totalmente diferente .

Con eso quiero decir que, en algunos sistemas, hostsse puede omitir un archivo local . El host.confarchivo controla esto en Linux (y muchos otros Unices).

paxdiablo
fuente
66
La principal diferencia es que la conexión se puede hacer a través de Unix Domain Socket, como se indica aquí: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
/etc/nsswitch.confselecciona si hostso DNS se usa primero para una búsqueda de host, si se está ejecutando nss.
Mark Lakata
@DonViegues Eso es específico de MySQL y mal diseño de IMO. Verá localhost e intentará usar unix-socket en lugar de conectarse usando IP pero para 127.0.0.1 solo usa IP.
Arman Ordookhani
@ArmanOrdookhani AFAIK si se está conectando a un host remoto a través de SSH y luego desde allí a un MySQL (como un túnel SSH para llegar al servidor MySQL) debe usar 127.0.0.1, ya que todo pasa por TC / IP. Pero si 2 procesos que se ejecutan en la misma máquina desean conectarse, localhost (socket Unix) es más rápido / tiene menos gastos generales. ¡Gracias!
Don Viegues
1
@DonViegues Sí, tienes razón, el socket Unix tiene menos sobrecarga que TCP / IP. Solo quería mencionar que este comportamiento es específico de MySQL y no algo en el sistema operativo o el nivel de red.
Arman Ordookhani
36

Wikipedia resume esto bien:

En los sistemas informáticos modernos, localhost como nombre de host se traduce en una dirección IPv4 en el bloque de red 127.0.0.0/8 (loopback), generalmente 127.0.0.1, o :: 1 en IPv6.

La única diferencia es que buscaría en el DNS el sistema que localhostresuelve. Esta búsqueda es muy, muy rápida. Por ejemplo, para llegar stackoverflow.comtecleó eso en la barra de direcciones (o usó un marcador que apuntó aquí). De cualquier manera, llegó aquí a través de un nombre de host. localhostProporciona una funcionalidad similar.

Ryan Bigg
fuente
11
Esto es realmente importante. localhost puede resolverse en una dirección IPv6, mientras que 127.0.0.1 no. El uso de localhost en un sistema solo IPv6 puede funcionar, mientras que 127.0.0.1 no lo hará ya que IPv4 no está disponible.
Erwin Jansen
32

algunas aplicaciones tratarán "localhost" especialmente. el cliente mysql tratará a localhost como una solicitud para conectarse al socket de dominio unix local en lugar de usar tcp para conectarse al servidor en 127.0.0.1. Esto puede ser más rápido y puede estar en una zona de autenticación diferente.

No conozco otras aplicaciones que traten localhost de manera diferente a 127.0.0.1, pero probablemente hay algunas.

Wayne Walker
fuente
8

Bueno, por IP es más rápido.

Básicamente, cuando llama por nombre de servidor, se convierte a IP original.

Pero sería difícil memorizar una IP, por esta razón se creó el nombre de dominio.

Personalmente uso en http://localhostlugar de http://127.0.0.1o http://username.

La máscara
fuente
localhost es más rápido, no usa TCP / IP
Don Viegues
@Don Viegues: lo que dices se contradice con las otras respuestas en este hilo. ¿Puedes elaborar?
Dikla
Sí, copiaré y pegaré otro comentario mío: la principal diferencia es que la conexión se puede realizar a través de Unix Domain Socket, como se indica aquí: stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1
Don Viegues
55
@DonViegues que es específico de MySQL, que se maneja localhostde manera especial . Es probable que otras aplicaciones sigan buscando localhost.
William Denniss
0

No hay nada diferente Uno es más fácil de recordar que el otro. En general, define un nombre para asociar con una dirección IP. No tiene que especificar localhost para 127.0.0.1, puede especificar el nombre que desee.

d_ethier
fuente