- 05/31/2018
- 2 minutes de lecture
-
- s
- v
- m
.
Cette section décrit les meilleures pratiques pour porter une application de diffusion IPv6 vers les capacités de multidiffusion disponibles avec Windows Sockets.
Comparaison entre IPv4 et IPv6
La considération la plus notable lors de la préparation du portage d’une application de diffusion IPv4 vers IPv6 est la suivante : IPv6 n’a pas de concept implémenté de diffusion. Au lieu de cela, IPv6 utilise la multidiffusion.
La multidiffusion pour IPv6 peut émuler les capacités de diffusion traditionnelles trouvées dans IPv4. La définition de l’option de socket IPV6_ADD_MEMBERSHIP avec l’adresse IPv6 définie sur l’adresse de portée locale de lien tous les nœuds (FF02::1) est équivalente à la diffusion sur les adresses de diffusion IPv4 en utilisant l’option de socket SO_BROADCAST. Cette adresse est parfois appelée le groupe multicast all-nodes. Pour les applications qui souhaitent simplement une émulation de diffusion pour IPv6, cette approche est équivalente sur le plan opérationnel. Une différence notable avec IPv6, cependant, est que les multidiffusions sur l’adresse du groupe multidiffusion tous nœuds ne sont pas reçues par défaut (les diffusions IPv4 sont reçues par défaut). Les programmeurs d’applications doivent utiliser l’option de socket IPV6_ADD_MEMBERSHIP pour activer la réception de multicast depuis n’importe quelle source, y compris l’adresse de groupe multicast all-nodes.
Note
En IPv6, la sélection de l’interface est spécifiée dans la structure d’argument passée à l’option de socket multicast ou IOCTL.
Mais pour des transmissions plus riches, plus robustes, plus sélectives et plus faciles à gérer vers de multiples hôtes, les développeurs d’applications devraient envisager de passer à un modèle de multidiffusion.
Moving to Multicast
Avec la multidiffusion, les programmeurs d’applications peuvent choisir sélectivement une paire source/groupe particulière, permettant un modèle de réception sélective. Le Multicast Listener Discovery (MLD) sur IPv6 et la version 3 de l’Internet Group Management Protocol (IGMPv3) sur IPv4 prennent en charge la programmation de la multidiffusion. En outre, la multidiffusion permet aux applications de bloquer (ou de débloquer) spécifiquement les expéditeurs au sein d’un groupe, ce qui protège davantage les applications contre les diffuseurs malhonnêtes. Cette capacité est disponible pour IPv4 (nécessite IGMPv3) ainsi que pour IPv6 (nécessite MLDv2).
Il existe deux scénarios principaux pour les programmeurs d’applications utilisant la multidiffusion : ceux qui portent des applications de diffusion IPv4 (ou multidiffusion) vers IPv6, et ceux qui créent de nouvelles applications de multidiffusion IPv6.
Pour le portage des applications existantes, il existe deux options pour passer à la multidiffusion IPv6 : l’utilisation des options de socket et l’utilisation des IOCTL.
- L’utilisation des options de socket est une approche basée sur le changement, qui permet aux développeurs de modifier les propriétés du socket selon les besoins (comme le blocage ou le déblocage d’un expéditeur, l’ajout d’une nouvelle source, et ainsi de suite). Cette approche est plus intuitive et est recommandée. Pour plus d’informations sur l’approche basée sur le changement de la programmation de la multidiffusion, voir MLD et IGMP utilisant les sockets Windows.
- L’utilisation des IOCTL est une approche basée sur l’état final, car elle permet aux développeurs de fournir un état de socket entièrement configuré, y compris les listes d’inclusion et d’exclusion, avec un seul appel. Pour plus d’informations sur l’approche basée sur l’état final, voir Programmation de multidiffusion basée sur l’état final.
Pour ceux qui créent de nouvelles applications de multidiffusion IPv6, la pratique recommandée est d’utiliser les options de socket, plutôt que d’utiliser les IOCTL.
Il existe une autre approche pour créer des applications de multidiffusion avec IPv6, et cela implique l’utilisation de la fonction WSAJoinLeaf. Bien que l’utilisation de la fonction WSAJoinLeaf ne soit pas la pratique recommandée, certaines situations peuvent dicter son utilisation. Par exemple, l’un des inconvénients de l’utilisation des options de socket sur Windows Server 2003 et antérieur est qu’elles sont spécifiques à la version IP. Sur ces anciennes versions de Windows, les options de socket doivent être différentes pour IPv6 et IPv4. Sous Windows Vista et les versions ultérieures, de nouvelles options de socket sont prises en charge et peuvent être utilisées à la fois avec IPv4 et IPv6. La fonction WSAJoinLeaf, en revanche, est agnostique vis-à-vis de la version IP et du protocole, et peut donc être une approche utile pour construire une application qui doit fonctionner avec plusieurs versions IP sur Windows Server 2003 et antérieur. L’utilisation de la fonction WSAJoinLeaf peut être plus appropriée dans certaines situations où l’agnosticisme de protocole et de version IP est requis.