当我检查IPGlobalProperties.GetActiveTcpListeners()的输出时,我看到0.0.0.0和::上的侦听器。
我相信在0.0.0.0上侦听端口就等于监听任何网络适配器上的端口,至少我的Windows内存显示是这样的。
在我看来,::意味着IPv6的等价含义,因此[::]:49156上的侦听器将在所有IPv6网络适配器上侦听端口49156,其中[::1]:1434将只在IPv6回送适配器上作为端口1434。
这是正确的吗?
我假设IPv6侦听端点只适用于IPv6适配器。也就是说,如果适配器只有IPv4地址,则[::]:49156上的侦听器将不会接收到端口49156的连接。
另外,是否有人注意到GetActiveTcpListeners()的MSDN文章错误地声明返回的对象“包括除侦听状态之外的所有TCP状态中的侦听器”?
发布于 2016-06-28 01:00:37
我相信在
0.0.0.0上侦听端口就等于监听任何网络适配器上的端口,至少我的Windows内存显示是这样的。
这是正确的。0.0.0.0被定义为INADDR_ANY,可用于侦听所有本地IPv4适配器。
在我看来,
::意味着IPv6的等价含义,因此:::49156上的侦听器将在所有IPv6网络适配器上监听端口49156,而::1:1434只在IPv6回送适配器上作为端口1434。
从倾听的角度看,是的。::被定义为INADDR6_ANY,可用于侦听所有本地IPv6适配器。::1被定义为INADDR6_LOOPBACK。
我假设IPv6侦听端点只适用于IPv6适配器。也就是说,如果适配器只有IPv4地址,那么
:::49156上的侦听器就不会接收到端口49156的连接?
这取决于听者。只有IPv6 6的侦听器不能在IPv4适配器上侦听,也不能接受IPv4客户端。但是,绑定到INADDR6_ANY的INADDR6_ANY侦听器可以绑定到IPv4和IPv6适配器,并接受IPv4和IPv6客户端,其中IPv4地址由accept()、WSAAccept()和getpeername()报告为IPv6 4-映射的IPv6地址。
发布于 2014-12-15 16:50:17
虽然你的措辞有误导性,而且到目前为止是错误的,但我认为你是想说正确的话:未指明的地址0:0:0:0:0:0:0:0 a.k.a。::意味着各个端口不是监听特定地址,而是侦听所有地址--本质上与0.0.0.0在IPv4情况下所说的相同。
发布于 2014-12-15 15:38:42
IPv6地址"::“是未指定的,它不是有效地址,也不等同于IPv4地址"0.0.0.0”。请参阅RFC 3513,因特网协议版本6 (IPv6)地址结构,第2.5.2节
2.5.2 The Unspecified Address
The address 0:0:0:0:0:0:0:0 is called the unspecified address. It
must never be assigned to any node. It indicates the absence of an
address. One example of its use is in the Source Address field of
any IPv6 packets sent by an initializing host before it has learned
its own address.`
The unspecified address must not be used as the destination address
of IPv6 packets or in IPv6 Routing Headers. An IPv6 packet with a
source address of unspecified must never be forwarded by an IPv6
router.https://stackoverflow.com/questions/27480094
复制相似问题