Co to jest adres IP „:: 1”?


108

Bawiłem się gniazdami na komputerze lokalnym bez połączenia sieciowego. Zobacz poniżej:

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

Więc jaki jest dokładnie ::1adres IP? Czy jest to domyślny dostępny adres IP, czy jest to adres sprzężenia zwrotnego? co dzieje się z powyższym kodem (linią roboczą) na maszynie z dedykowanym adresem IP i połączeniem sieciowym?

EDYTOWAĆ:

dokładny kod służy do wiązania określonego adresu IP z gniazdem. Oto ona:

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);
}

4
IPAddress.Anyjest ::0, należy używać IPAddress.Loopbackdo połączenia lokalnego (pętli zwrotnej).
J-16 SDiZ

Myślę, że powinno to zostać opublikowane na
SuperUser.com

Zakładam, że część, która mówi, IPAddress.Parsjest naprawdę IPAddress.Parse, prawda?
Brad

Odpowiedzi:


151

::1to adres sprzężenia zwrotnego w IPv6. Pomyśl o tym jako o wersji IPv6 127.0.0.1.

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


1
na powyższym przykładzie IPAddress.Parse("127.0.0.1")nie działa na moim komputerze.
Xaqron

1
@Xaqron - to brzmi bardziej jak pytanie superużytkownika, ponieważ prawdopodobnie oznacza, że ​​coś jest zepsute ze stosem TCP / IP IPv4.
Joel Coehoorn

Xaqron, może firewall blokuje ruch w wersji 4, ale nie w wersji 6?
SilverbackNet

Używam Windows Server 2008 Enterprise Edition 64-biti nie mam zainstalowanej zapory innej firmy. Zastanawiam się, dlaczego nie mogę połączyć się 127.0.0.1z gniazdem, gdy ::1jest dostępne.
Xaqron

@Xaqron, czy możesz pokazać nam swój kod, którego próbujesz użyć? Mówisz „działa” i „nie działa”, ale to nam nie pomaga.
Brad

18

Aby dodać do tego trochę więcej informacji, w IPv6 adres sprzężenia zwrotnego jest reprezentowany jako 127 zer, po których następuje 1, tj. (0000 ... 127 razy..1). Jego reprezentacja powinna wyglądać następująco -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001, ale mamy do tego krótką reprezentację. Jeśli w jednym bloku znajdują się wszystkie zera, możesz zastąpić je pojedynczym 0. W ten sposób otrzymujemy -> 0: 0: 0: 0: 0: 0: 0: 0001 . Ponownie widzimy, że mamy ciągi zer, można je wyeliminować i otrzymujemy -> :: 0001 -> :: 1 .


2
(żeby było jasne, „127 zer” jest tutaj w systemie dwójkowym, a nie szesnastkowym)
user202729
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.