- 3105/2018
- 2 minuter att läsa
-
- s
- v
- m
Det här avsnittet beskriver bästa praxis för att anpassa ett IPv6-sändningsprogram till de multicastfunktioner som finns tillgängliga med Windows Sockets.
Varje gång man jämför IPv4 med IPv6
Det mest anmärkningsvärda övervägandet när man förbereder sig för att portera en IPv4-sändningsapplikation till IPv6 är följande: IPv6 har inget implementerat koncept för broadcast. I stället använder IPv6 multicast.
Multicast för IPv6 kan emulera traditionella broadcast-funktioner som finns i IPv4. Att ställa in sockelalternativet IPV6_ADD_MEMBERSHIP med IPv6-adressen inställd på adressen link-local scope all nodes (FF02::1) är likvärdigt med sändning på IPv4-sändningsadresser med hjälp av sockelalternativet SO_BROADCAST. Den här adressen kallas ibland multicastgruppen för alla noder. För tillämpningar som bara vill ha sändningsemulering för IPv6 är detta tillvägagångssätt operativt likvärdigt. En anmärkningsvärd skillnad med IPv6 är dock att multicasts på all-nodes multicast group-adressen inte tas emot som standard (IPv4-sändningar tas emot som standard). Programmerare måste använda socketalternativet IPV6_ADD_MEMBERSHIP för att aktivera mottagning av multicast från vilken källa som helst, inklusive multicastgruppadressen för alla noder.
Note
I IPv6 specificeras gränssnittsvalet i den argumentstruktur som skickas till multicast socketalternativet eller IOCTL.
Men för rikare, mer robusta, mer selektiva och mer hanterbara överföringar till flera värdar bör applikationsutvecklare överväga att gå över till en multicastmodell.
Omflyttning till multicast
Med multicast kan applikationsprogrammerare selektivt välja ett visst källa/grupp-par, vilket möjliggör en selektiv mottagningsmodell. MLD (Multicast Listener Discovery) på IPv6 och version 3 av IGMPv3 (Internet Group Management Protocol) på IPv4 stöder multicastprogrammering. Dessutom gör multicast det möjligt för program att specifikt blockera (eller avblockera) avsändare inom en grupp, vilket ytterligare skyddar programmen från oseriösa sändare. Denna möjlighet finns för IPv4 (kräver IGMPv3) och IPv6 (kräver MLDv2).
Det finns två primära scenarier för programvaruprogrammerare som använder multicast: de som anpassar IPv4-sändningar (eller multicast-applikationer) till IPv6 och de som skapar nya IPv6-multicast-applikationer.
För portering av befintliga tillämpningar finns det två alternativ för att gå över till IPv6 multicast: användning av socket-alternativ och användning av IOCTLs.
- Användning av socket-alternativ är ett förändringsbaserat tillvägagångssätt, som gör det möjligt för utvecklare att ändra socket-egenskaperna efter behov (t.ex. blockera eller avblockera en avsändare, lägga till en ny källa och så vidare). Detta tillvägagångssätt är mer intuitivt och är det rekommenderade tillvägagångssättet. Mer information om den förändringsbaserade metoden för multicastprogrammering finns i MLD and IGMP Using Windows Sockets.
- Användning av IOCTLs är en slutstatusbaserad metod, eftersom den gör det möjligt för utvecklare att tillhandahålla en fullt konfigurerad socketstatus, inklusive listor för inkludering och exkludering, med ett enda anrop. Mer information om det finalstatsbaserade tillvägagångssättet finns i Final-State-Based Multicast Programming.
För dem som skapar nya IPv6-multicastprogram är det rekommenderade tillvägagångssättet att använda socket-alternativ i stället för att använda IOCTLs.
Det finns ett annat tillvägagångssätt för att skapa multicastprogram med IPv6, och det innebär att man använder funktionen WSAJoinLeaf. Även om det inte är rekommenderat att använda WSAJoinLeaf-funktionen finns det situationer som kan kräva att den används. En nackdel med att använda socket-alternativ på Windows Server 2003 och tidigare är till exempel att de är specifika för IP-versionen. På dessa äldre versioner av Windows måste olika sockets-alternativ finnas för IPv6 och IPv4. I Windows Vista och senare stöds nya socketalternativ som kan användas med både IPv4 och IPv6. Funktionen WSAJoinLeaf är däremot oberoende av IP-version och protokoll och kan därför vara ett användbart tillvägagångssätt för att bygga ett program som måste fungera med flera IP-versioner på Windows Server 2003 och tidigare. Att använda WSAJoinLeaf-funktionen kan vara lämpligare i vissa situationer där protokoll- och IP-versionen måste vara agnostisk.