2009-10-12 9 views

답변

29

의미있는 IPv4와 IPv6 간의 매핑이 없습니다. 0.0.0.0과 127.0.0.1과 같은 것들은 스펙에서 특별한 경우이므로 동등한 의미를 갖는다. 그러나 IPv4 주소가 주어지면 특정 IPv6 주소가 무엇인지 알 수 없습니다. DNS 검색을 사용하여 주어진 IP 주소가 IPv4 주소 이외에 IPv6 주소로 해석되는 호스트로 해석되는지 확인하지만 DNS 서버는 특정 컴퓨터를 지원하도록 구성되어야합니다.

+5

이중 스택 시스템에서는 실제로 IPv4에서 IPv6 로의 매핑이 :: ffff : XXXX : XXXX 공간에 있습니다. 이것은 일반적으로 ":: ffff : 192.168.1.1"로 표시됩니다. 따라서 IPv6 주소 공간에 IPv4 주소의 의미있는 표현이 있습니다. –

+1

@DoktorJ, 나는 이것이 문제라고 생각하지 않는다. 요청이 적절한 IP6 주소에 대한 것이지 IP6 스택의 IP4 주소를 참조하는 방법이 아니라고 생각합니다. – Yishai

+1

@DoktorJ하지만 라우팅 기능이 없으면이 매핑이 도움이되지 않습니다. – glglgl

4

IPv4 주소에는 IPv6 주소 앞에 96 개의 0 비트가 붙는 경우가있었습니다. 예 : 192.168.10.13 -> ::C0A8:0A0D. 내가 아는 바에 따르면이 기능은 더 이상 사용되지 않으며 더 이상 사용할 수있는 직접 변환이 없습니다.

+7

나는 IPv4 매핑 된 IPv6 주소가 여전히 사용되지 않는 것으로 생각합니다. 이 구성표의 예제는 :: ffff : c0a8 : 0a0d입니다. 그 안에 0이있는 것을 IPv4 호환 IPv6 주소라고합니다. –

15

하이브리드 이중 스택 IPv6/IPv4 구현은 일반적으로 특수 클래스의 주소 인 IPv4 매핑 주소를 지원합니다. 더는 아래의 링크를 확인을 위해 : 매핑 된 IPv6 로의 IPv4의 변환

http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses

을, 다음을 사용할 수 있습니다

String ip = "127.0.0.1"; 
String[] octets = ip.split("\\."); 
byte[] octetBytes = new byte[4]; 
for (int i = 0; i < 4; ++i) { 
      octetBytes[i] = (byte) Integer.parseInt(octets[i]); 
} 

byte ipv4asIpV6addr[] = new byte[16]; 
ipv4asIpV6addr[10] = (byte)0xff; 
ipv4asIpV6addr[11] = (byte)0xff; 
ipv4asIpV6addr[12] = octetBytes[0]; 
ipv4asIpV6addr[13] = octetBytes[1]; 
ipv4asIpV6addr[14] = octetBytes[2]; 
ipv4asIpV6addr[15] = octetBytes[3]; 

는 또한 this

3

의 IPv6에서 IPv4 호환 확인합니다.

IPv4 전용 어드레스 예 192.168.99.1

1 단계는>

분할 첫번째 옥텟 (192)에 의해 16 IE (16 진수는베이스 (16) 이후) : 12 회 = 16분의 192 0 위에 남아와 정확히 - 진수에서 12 C 로 표현되는 0 - 헥스는, 당신이 그것을 짐작 (영) HEX 0 따라서 192>

단계 C0

인 두번째 옥텟 (168)와 516,

반복 스텝 1, IE : 10, = 160 6 * 때문에 8 = 10 16분의 168가 남아 - HEX 10 인 - HEX 8 따라서 8 인 HEX에서 168 A8

3 단계>

반복 규칙 입니다!세번째 옥텟 (99) IE : 3으로 16분의 99 = 6 회 통해 좌측 - HEX 3 4 단계 3 따라서 HEX 99 63

이다>

- HEX 6 6 인

마지막 옥텟 IE : 1/16 = 0 번 1 이상 왼쪽으로 - HEX 1 HEX에 따라서 1 1 따라서 01

는 IPv4입니다 - HEX에, 그래이 0 가 0 주소 IPv6 주소 부분에 표시되는 192.168.99.1은 C0A8 : 6301이됩니다. 당신은 소문자를 사용하고 추가해야하지만 올바른 코드가 그래서 모든 누락은, IPv6의 바이트 :

:: c0a8 :

: 당신은 지금 언제나 사용할 구문을 사용할 수 있습니다 6301

또는 : 192.168.99.1

는 그래서 결국에 IPv6 주소는 이전 주소 이전 :: 문자와 이전 주소가 될 수 있습니다.

관련 문제