다음을 통해 공유


브로드캐스트 애플리케이션을 IPv6으로 포팅

이 섹션에서는 IPv6 브로드캐스트 애플리케이션을 Windows 소켓에서 사용할 수 있는 멀티캐스트 기능으로 포팅하는 모범 사례를 설명합니다.

IPv4와 IPv6 비교

IPv4 브로드캐스트 애플리케이션을 IPv6으로 포팅할 준비를 할 때 가장 주목할 만한 고려 사항은 다음과 같습니다. IPv6에는 브로드캐스트 개념이 구현되지 않았습니다. 대신 IPv6은 멀티캐스트를 사용합니다.

IPv6용 멀티캐스트는 IPv4에 있는 기존 브로드캐스트 기능을 에뮬레이트할 수 있습니다. IPv6 주소가 링크-로컬 scope 모든 노드 주소(FF02::1)로 설정된 IPV6_ADD_MEMBERSHIP 소켓 옵션을 설정하는 것은 SO_BROADCAST 소켓 옵션을 사용하여 IPv4 브로드캐스트 주소에서 브로드캐스트하는 것과 같습니다. 이 주소를 모든 노드 멀티캐스트 그룹이라고도 합니다. IPv6에 대한 브로드캐스트 에뮬레이션을 원하는 애플리케이션의 경우 해당 접근 방식은 운영상 동일합니다. 그러나 IPv6의 한 가지 주목할 만한 차이점은 모든 노드 멀티캐스트 그룹 주소의 멀티캐스트는 기본적으로 수신되지 않는다는 것입니다(IPv4 브로드캐스트는 기본적으로 수신됨). 애플리케이션 프로그래머는 IPV6_ADD_MEMBERSHIP 소켓 옵션을 사용하여 모든 노드 멀티캐스트 그룹 주소를 포함하여 모든 원본에서 멀티캐스트 수신을 사용하도록 설정해야 합니다.

참고

IPv6에서 인터페이스 선택은 멀티캐스트 소켓 옵션 또는 IOCTL에 전달되는 인수 구조에 지정됩니다.

 

그러나 더 풍부하고 강력하며 선택적이며 관리하기 쉬운 여러 호스트로의 전송을 위해 애플리케이션 개발자는 멀티캐스트 모델로 이동하는 것을 고려해야 합니다.

멀티캐스트로 이동

멀티캐스트를 사용하면 애플리케이션 프로그래머가 특정 원본/그룹 쌍을 선택적으로 선택하여 선택적 수신 모델을 사용할 수 있습니다. IPv6의 MLD(멀티캐스트 수신기 검색) 및 IPv4의 IGMPv3(인터넷 그룹 관리 프로토콜) 버전 3은 멀티캐스팅 프로그래밍을 지원합니다. 또한 멀티캐스트를 사용하면 애플리케이션이 그룹 내에서 보낸 사람의 수신을 구체적으로 차단(또는 차단 해제)하여 악의적인 브로드캐스터로부터 애플리케이션을 더욱 보호할 수 있습니다. 이 기능은 IPv4(IGMPv3 필요)와 IPv6(MLDv2 필요)에 사용할 수 있습니다.

멀티캐스트를 사용하는 애플리케이션 프로그래머를 위한 두 가지 기본 시나리오는 IPv4 브로드캐스트(또는 멀티캐스트) 애플리케이션에서 IPv6으로 포팅하는 시나리오와 새 IPv6 멀티캐스트 애플리케이션을 만드는 시나리오입니다.

기존 애플리케이션을 포팅하는 경우 IPv6 멀티캐스트로 이동하는 두 가지 옵션이 있습니다. 즉, 소켓 옵션을 사용하고 IOCTL을 사용합니다.

  • 소켓 옵션을 사용하는 것은 개발자가 필요에 따라 소켓 속성을 변경할 수 있는 변경 기반 접근 방식입니다(예: 보낸 사람 차단 또는 차단 해제, 새 원본 추가 등). 이 방법은 더 직관적이고 권장되는 방법입니다. 멀티캐스트 프로그래밍에 대한 변경 기반 접근 방식에 대한 자세한 내용은 Windows 소켓을 사용하여 MLD 및 IGMP를 참조하세요.
  • IOCTL을 사용하면 개발자가 한 번의 호출로 포함 및 제외 목록을 포함하여 완전히 구성된 소켓 상태를 제공할 수 있으므로 최종 상태 기반 접근 방식입니다. 최종 상태 기반 접근 방식에 대한 자세한 내용은 최종 상태 기반 멀티캐스트 프로그래밍을 참조하세요.

새 IPv6 멀티캐스트 애플리케이션을 만드는 경우 IOCTL을 사용하는 대신 소켓 옵션을 사용하는 것이 좋습니다.

IPv6을 사용하여 멀티캐스트 애플리케이션을 만드는 또 다른 방법이 있으며 WSAJoinLeaf 함수를 사용해야 합니다. WSAJoinLeaf 함수를 사용하는 것이 권장되는 방법은 아니지만 사용을 지시할 수 있는 상황이 있습니다. 예를 들어 Windows Server 2003 및 이전 버전에서 소켓 옵션을 사용하는 한 가지 단점은 IP 버전에 따라 다릅니다. 이러한 이전 버전의 Windows에서는 IPv6 및 IPv4에 대한 다양한 소켓 옵션이 있어야 합니다. Windows Vista 이상에서는 IPv4 및 IPv6 둘 다에서 사용할 수 있는 새 소켓 옵션이 지원됩니다. 반면 WSAJoinLeaf 함수는 IP 버전 및 프로토콜에 구애받지 않으므로 Windows Server 2003 및 이전 버전에서 여러 IP 버전으로 작동해야 하는 애플리케이션을 빌드하는 데 유용한 방법이 될 수 있습니다. 프로토콜 및 IP 버전 독립적이 필요한 특정 상황에서 는 WSAJoinLeaf 함수를 사용하는 것이 더 적합할 수 있습니다.