O que é o endereço IP ':: 1'?

107

Eu estava brincando com soquetes na máquina local sem conexão de rede. Ver abaixo:

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

Então, qual é exatamente ::1o endereço IP? É o endereço IP padrão disponível ou é o endereço de loopback? o que acontece com o código acima (linha de trabalho) em uma máquina com endereço IP dedicado e conexão de rede?

EDITAR:

o código exato é usado para vincular um endereço IP específico ao soquete. Aqui 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
fonte
4
IPAddress.Anyé ::0, você deve usar IPAddress.Loopbackpara conexão local (loopback).
J-16 SDiZ
Acho que isso deveria ter sido postado no SuperUser.com
Kamyar
Estou assumindo que a parte que diz IPAddress.Parsestá realmente IPAddress.Parsecorreta?
Brad
Pergunta reversa .
user202729

Respostas:

150

::1é o endereço de loopback no IPv6. Pense nisso como a versão IPv6 do 127.0.0.1.

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

Brad
fonte
1
no exemplo acima IPAddress.Parse("127.0.0.1")não funciona na minha máquina.
Xaqron
1
@Xaqron - soa mais como uma pergunta de superusuário, porque provavelmente significa que algo está quebrado com sua pilha TCP / IP IPv4.
Joel Coehoorn
Xaqron, talvez um firewall esteja bloqueando o tráfego da v4, mas não da v6?
SilverbackNet
Eu uso Windows Server 2008 Enterprise Edition 64-bite nenhum firewall de terceiros instalado. Estou me perguntando por que não consigo ligar 127.0.0.1ao meu soquete enquanto ::1está disponível.
Xaqron
@Xaqron, você pode nos mostrar o código que está tentando usar? Você diz "funciona" e "não funciona", mas isso não é útil para nós.
Brad
18

Apenas para adicionar um pouco mais de informação a ele, no endereço de loopback IPv6 é representado como 127 zeros seguidos por 1, isto é (0000 ... 127 vezes ... 1). Sua representação deveria ter sido assim -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001, mas temos uma representação de forma abreviada para isso. Se houver todos os zeros em um único bloco, você pode substituí-lo por um único 0. Assim, ele se torna -> 0: 0: 0: 0: 0: 0: 0: 0: 0001 . Novamente podemos ver que temos execuções de zeros, eles podem ser eliminados e obtemos -> :: 0001 -> :: 1 .

Morcego codificador
fonte
2
(para ficar claro, os "127 zeros" aqui estão em binário, não hexadecimal)
usuário202729