¿Qué es la dirección IP ':: 1'?

107

Estaba jugando con sockets en una máquina local sin conexión de red. Vea abajo:

IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works

Entonces, ¿qué es exactamente ::1la dirección IP? ¿Es la dirección IP disponible predeterminada o es la dirección de bucle invertido? ¿Qué sucede con el código anterior (línea de trabajo) en una máquina con dirección IP dedicada y conexión de red?

EDITAR:

El código exacto se utiliza para vincular una dirección IP específica al socket. Aquí está:

ServicePoint sp = ServicePointManager.FindServicePoint(uri);
sp.BindIPEndPointDelegate = new BindIPEndPoint(Bind);
// here's the bind delegate:
private IPEndPoint Bind(ServicePoint sp, IPEndPoint ep, int retryCount)
{
   return new IPEndPoint(IPAddress.Parse("::1"), 0);
}
Xaqron
fuente
4
IPAddress.Anyes decir ::0, debe utilizar IPAddress.Loopbackpara la conexión local (bucle invertido).
J-16 SDiZ
Creo que esto debería haberse publicado en SuperUser.com
Kamyar
Supongo que la parte que dice IPAddress.Parses realmente IPAddress.Parsecorrecta.
Brad
Pregunta inversa .
user202729

Respuestas:

150

::1es la dirección de loopback en IPv6. Piense en ello como la versión IPv6 de 127.0.0.1.

Ver http://en.wikipedia.org/wiki/Localhost

Puntilla
fuente
1
en el ejemplo anterior IPAddress.Parse("127.0.0.1")no funciona en mi máquina.
Xaqron
1
@Xaqron: suena más como una pregunta de superusuario, porque probablemente significa que algo está roto con su pila de IPv4 TCP / IP.
Joel Coehoorn
Xaqron, ¿tal vez un firewall está bloqueando el tráfico v4 pero no v6?
SilverbackNet
Yo uso Windows Server 2008 Enterprise Edition 64-bity no hay un firewall de terceros instalado. Me pregunto por qué no puedo conectarme 127.0.0.1a mi enchufe mientras ::1está disponible.
Xaqron
@Xaqron, ¿puedes mostrarnos el código que estás intentando usar? Dices "funciona" y "no funciona", pero eso no nos ayuda.
Brad
18

Solo para agregar un poco más de información, en IPv6 la dirección de loopback se representa como 127 ceros seguidos de un 1, es decir (0000 ... 127 veces ... 1). Su representación debería haber sido así -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001 pero tenemos una representación de forma corta para esto. Si hay todos los ceros en un solo bloque, puede reemplazarlo por un solo 0. Entonces se convierte en -> 0: 0: 0: 0: 0: 0: 0: 0001 . Nuevamente podemos ver que tenemos corridas de ceros, se pueden eliminar y obtenemos -> :: 0001 -> :: 1 .

Murciélago de codificación
fuente
2
(para ser claros, los "127 ceros" aquí están en binario, no en hexadecimal)
user202729