2012-10-02 2 views
2

IPv6 소개가 개발자 및 기존 응용 프로그램으로 무엇을 의미하는지 혼동합니다.IPv4 용으로 작성된 레거시 응용 프로그램의 IPv6 주소

  1. 본인은 IPv4와 IPv6이 본질적으로 호환되지 않는다고 알고 있습니다. IPv4 클라이언트는 IPv6을 사용하여 웹 사이트를 방문 할 수 있으며 IPv6 클라이언트는 IPv4 웹 사이트를 방문 할 수 있습니까?

  2. 나는 이런 식으로 내 스프링 MVC의 웹 사이트 방문자의 IP 주소를 확인 :

    private String getIp(HttpServletRequest request) { 
        return request.getRemoteAddr(); 
    } 
    

    지금까지이 항상 돌아왔다 IPv4 주소를 형식 a.b.c.d를에. IPv6을 사용하는 클라이언트가 내 웹 사이트에 연결하는 경우이 변경됩니까? 아니면 다양한 터널링 기술로 인해 IPv6 클라이언트가 내 웹 사이트 설정에 따라 IPv4 클라이언트로 가장 할 수 있습니까?

  3. IP 주소를 검색하고 처리하는 것과 관련하여 내가 직면하게 될 다른 IPv6 문제가 있습니까? 번역 장치 또는 그들 사이에 프록시 서버가없는

답변

4
  1. 하지 않습니다. IPv4 전용 시스템과 IPv6 전용 시스템 간의 직접 통신은 불가능합니다. SixXS IPv4Gate and IPv6Gate 같은 일부 공개 프록시가있다, 당신은 IPv4 및 IPv6 모두 컴퓨터에 자신의 프록시를 실행하거나 IPv4의 서버

  2. 예, request.getRemoteAddr() 당신에게 줄 것이다에 IPv6 전용 네트워크에서 연결 DNS64/NAT64을 사용할 수 있습니다 클라이언트가 IPv6를 사용하여 서버에 연결할 때 IPv6 주소 클라이언트가 예를 들어 NAT64를 사용하면 IPv4 클라이언트처럼 보이므로 IPv6 주소를 볼 수 없습니다. 그것은 당신의 편이 큰 IPv4 NAT 상자처럼 보일 것입니다.

  3. 예. 같은 것들에 대해 생각 : 여러 IPv6를 가진

  4. 클라이언트는 주소의

이 등 IPv4 및 IPv6 모두를 사용하여

  • 하나의 클라이언트를 해결하는 당신이 소프트웨어 개발자로서 만날 가장 중요한 쟁점을 강조합니다.

  • +0

    혼란을 해결해 주셔서 감사합니다.이 문제는 복잡하고 대부분의 개발자는이 사실을 거의 알지 못하는 것처럼 보입니다. – Gruber

    +1

    IPv6 도입을 계획 할 때 개발자에게 충분한주의를 기울이지 않은 것 같습니다. 가까운 시일 내에 두통을 일으킬 것입니다. Software Improvement Group (sig.eu)은 조사한 바에 따르면 비즈니스 소프트웨어의 12 %가 IPv6를 다루기 위해 설계되지 않았다는 것을 발견했습니다. –

    1

    본인은 IPv4와 IPv6이 본질적으로 호환되지 않는다고 알고 있습니다. IPv4 클라이언트는 IPv6을 사용하여 웹 사이트를 방문 할 수 있으며 IPv6 클라이언트는 IPv4 웹 사이트를 방문 할 수 있습니까?

    어떤 종류의 전환 메커니즘이 없으면 ipv4 전용 클라이언트는 ipv6 전용 서버와 통신 할 수 없으며 그 반대의 경우도 마찬가지입니다.

    원래 아이디어는 전 세계가 "단일 스택 ipv4"에서 "이중 스택"으로 이동한다는 것이 었습니다. 그런 다음 모든 사람들이 이중 스택에있게되면 IPv4를 끄고 "single stack ipv6"으로 이동할 수 있습니다.

    그러나 네트워크 운영자는 IPv6 및 IANA를 배포해야하는 부담이 거의없고 대부분의 RIR에서 IPv4 주소가 부족합니다. 그래서 우리는 풍부한 IPv4의 시대는 끝났지 만 여전히 v4 전용 클라이언트와 서버가 많은 상황에 처하게되었습니다.

    다양한 전환 메커니즘이 등장했습니다. 포함 :

    • 터널링 메커니즘은 6to4와 같은 "자동 터널링"과 고정 엔드 포인트에 대한 터널 및 구성된 터널을 모두 포함합니다. 이를 통해 v4 전용 네트워크의 v6 가능 호스트가 v6 전용 서비스에 연결할 수 있습니다. 다른 사람의 네트워크에있는 컴퓨터에서 해당 컴퓨터를 사용할 수 있는지 여부를 제어 할 수 없기 때문에 그들은별로 도움이되지 않습니다.
    • NAT64는 모두 상태 비 저장 (1 : 1) 및 상태 저장 (1 : 다수)입니다. 이를 통해 관리자는 v6 전용 네트워크를 실행하고 인터넷상의 v4 전용 시스템과 계속 상호 작용할 수 있습니다. 이것은 클라이언트를위한 합리적인 솔루션이지만 서버의 경우 각 서버에 대해 전용 ipv4 주소가 필요하다는 것을 알기 때문에 주소 고갈 문제를 실제로 해결하지는 못합니다.
    • 역방향 프록시는 응용 프로그램 수준의 데이터를 볼 수 있으므로 상위 수준 프로토콜이 호스트 이름 (예 : 호스트 헤더가있는 HTTP, SNI가있는 TLS)의 표시를 제공하면 프록시는 단일 공용 IPv4 주소 여러 개의 내부 서버로 요청을 보낼 수 있습니다.

    그들 중 누구도 모든 문제를 해결할 수 없으며 그 중 일부는 자체적으로 문제가되지만 조합으로 사용하면 상대적인 소수의 IPv4 주소 만 사용하여 v6 전용 내부 네트워크를 실행할 수 있습니다. 나머지 세계.

    다음과 같이 스프링 MVC 웹 사이트 방문자의 IP 주소를 확인합니다. .... 지금까지는 항상 a.b.c.d 형식의 IPv4 주소를 반환했습니다. IPv6을 사용하는 클라이언트가 내 웹 사이트에 연결하는 경우이 변경됩니까? 아니면 다양한 터널링 기술로 인해 IPv6 클라이언트가 내 웹 사이트 설정에 따라 IPv4 클라이언트로 가장 할 수 있습니까?

    서버가 ipv6 연결을 직접 수락하면 분명히 ipv6 주소가 표시됩니다.

    서버가 "::"에서 소켓을 사용하여 ipv4 및 ipv6 연결을 수신하는 경우 (Linux에서 기본적으로이 기능을 사용하도록 설정하면 Windows에서이를 사용하려면 특정 소켓 옵션이 필요함) ipv4 주소는 다음을 사용하여 응용 프로그램에 전달됩니다. 소켓을 "ipv4 mapped addresses"로 설정하십시오. 사용하는 라이브러리가이 라이브러리를 숨길 수도 있습니다 (스프링 MVC가하는 일에 익숙하지 않습니다).

    nat64 또는 프록시의 연결을 수락하면 분명히 nat/proxy의 주소가 표시됩니다. 프록시의 경우 프록시가 보낸 정보에서 클라이언트의 실제 IP 주소를 확인할 수 있습니다.

    IP 주소를 검색하고 처리하는 것과 관련하여 내가 직면하게 될 다른 IPv6 문제가 있습니까?

    IPv4 주소를 32 비트 정수로 저장하거나 짧은 길이 제한이있는 문자열로 저장/전송하는 모든 곳에서는 재 작업이 필요할 수 있습니다.


    테스트 네트워크를 설정하고 실험 해 보는 것이 좋습니다.