- 31.05.2018
- 2 Minuten zu lesen
-
- s
- v
- m
Dieser Abschnitt beschreibt bewährte Verfahren für die Portierung einer IPv6-Broadcast-Anwendung auf die mit Windows Sockets verfügbaren Multicast-Funktionen.
Vergleich zwischen IPv4 und IPv6
Die wichtigste Überlegung bei der Vorbereitung der Portierung einer IPv4-Broadcast-Anwendung auf IPv6 ist die folgende: IPv6 hat kein implementiertes Konzept für Broadcast. Stattdessen verwendet IPv6 Multicast.
Multicast für IPv6 kann die traditionellen Broadcast-Funktionen von IPv4 emulieren. Das Setzen der Socket-Option IPV6_ADD_MEMBERSHIP mit der IPv6-Adresse, die auf die Adresse des link-local scope all nodes (FF02::1) gesetzt ist, entspricht dem Broadcasting auf IPv4-Broadcast-Adressen unter Verwendung der Socket-Option SO_BROADCAST. Diese Adresse wird manchmal als All-Nodes-Multicast-Gruppe bezeichnet. Für Anwendungen, die lediglich eine Broadcast-Emulation für IPv6 wünschen, ist dieser Ansatz operationell gleichwertig. Ein bemerkenswerter Unterschied bei IPv6 ist jedoch, dass Multicasts an der All-Nodes-Multicast-Group-Adresse standardmäßig nicht empfangen werden (IPv4-Broadcasts werden standardmäßig empfangen). Anwendungsprogrammierer müssen die Socket-Option IPV6_ADD_MEMBERSHIP verwenden, um den Multicast-Empfang von jeder Quelle, einschließlich der All-Nodes-Multicast-Gruppenadresse, zu aktivieren.
Hinweis
In IPv6 wird die Schnittstellenauswahl in der Argumentstruktur angegeben, die an die Multicast-Socket-Option oder IOCTL übergeben wird.
Für umfangreichere, robustere, selektivere und besser verwaltbare Übertragungen an mehrere Hosts sollten Anwendungsentwickler jedoch den Wechsel zu einem Multicast-Modell in Erwägung ziehen.
Moving to Multicast
Mit Multicast können Anwendungsprogrammierer selektiv ein bestimmtes Quelle/Gruppe-Paar auswählen und so ein selektives Empfangsmodell ermöglichen. Die Multicast Listener Discovery (MLD) bei IPv6 und Version 3 des Internet Group Management Protocol (IGMPv3) bei IPv4 unterstützen die Multicast-Programmierung. Darüber hinaus ermöglicht Multicast den Anwendungen, gezielt Absender innerhalb einer Gruppe zu blockieren (oder freizugeben), was die Anwendungen zusätzlich vor unseriösen Sendern schützt. Diese Fähigkeit ist sowohl für IPv4 (erfordert IGMPv3) als auch für IPv6 (erfordert MLDv2) verfügbar.
Es gibt zwei primäre Szenarien für Anwendungsprogrammierer, die Multicast verwenden: diejenigen, die von IPv4-Broadcast- (oder Multicast-) Anwendungen auf IPv6 portieren, und diejenigen, die neue IPv6-Multicast-Anwendungen erstellen.
Für die Portierung bestehender Anwendungen gibt es zwei Möglichkeiten, auf IPv6-Multicast umzusteigen: die Verwendung von Socket-Optionen und die Verwendung von IOCTLs.
- Die Verwendung von Socket-Optionen ist ein änderungsbasierter Ansatz, der es den Entwicklern ermöglicht, die Socket-Eigenschaften nach Bedarf zu ändern (z. B. einen Sender zu blockieren oder freizugeben, eine neue Quelle hinzuzufügen usw.). Dieser Ansatz ist intuitiver und der empfohlene Ansatz. Weitere Informationen zum änderungsbasierten Ansatz für die Multicast-Programmierung finden Sie unter MLD und IGMP mit Windows-Sockets.
- Die Verwendung von IOCTLs ist ein auf dem Endzustand basierender Ansatz, da er es Entwicklern ermöglicht, einen vollständig konfigurierten Socket-Status, einschließlich Ein- und Ausschlusslisten, mit einem Aufruf bereitzustellen. Weitere Informationen zum endzustandsbasierten Ansatz finden Sie unter Endzustandsbasierte Multicast-Programmierung.
Für die Erstellung neuer IPv6-Multicast-Anwendungen wird die Verwendung von Socket-Optionen anstelle von IOCTLs empfohlen.
Es gibt einen weiteren Ansatz zur Erstellung von Multicast-Anwendungen mit IPv6, der die Verwendung der WSAJoinLeaf-Funktion beinhaltet. Obwohl die Verwendung der WSAJoinLeaf-Funktion nicht empfohlen wird, gibt es Situationen, in denen ihre Verwendung erforderlich ist. Ein Nachteil bei der Verwendung von Socket-Optionen unter Windows Server 2003 und früher ist zum Beispiel, dass sie IP-Versionsspezifisch sind. Bei diesen älteren Windows-Versionen müssen unterschiedliche Socket-Optionen für IPv6 und IPv4 verwendet werden. Ab Windows Vista werden neue Socket-Optionen unterstützt, die sowohl mit IPv4 als auch mit IPv6 verwendet werden können. Die WSAJoinLeaf-Funktion ist dagegen unabhängig von der IP-Version und dem Protokoll und kann daher ein nützlicher Ansatz für die Entwicklung einer Anwendung sein, die mit mehreren IP-Versionen unter Windows Server 2003 und früher arbeiten muss. Die Verwendung der WSAJoinLeaf-Funktion kann in bestimmten Situationen, in denen Protokoll- und IP-Versionsunabhängigkeit erforderlich ist, sinnvoller sein.