IP地址'::1'是什么?

154
我在没有网络连接的本地计算机上使用套接字进行测试,如下所示:
IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works

那么,::1 IP地址到底是什么?它是默认可用的IP地址还是环回地址?在具有专用IP地址和网络连接的计算机上,上述代码(工作行)会发生什么?编辑:确切的代码用于将特定IP地址绑定到套接字。这是它:
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);
}

6
IPAddress.Any意为::0,应使用IPAddress.Loopback来进行本地(回环)连接。 - J-16 SDiZ
我认为这应该发布在SuperUser.com上。 - Kamyar
我假设IPAddress.Pars部分实际上是IPAddress.Parse,对吗? - Brad
反向问题 - user202729
3个回答

206

1
在上面的例子中,IPAddress.Parse("127.0.0.1") 在我的机器上不起作用。 - Xaqron
1
@Xaqron - 听起来更像是超级用户的问题,因为这可能意味着你的IPv4 TCP/IP堆栈出现了故障。 - Joel Coehoorn
Xaqron,也许防火墙正在阻止v4但不是v6流量? - SilverbackNet
我使用 Windows Server 2008 Enterprise Edition 64-bit,没有安装第三方防火墙。我想知道为什么我无法将 127.0.0.1 绑定到我的套接字,而 ::1 是可用的。 - Xaqron
@Xaqron,你能展示一下你正在尝试使用的代码吗?你说“可用”和“不可用”,但这对我们没有帮助。 - Brad

31

为了补充一点信息,在 IPv6 中,环回地址的表示为 127 个零后面跟着一个 1,即 (0000…1)。

它应该表示为0000:0000:0000:0000:0000:0000:0000:0001,但我们有一些简写形式。如果单个块中全是零,则可以用单个 0 替换它。这样就变成了0:0:0:0:0:0:0:0001

同样,我们可以看到连续的零,它们可以被消除,我们得到::0001 -> ::1


4
(为了明确起见,这里的“127个零”是二进制而不是十六进制) - user202729

3
简单来说: ::1是IPV6环回地址0:0:0:0:0:0:0:1的压缩格式。它等同于IPV4地址127.0.0.1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接