- 05/31/2018
- 2 minutos para leer
-
- s
- v
- m
Esta sección describe las mejores prácticas para portar una aplicación de difusión IPv6 a las capacidades de multidifusión disponibles con Windows Sockets.
Comparación de IPv4 con IPv6
La consideración más notable cuando se prepara para portar una aplicación de difusión IPv4 a IPv6 es esta: IPv6 no tiene implementado el concepto de broadcast. En su lugar, IPv6 utiliza la multidifusión.
La multidifusión para IPv6 puede emular las capacidades de difusión tradicionales que se encuentran en IPv4. Establecer la opción de socket IPV6_ADD_MEMBERSHIP con la dirección IPv6 establecida en la dirección de todos los nodos de alcance local de enlace (FF02::1) es equivalente a la difusión en direcciones de difusión IPv4 utilizando la opción de socket SO_BROADCAST. Esta dirección se denomina a veces grupo de multidifusión de todos los nodos. Para las aplicaciones que simplemente quieren una emulación de difusión para IPv6, este enfoque es operativamente equivalente. Una diferencia notable con IPv6, sin embargo, es que las multidifusiones en la dirección de grupo de multidifusión de todos los nodos no se reciben por defecto (las difusiones de IPv4 se reciben por defecto). Los programadores de aplicaciones deben utilizar la opción de socket IPV6_ADD_MEMBERSHIP para habilitar la recepción de multidifusión desde cualquier fuente, incluyendo la dirección de grupo de multidifusión de todos los nodos.
Nota
En IPv6, la selección de la interfaz se especifica en la estructura de argumentos que se pasa a la opción de socket de multidifusión o IOCTL.
Pero para obtener transmisiones más ricas, más robustas, más selectivas y más manejables a múltiples hosts, los desarrolladores de aplicaciones deberían considerar pasar a un modelo de multidifusión.
Pasar a la multidifusión
Con la multidifusión, los programadores de aplicaciones pueden elegir selectivamente un par fuente/grupo particular, permitiendo un modelo de recepción selectiva. El Multicast Listener Discovery (MLD) en IPv6 y la versión 3 del Internet Group Management Protocol (IGMPv3) en IPv4 soportan la programación multicast. Además, la multidifusión permite a las aplicaciones bloquear (o desbloquear) específicamente a los remitentes dentro de un grupo, lo que protege aún más a las aplicaciones de los emisores deshonestos. Esta capacidad está disponible para IPv4 (requiere IGMPv3) así como para IPv6 (requiere MLDv2).
Hay dos escenarios principales para los programadores de aplicaciones que utilizan la multidifusión: los que portan desde aplicaciones de difusión (o multidifusión) IPv4 a IPv6, y los que crean nuevas aplicaciones de multidifusión IPv6.
Para portar aplicaciones existentes, hay dos opciones para pasar a IPv6 multicast: usar opciones de socket y usar IOCTLs.
- Usar opciones de socket es un enfoque basado en cambios, que permite a los desarrolladores cambiar las propiedades del socket según sea necesario (como bloquear o desbloquear un remitente, añadir una nueva fuente, etc.). Este enfoque es más intuitivo y es el recomendado. Para más información sobre el enfoque basado en cambios para la programación de multidifusión, vea MLD e IGMP usando sockets de Windows.
- El uso de IOCTLs es un enfoque basado en el estado final, porque permite a los desarrolladores proporcionar un estado de socket completamente configurado, incluyendo listas de inclusión y exclusión, con una sola llamada. Para más información sobre el enfoque basado en el estado final, véase Final-State-Based Multicast Programming.
Para aquellos que crean nuevas aplicaciones de multidifusión IPv6, la práctica recomendada es utilizar opciones de socket, en lugar de utilizar IOCTLs.
Hay otro enfoque para crear aplicaciones de multidifusión con IPv6, y que implica el uso de la función WSAJoinLeaf. Aunque el uso de la función WSAJoinLeaf no es la práctica recomendada, hay situaciones que pueden dictar su uso. Por ejemplo, una desventaja de utilizar las opciones de socket en Windows Server 2003 y anteriores es que son específicas de la versión de IP. En estas versiones antiguas de Windows, las opciones de sockets deben ser diferentes para IPv6 e IPv4. En Windows Vista y posteriores, se admiten nuevas opciones de socket que pueden utilizarse tanto con IPv4 como con IPv6. La función WSAJoinLeaf, por el contrario, es agnóstica a la versión de IP y al protocolo, y por lo tanto puede ser un enfoque útil para construir una aplicación que debe trabajar con múltiples versiones de IP en Windows Server 2003 y anteriores. El uso de la función WSAJoinLeaf puede ser más apropiado en ciertas situaciones en las que se requiere agnosticismo de protocolo y versión IP.