2014-12-15 5 views
9

IPGlobalProperties.GetActiveTcpListeners()의 출력을 조사 할 때 0.0.0.0의 수신기와 ::의 수신기를 봅니다.IPv6 : 연결을 청취 할 때`:: 0.0.0.0 '과 동등한가?

0.0.0.0의 포트에서 수신하는 것은 네트워크 어댑터의 포트에서 수신하는 것과 같습니다. 적어도 Windows 소켓 API에 대한 내 메모리는 이것이 그렇다고 말합니다.

는 또한 ::에서 IPv6 용어로 동등한 그렇게 [::]:49156에 청취자가 [::1]:1434로 단지의 IPv6 루프백 어댑터에 1434 포트 수있는 모든 IPv6 네트워크 어댑터 포트 49156을 듣고 될 의미 나에게 의미가 있습니다.

이 정보가 맞습니까?

IPv6 수신 엔드 포인트는 IPv6 어댑터에만 적용된다고 가정합니다. 즉, 어댑터에 IPv4 주소 만있는 경우 49156 포트에 대한 연결은 수신자가 [::]:49156에 수신하지 못합니까?

또한이 사람이 GetActiveTcpListeners()에 대한 MSDN 문서를 잘못 반환 된 객체는 "모든 TCP의 청취자가 제외 상태를 들어 상태 포함한다."고 선언 것으로 나타났습니다있다?

답변

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. 
8

당신의 표현은 지금까지 잘못 오해하고있는 동안, 나는 당신이 옳은 말을 의미 생각 : 0:0:0:0:0:0:0:0 일명 :: 의미 불특정 주소 각각의 포트가 특정 주소를 듣고 있지 않은지를 , 그러나 그들 모두에게 - 본질적으로 IPv4 케이스의 0.0.0.0이 말하는 것과 같은 것입니다.

6

0.0.0.0의 포트에서 수신하는 것은 모든 네트워크 어댑터의 포트에서 수신하는 것과 동일하다고 생각합니다. 적어도 Windows 소켓 API에 대한 내 메모리는 이것이 그렇다고 말합니다.

맞습니다. 0.0.0.0INADDR_ANY으로 정의되며 모든 로컬 IPv4 어댑터에서 수신 대기하는 데 사용할 수 있습니다.

또한 ::::1:1434로 단지의 IPv6 루프백 어댑터에 1434 포트 될 경우 IPv6의 용어로 동등한 그렇게 :::49156에 청취자가 모든 IPv6 네트워크 어댑터 포트 49156을 듣고 될 의미 나에게 의미가 있습니다 .

청취의 관점에서 예. ::INADDR6_ANY으로 정의되며 모든 로컬 IPv6 어댑터에서 수신 대기하는 데 사용할 수 있습니다. ::1INADDR6_LOOPBACK으로 정의됩니다.

IPv6 수신 엔드 포인트는 IPv6 어댑터에만 적용된다고 가정합니다. 즉, 어댑터에 IPv4 주소 만있는 경우 49156 포트에 대한 연결은 수신자가 :::49156에 수신하지 못합니까?

청취자에 따라 다릅니다. IPv6 전용 리스너는 IPv4 어댑터에서 청취 할 수 없으며 IPv4 클라이언트를 승인 할 수 없습니다. 그러나 dual-stack 청취자는 INADDR6_ANY에 바인딩되어 IPv4 및 IPv6 어댑터에 바인딩 할 수 있으며 IPv4 주소는 accept(), WSAAccept()getpeername()IPv4-mapped IPv6 addresses으로보고됩니다.

+0

리눅스에서는 setsockopt'IPV6_V6ONLY'에 의해 제어됩니다. [ipv6 (7)] (http://linux.die.net/man/7/ipv6) 매뉴얼 페이지를 참조하십시오. – o11c

+0

Windows에서도 마찬가지입니다. [IPPROTO_IPV6 소켓 옵션] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms738574.aspx)을 참조하십시오. –

관련 문제