- 05/31/2018
- 2 minute de citit
-
- s
- v
- m
Această secțiune descrie cele mai bune practici pentru portarea unei aplicații de difuzare IPv6 la capacitățile de multicast disponibile cu Windows Sockets.
Compararea IPv4 cu IPv6
Cel mai notabil considerent atunci când se pregătește portarea unei aplicații de difuzare IPv4 la IPv6 este următorul: IPv6 nu are implementat conceptul de difuzare. În schimb, IPv6 utilizează multicast.
Multicast pentru IPv6 poate emula capabilitățile tradiționale de difuzare găsite în IPv4. Setarea opțiunii de soclu IPV6_ADD_MEMBERSHIP cu adresa IPv6 setată la adresa link-local scope all nodes (FF02::1) este echivalentă cu difuzarea pe adresele de difuzare IPv4 folosind opțiunea de soclu SO_BROADCAST. Această adresă se numește uneori grupul multicast all-nodes. Pentru aplicațiile care doresc pur și simplu o emulație de difuzare pentru IPv6, această abordare este echivalentă din punct de vedere operațional. Cu toate acestea, o diferență notabilă în cazul IPv6 este că multicastele pe adresa grupului de multicast all-nodes nu sunt primite în mod implicit (transmisiunile IPv4 sunt primite în mod implicit). Programatorii de aplicații trebuie să utilizeze opțiunea de socket IPV6_ADD_MEMBERSHIP pentru a activa recepția multicast de la orice sursă, inclusiv de la adresa grupului multicast all-nodes.
Nota
În IPv6, selecția interfeței este specificată în structura de argumente transmisă opțiunii de socket multicast sau IOCTL.
Dar pentru transmisii mai bogate, mai robuste, mai selective și mai ușor de gestionat către mai multe gazde, dezvoltatorii de aplicații ar trebui să ia în considerare trecerea la un model multicast.
Mutarea la Multicast
Cu multicast, programatorii de aplicații pot alege selectiv o anumită pereche sursă/grup, permițând un model de recepție selectivă. Multicast Listener Discovery (MLD) pe IPv6 și versiunea 3 a Internet Group Management Protocol (IGMPv3) pe IPv4 susțin programarea multicast. În plus, multicastul permite aplicațiilor să blocheze (sau să deblocheze) în mod specific emițătorii din cadrul unui grup, protejând și mai mult aplicațiile de emițătorii necinstiți. Această capacitate este disponibilă atât pentru IPv4 (necesită IGMPv3), cât și pentru IPv6 (necesită MLDv2).
Există două scenarii principale pentru programatorii de aplicații care utilizează multicast: cei care portează de la aplicațiile de difuzare (sau multicast) IPv4 la IPv6 și cei care creează noi aplicații multicast IPv6.
Pentru portarea aplicațiilor existente, există două opțiuni pentru a trece la multicast IPv6: utilizarea opțiunilor de socket și utilizarea IOCTL-urilor.
- Utilizarea opțiunilor de socket este o abordare bazată pe modificări, care permite programatorilor să modifice proprietățile socket-ului în funcție de necesități (cum ar fi blocarea sau deblocarea unui expeditor, adăugarea unei noi surse și așa mai departe). Această abordare este mai intuitivă și este cea recomandată. Pentru mai multe informații despre abordarea bazată pe modificări a programării multicast, consultați MLD și IGMP Using Windows Sockets.
- Utilizarea IOCTL-urilor este o abordare bazată pe starea finală, deoarece permite dezvoltatorilor să furnizeze o stare a socket-ului complet configurată, inclusiv listele de includere și excludere, cu un singur apel. Pentru mai multe informații despre abordarea bazată pe starea finală, consultați Programarea Multicast bazată pe starea finală.
Pentru cei care creează noi aplicații multicast IPv6, practica recomandată este de a utiliza opțiuni de socket, mai degrabă decât de a utiliza IOCTLs.
Există o altă abordare pentru crearea de aplicații multicast cu IPv6, iar aceasta presupune utilizarea funcției WSAJoinLeaf. Deși utilizarea funcției WSAJoinLeaf nu este o practică recomandată, există situații care pot dicta utilizarea acesteia. De exemplu, un dezavantaj al utilizării opțiunilor socket pe Windows Server 2003 și versiunile anterioare este faptul că acestea sunt specifice versiunii IP. Pe aceste versiuni mai vechi de Windows, trebuie să existe opțiuni de socket diferite pentru IPv6 și IPv4. Pe Windows Vista și versiunile ulterioare, sunt acceptate noi opțiuni socket care pot fi utilizate atât cu IPv4, cât și cu IPv6. Funcția WSAJoinLeaf, în schimb, este agnostică față de versiunea IP și de protocol și, prin urmare, poate fi o abordare utilă pentru construirea unei aplicații care trebuie să funcționeze cu mai multe versiuni IP pe Windows Server 2003 și versiunile anterioare. Utilizarea funcției WSAJoinLeaf poate fi mai potrivită în anumite situații în care este necesar agnosticismul versiunilor de protocol și IP.
.