当我检查IPGlobalProperties.GetActiveTcpListeners()
的输出时,我会在0.0.0.0
以及::
上看到听众。
我认为监听0.0.0.0
上的端口等同于监听任何网络适配器上的端口,至少我对Windows套接字API的记忆是这样的。
对我而言,::
意味着IPv6的用语相同,因此[::]:49156
上的监听器将在所有IPv6网络适配器上监听端口49156
,[::1]:1434
1}}仅在IPv6环回适配器上为端口1434
。
这是对的吗?
我假设IPv6侦听端点仅适用于IPv6适配器。也就是说,如果适配器只有IPv4地址,那么49156
上的监听器就不会收到与端口[::]:49156
的连接?
此外,有人注意到GetActiveTcpListeners()
的MSDN文章错误地声明返回的对象“包括所有TCP状态中的侦听器,除了 Listen状态。”?
答案 0 :(得分:11)
我认为监听
import { TestService } from '../shared/test.service'; bootstrap(AppComponent, [ APP_ROUTER_PROVIDERS, TestService ])
上的端口等同于监听任何网络适配器上的端口,至少我对Windows套接字API的记忆是这样的。
这是正确的。 0.0.0.0
定义为0.0.0.0
,可用于侦听所有本地IPv4适配器。
对我而言,
INADDR_ANY
意味着IPv6的用语相同,因此::
上的监听器将在所有IPv6网络适配器上监听端口:::49156
,49156
1}}仅在IPv6环回适配器上为端口1434。
从倾听的角度来看,是的。 ::1:1434
定义为::
,可用于侦听所有本地IPv6适配器。 INADDR6_ANY
定义为::1
。
我假设IPv6侦听端点仅适用于IPv6适配器。也就是说,如果适配器只有IPv4地址,那么
INADDR6_LOOPBACK
上的监听器就不会收到与端口49156
的连接?
这取决于听众。仅IPv6侦听器无法侦听IPv4适配器,也无法接受IPv4客户端。但是,绑定到:::49156
的{{3}}侦听器可以绑定到IPv4和IPv6适配器,并接受IPv4和IPv6客户端,其中IPv4地址由INADDR6_ANY
,accept()
报告,并且WSAAccept()
为dual-stack。
答案 1 :(得分:9)
虽然你的措辞有误导性并且到目前为止是错误的,但我认为你的意思是说正确的事:未指定的地址0:0:0:0:0:0:0:0
又名::
意味着相应的端口没有听到特定的地址,但对所有这些 - 基本上与IPv4案例中的0.0.0.0
相同。
答案 2 :(得分:3)
IPv6地址" ::"具体未指定,并且不是有效地址,也不等同于" 0.0.0.0"的IPv4地址。见RFC 3513, Internet Protocol Version 6 (IPv6) Addressing Architecture, section 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.