L'opération "bind" revient à dire "utilisez ce port UDP local pour envoyer et recevoir des données". En d'autres termes, elle alloue ce port UDP à l'usage exclusif de votre application. (Il en va de même pour les sockets TCP).
Lorsque vous vous liez à "0.0.0.0" ( INADDR_ANY
), vous demandez à la couche TCP/IP d'utiliser tous les adaptateurs disponibles pour écouter et de choisir le meilleur adaptateur pour envoyer. C'est une pratique standard pour la plupart des codes de socket. La seule fois où vous ne spécifiez pas 0 pour l'adresse IP est lorsque vous voulez envoyer/recevoir sur une carte réseau spécifique.
De même, si vous spécifiez une valeur de port de 0 pendant la liaison, le système d'exploitation attribuera un numéro de port disponible aléatoirement pour ce socket. Ainsi, pour le multicast UDP, vous devez vous lier à INADDR_ANY sur un numéro de port spécifique vers lequel le trafic multicast doit être envoyé.
L'opération "joindre un groupe multicast" ( IP_ADD_MEMBERSHIP
) est nécessaire car il indique à votre carte réseau d'écouter non seulement les trames Ethernet dont l'adresse MAC de destination est la vôtre, mais il indique également à la carte Ethernet ( NIC ) pour écouter le trafic multicast IP ainsi que l'adresse ethernet multicast correspondante. Chaque IP multicast correspond à une adresse ethernet multicast. Lorsque vous utilisez un socket pour envoyer des données à une IP de multidiffusion spécifique, l'adresse MAC de destination de la trame Ethernet est définie comme l'adresse MAC de multidiffusion correspondante pour l'IP de multidiffusion. Lorsque vous rejoignez un groupe de multidiffusion, vous configurez la carte réseau pour qu'elle écoute le trafic envoyé à cette même adresse MAC (en plus de la sienne).
Sans le support matériel, la multidiffusion ne serait pas plus efficace que la simple diffusion de messages IP. L'opération jointe indique également à votre routeur/ passerelle de transférer le trafic multicast d'autres réseaux. (Quelqu'un se souvient de MBONE ?)
Si vous rejoignez un groupe de multidiffusion, tout le trafic de multidiffusion pour tous les ports de cette adresse IP sera reçu par la NIC. Seul le trafic destiné à votre port d'écoute lié sera transmis à votre application par la pile TCP/IP. En ce qui concerne la raison pour laquelle les ports sont spécifiés lors d'une souscription multicast - c'est parce que l'IP multicast est juste cela - IP seulement. Les "ports" sont une propriété des protocoles supérieurs (UDP et TCP).
Vous pouvez en savoir plus sur la manière dont les adresses IP de multidiffusion correspondent aux adresses Ethernet de multidiffusion sur différents sites. L'article de Wikipedia est aussi bon que possible :
L'IANA possède l'adresse MAC OUI 01:00:5e, par conséquent les paquets multicast sont délivrés en utilisant la plage d'adresses MAC Ethernet 01:00:5e:00:00:00 - 01:00:5e:7f:ff:ff. Cela représente 23 bits d'espace d'adressage espace d'adressage disponible. Le premier octet (01) comprend le bit de diffusion/multicast de diffusion. Les 23 bits inférieurs de l'adresse IP multidiffusion de 28 bits sont mappés. dans les 23 bits de l'espace d'adresse Ethernet disponible.