- 31/05/2018
- 2 minutter at læse
-
- s
- v
- m
Dette afsnit beskriver bedste praksis for portering af en IPv6 broadcast-applikation til de multicast-funktioner, der er tilgængelige med Windows Sockets.
Sammenligning af IPv4 og IPv6
Den mest bemærkelsesværdige overvejelse, når man forbereder portering af en IPv4 broadcast-applikation til IPv6, er følgende: IPv6 har ikke noget implementeret koncept for broadcast. I stedet bruger IPv6 multicast.
Multicast til IPv6 kan emulere de traditionelle broadcast-funktioner, der findes i IPv4. Indstilling af socketindstillingen IPV6_ADD_MEMBERSHIP med IPv6-adressen indstillet til link-local scope all nodes-adressen (FF02::1) svarer til udsendelse på IPv4 broadcast-adresser ved hjælp af socketindstillingen SO_BROADCAST. Denne adresse kaldes undertiden for all-nodes multicast-gruppen. For programmer, der blot ønsker broadcast-emulering for IPv6, er denne fremgangsmåde operationelt set ækvivalent. En bemærkelsesværdig forskel med IPv6 er imidlertid, at multicasts på all-nodes multicast-gruppeadressen ikke modtages som standard (IPv4 broadcasts modtages som standard). Programmerere skal bruge socketindstillingen IPV6_ADD_MEMBERSHIP for at aktivere multicastmodtagelse fra enhver kilde, herunder all-nodes multicastgruppeadressen.
Note
I IPv6 angives grænsefladevalg i den argumentstruktur, der overføres til multicast socketindstillingen eller IOCTL.
Men for at opnå rigere, mere robuste, mere selektive og mere håndterbare transmissioner til flere værter bør programudviklere overveje at gå over til en multicast-model.
Overgang til multicast
Med multicast kan programprogrammører selektivt vælge et bestemt kilde/gruppe-par, hvilket muliggør en selektiv modtagelsesmodel. MLD (Multicast Listener Discovery) på IPv6 og version 3 af IGMPv3 (Internet Group Management Protocol) på IPv4 understøtter multicast-programmering. Desuden giver multicast programmerne mulighed for specifikt at blokere (eller fjerne blokering af) afsendere inden for en gruppe, hvilket yderligere beskytter programmerne mod uautoriserede udsendelser. Denne mulighed er tilgængelig for både IPv4 (kræver IGMPv3) og IPv6 (kræver MLDv2).
Der er to primære scenarier for programprogrammører, der anvender multicast: dem, der porterer fra IPv4 broadcast- (eller multicast-) applikationer til IPv6, og dem, der opretter nye IPv6 multicast-applikationer.
For at portere eksisterende applikationer er der to muligheder for at gå over til IPv6-multicast: anvendelse af socket-optioner og anvendelse af IOCTL’er.
- Anvendelse af socket-optioner er en ændringsbaseret tilgang, som giver udviklerne mulighed for at ændre socket-egenskaberne efter behov (f.eks. blokering eller deblokering af en afsender, tilføjelse af en ny kilde osv.) Denne fremgangsmåde er mere intuitiv og er den anbefalede fremgangsmåde. Du kan finde flere oplysninger om den ændringsbaserede tilgang til multicast-programmering i MLD og IGMP ved hjælp af Windows-soketter.
- Brug af IOCTL’er er en tilgang baseret på den endelige tilstand, fordi den gør det muligt for udviklere at levere en fuldt konfigureret sockettilstand, herunder inklusions- og eksklusionslister, med ét kald. Du kan finde flere oplysninger om den final-state-baserede fremgangsmåde i Final-State-Based Multicast Programming.
For dem, der opretter nye IPv6 multicast-programmer, er den anbefalede praksis at bruge socket-optioner i stedet for at bruge IOCTL’er.
Der er en anden fremgangsmåde til oprettelse af multicast-programmer med IPv6, og den indebærer brug af funktionen WSAJoinLeaf. Selv om det ikke anbefales at bruge WSAJoinLeaf-funktionen, er der situationer, hvor det kan være nødvendigt at bruge den. En ulempe ved at bruge socketindstillinger på Windows Server 2003 og tidligere er f.eks., at de er IPversionsspecifikke. På disse ældre versioner af Windows skal der være forskellige sockets-optioner for IPv6 og IPv4. På Windows Vista og nyere versioner understøttes nye socketindstillinger, som kan bruges med både IPv4 og IPv6. Funktionen WSAJoinLeaf er derimod uafhængig af IP-version og protokol, og den kan derfor være en nyttig metode til at opbygge et program, der skal fungere med flere IP-versioner på Windows Server 2003 og tidligere. Det kan være mere hensigtsmæssigt at bruge WSAJoinLeaf-funktionen i visse situationer, hvor der er behov for at være agnostisk over for protokol- og IP-versioner.