Die "Bind" -Operation lautet im Wesentlichen: "Verwenden Sie diesen lokalen UDP-Port zum Senden und Empfangen von Daten. Mit anderen Worten, dieser UDP-Port wird ausschließlich für Ihre Anwendung verwendet. (Gleiches gilt für TCP-Sockets.)
Wenn Sie an "0.0.0.0" ( INADDR_ANY
) binden , weisen Sie die TCP / IP-Schicht grundsätzlich an, alle verfügbaren Adapter zum Abhören zu verwenden und den besten Adapter zum Senden auszuwählen. Dies ist Standard für die meisten Socket-Codes. Das einzige Mal, dass Sie 0 für die IP-Adresse nicht angeben würden, ist, wenn Sie auf einem bestimmten Netzwerkadapter senden / empfangen möchten.
Wenn Sie während der Bindung einen Portwert von 0 angeben, weist das Betriebssystem diesem Socket eine zufällig verfügbare Portnummer zu. Ich würde also erwarten, dass Sie für UDP-Multicast an einer bestimmten Portnummer, an die Multicast-Verkehr gesendet werden soll, an INADDR_ANY binden.
Die Operation "Join Multicast Group" ( IP_ADD_MEMBERSHIP
) wird benötigt, da Ihr Netzwerkadapter grundsätzlich nicht nur auf Ethernet-Frames wartet, bei denen die Ziel-MAC-Adresse Ihre eigene ist, sondern auch darauf, dass der Ethernet-Adapter ( NIC ) auf IP-Multicast-Verkehr wartet gut für die entsprechende Multicast-Ethernet-Adresse. Jede Multicast-IP wird einer Multicast-Ethernet-Adresse zugeordnet. Wenn Sie einen Socket zum Senden an eine bestimmte Multicast-IP verwenden, wird die Ziel-MAC-Adresse im Ethernet-Frame auf die entsprechende Multicast-MAC-Adresse für die Multicast-IP festgelegt. Wenn Sie einer Multicast-Gruppe beitreten, konfigurieren Sie die Netzwerkkarte so, dass sie auf Datenverkehr wartet, der an dieselbe MAC-Adresse gesendet wird (zusätzlich zu ihrer eigenen).
Ohne die Hardwareunterstützung wäre Multicast nicht effizienter als reine Broadcast-IP-Nachrichten. Der Join-Vorgang weist Ihren Router / Ihr Gateway außerdem an, Multicast-Verkehr von anderen Netzwerken weiterzuleiten. (Erinnert sich jemand an MBONE?)
Wenn Sie einer Multicast-Gruppe beitreten, wird der gesamte Multicast-Verkehr für alle Ports an dieser IP-Adresse von der Netzwerkkarte empfangen. Nur der für Ihren gebundenen Überwachungsport bestimmte Datenverkehr wird über den TCP / IP-Stapel an Ihre App weitergeleitet. In Bezug darauf, warum Ports während eines Multicast-Abonnements angegeben werden - weil Multicast-IP genau das ist - nur IP. "Ports" sind eine Eigenschaft der oberen Protokolle (UDP und TCP).
Sie können mehr darüber lesen, wie Multicast-IP-Adressen Multicast-Ethernet-Adressen an verschiedenen Standorten zugeordnet werden. Der Wikipedia-Artikel ist so gut wie es nur geht:
Die IANA besitzt die OUI-MAC-Adresse 01: 00: 5e, daher werden Multicast-Pakete unter Verwendung des Ethernet-MAC-Adressbereichs 01: 00: 5e: 00: 00: 00 - 01: 00: 5e: 7f: ff: ff zugestellt. Dies sind 23 Bit des verfügbaren Adressraums. Das erste Oktett (01) enthält das Broadcast / Multicast-Bit. Die unteren 23 Bits der 28-Bit-Multicast-IP-Adresse werden auf die 23 Bits des verfügbaren Ethernet-Adressraums abgebildet.