다음을 통해 공유


IPv6 Winsock 애플리케이션에 대한 사용자 인터페이스 문제

IPv4에서 IPv6으로의 가장 명백한 변경 내용 중 하나는 IP 주소의 크기입니다. 많은 사용자 인터페이스는 다음 그림과 같이 사용자가 IP 주소를 입력할 수 있도록 하는 대화 상자를 제공합니다.

사용자 인터페이스의 일반 ipv4 주소 상자

IPv6 주소 공간 내의 길이, 복잡성 및 섹션의 중요성과 같은 많은 요인으로 인해 IPv6의 주소 지정은 사용자가 수정하거나 지정하는 데 도움이 되지 않습니다. 따라서 사용자에게 자신의 주소를 지정하는 기능을 제공해야 하는 필요성이 줄어듭니다. 또한 IPv6 주소 지정과 관련된 복잡성으로 인해 관리자에게 IPv6 주소 정보를 지정하는 기능을 제공하는 것은 노드별로 발생할 가능성이 없습니다.

UI에 IPv6 주소를 표시하는 것은 상상할 수 없으므로 개발자는 IPv6을 지원하도록 애플리케이션을 수정할 때 IPv6 주소 크기의 가변성을 고려해야 합니다.

이 섹션의 나머지 부분에서는 IPv4 주소 길이 예측 가능성과 IPv6 주소 길이 고려 사항 간의 차이점에 대해 설명합니다. 이 섹션에서는 IPv6 주소가 16진수 표현으로 표시되고 있다고 가정합니다.

IPv4 주소는 다음 주소 예제와 같이 점선 10진수 표기법을 엄격하게 따르기 때문에 크기를 예측할 수 있습니다.

10.10.256.1

IPv6 주소는 이중 콜론을 사용할 수 있도록 하는 IPv6 주소 규칙으로 인해 예측할 수 없습니다(::) 0의 계열을 나타내는 입니다. 따라서 다음 IPv6 주소 표현은 동일한 IPv6 주소와 동일합니다.

1040:0:0:0:0:0:0:1
1040::1

이중 콜론이 있는 일련의 0을 나타내는 기능은 지정된 IPv6에 대해 예측할 수 없는 길이를 생성하므로 프로그래머는 IPv6 주소의 사용자 인터페이스 디스플레이를 만들 때 이 기능을 고려해야 합니다. 물론 개발자는 IPv6 지원 사용자 인터페이스를 만들 때 사용자 인터페이스가 일련의 0(아래 첫 번째 주소)을 나타내기 위해 이중 콜론을 사용하지 않는 IP 주소를 표시할 수 있을 뿐만 아니라 가능한 가장 긴 IPv6 주소(아래 두 번째 주소, 포함된 IPv4 주소 포함)를 표시할 수 있는지 확인해야 합니다. 또한 범위 식별자(ID)를 다음 주소에 추가하면 길이가 11자만큼 늘어나게 됩니다.

21DA:00D3:0010:2F3B:02AA:00FF:FE28:9C5A
0000:0000:0000:0000:0000:ffff:123.123.123.123

또 다른 중요한 고려 사항은 이름 기반 주소가 숫자 기반 IPv6 주소보다 더 적합한지 여부입니다. 이름 기반 주소가 더 적합한 경우 작업에 적합한 입력 오류 검사를 포함하여 명명 규칙에 대한 고려 사항을 사용자 인터페이스에 빌드해야 합니다.

개발자가 애플리케이션을 수정할 때와 IPv6 주소의 사용자 인터페이스 표현을 디자인할 때 고려해야 하는 IPv6 주소 표시와 관련된 다른 복잡성이 있습니다. 이러한 고려 사항 중 일부는 다음과 같습니다.

  • 주소에 0의 모든 시퀀스가 포함되어야 하나요, 아니면 이중 콜론 표기법을 사용해야 하나요?
  • 숫자 기반 주소 표현 또는 이름 기반 표현을 사용하는 것이 더 적절한가요?
  • 사용자가 서브넷 접두사, scope 식별자 또는 기타 하위 필드와 같은 주소 지정 체계의 특정 측면을 식별하는 데 관심이 있나요?
  • 사용자가 TLA 식별자, NLA 식별자 또는 SLA 식별자와 같은 주소의 다른 측면을 확인하는 데 관심이 있나요?
  • 사용자 인터페이스가 포함된 IPv6 주소를 식별할 수 있나요? 그렇다면 어떻게 처리하고 표시할 수 있나요? 사용자에게 주소 정보를 표시할 때 IPv4 호환 주소와 IPv4 매핑된 IPv6 주소를 구분하시겠습니까?

다른 고려 사항도 있으며 개발자는 IP 주소 사용자 인터페이스를 개발할 때 고객 대상을 신중하게 고려해야 합니다.

모범 사례

  • 개발자는 IPv6을 지원하도록 애플리케이션을 수정할 때 각 사용자 인터페이스에 대한 적절한 접근 방식을 고려해야 합니다. 사용자 인터페이스에 IPv6 주소를 표시하기에 충분한 길이가 포함되어 있는지 확인하는 것은 해당 주소가 숫자인지 이름 기반인지를 결정하는 것과 같이 필수적입니다.
  • 가능하면 이 논리를 다시 구현하는 대신 IPv6 주소를 사용할 때 기존 Winsock 및 IP 도우미 함수를 사용합니다. 예를 들어 RtlIpv6AddressToString, RtlIpv6AddressToStringEx, RtlIpv6StringToAddressRtlIpv6StringToAddressEx 함수를 사용하여 IPv6 주소와 이러한 IPv6 주소의 문자열 표현 간에 변환할 수 있습니다.

방지할 코드

  • IPv4 크기의 주소에 의존하는 사용자 인터페이스 요소는 조사를 거쳐야 하며, 해당 조사의 일부에는 IPv4에서 제공한 정보가 IPv6에 적합한지 여부가 포함되어야 합니다.
  • IP 주소를 지정하는 기능은 IPv4가 사용 중인지 또는 IPv6을 사용할 수 있는지에 따라 달라야 합니다. IPv6을 사용할 수 있는 경우 숫자 기반(16진수) 주소 또는 이름 기반 주소를 지정하는 것이 적절합니까?

코딩 작업

기존 코드베이스를 IPv4에서 IPv4 및 IPv6 상호 운용성으로 수정하려면

  1. IP 주소 문자열의 특정 길이에 종속된 요소를 찾아 사용자 인터페이스의 시각적 검토를 수행합니다. 쉽게 식별할 수 있는 4개 섹션 점선 10진수 표기법이 있는 컨트롤은 쉽게 발견할 수 있지만 다른 컨트롤은 검색할 수 없습니다. 대화 상자와 같이 IP 주소를 표시할 수 있는 위치가 있을 수 있습니다. 대화 상자에서는 IPv6 주소가 표시 공간이 부족할 수 있습니다.
  2. 이러한 컨트롤을 찾으면 IPv6을 사용할 때 주소를 표시하는 것이 적절한지 여부를 면밀히 조사합니다. IPv4 또는 IPv6을 사용할 수 있는 경우 사용자 인터페이스 중 하나를 수용할 수 있는지 확인합니다. 모든 컨트롤을 전체 IPv6 주소를 표시할 수 있는 사용자 인터페이스 컨트롤로 바꾸거나 보강합니다.
  3. 사용자 인터페이스의 테스트에 따라 IPv6 주소 표시를 사용하도록 설정하는 변경 내용이 IPv4 주소를 사용할 때 의도한 유용성을 유지하도록 합니다. 또한 정보 대화 상자와 같은 프로토콜 주소 표시 위치를 테스트하여 IPv6 주소를 올바르게 처리하는지 확인합니다.

Windows 소켓 애플리케이션용 IPv6 가이드

IPv6 Winsock Appications에 대한 데이터 구조 변경

IPv6 Winsock 애플리케이션용 이중 스택 소켓

IPv6 Winsock 애플리케이션에 대한 함수 호출

하드 코딩된 IPv4 주소 사용

IPv6 Winsock 애플리케이션에 대한 기본 프로토콜