- 05/31/2018
- 2 perc olvasás
-
- s
- v
- m
Ez a szakasz a legjobb gyakorlatokat írja le egy IPv6 broadcast alkalmazás portolásához a Windows Sockets által elérhető multicast képességekre.
Az IPv4 és az IPv6 összehasonlítása
Az IPv4 broadcast alkalmazás IPv6-ra történő portolásának előkészítésekor a legfontosabb szempont a következő: Az IPv6-ban nincs implementálva a broadcast fogalma. Ehelyett az IPv6 a multicastot használja.
Az IPv6-os multicast emulálhatja az IPv4-ben található hagyományos broadcast képességeket. Az IPV6_ADD_MEMBERSHIP socket opció beállítása az IPv6-címnek a link-local scope all nodes címre (FF02::1) való beállításával egyenértékű az IPv4 broadcast-címeken való sugárzással az SO_BROADCAST socket opció használatával. Ezt a címet néha all-nodes multicast csoportnak nevezik. Azoknak az alkalmazásoknak, amelyek egyszerűen csak IPv6-os broadcast-emulációt akarnak, ez a megközelítés működési szempontból egyenértékű. Az IPv6 esetében azonban egy figyelemre méltó különbség, hogy az all-nodes multicast csoportcímre küldött multiküldések alapértelmezés szerint nem fogadhatók (az IPv4-es adások alapértelmezés szerint fogadhatók). Az alkalmazásprogramozóknak az IPV6_ADD_MEMBERSHIP socket opciót kell használniuk a multicast vétel engedélyezéséhez bármilyen forrásból, beleértve az all-nodes multicast csoportcímet is.
Megjegyzés
Az IPv6-ban az interfész kiválasztása a multicast socket opciónak vagy az IOCTL-nek átadott argumentumstruktúrában van megadva.
A több állomásnak történő gazdagabb, robusztusabb, szelektívebb és jobban kezelhető átvitel érdekében azonban az alkalmazásfejlesztőknek érdemes megfontolniuk a multicast modellre való áttérést.
Mozgás a multicastra
A multicasttal az alkalmazásprogramozók szelektíven választhatnak egy adott forrás/csoport párt, lehetővé téve a szelektív vételi modellt. A Multicast Listener Discovery (MLD) az IPv6-on és az Internet Group Management Protocol (IGMPv3) 3. verziója az IPv4-en támogatja a multicasting programozást. Ezenkívül a multicast lehetővé teszi az alkalmazások számára, hogy egy csoporton belül kifejezetten blokkolják (vagy feloldják a blokkolást) a küldőket, ami még jobban megvédi az alkalmazásokat a csaló műsorszóróktól. Ez a képesség mind az IPv4 (IGMPv3 szükséges), mind az IPv6 (MLDv2 szükséges) esetében elérhető.
A multicastot használó alkalmazásprogramozók számára két elsődleges forgatókönyv létezik: az IPv4-es broadcast (vagy multicast) alkalmazások IPv6-ra történő átvitele és az új IPv6-os multicast alkalmazások létrehozása.
A meglévő alkalmazások portolásánál két lehetőség van az IPv6 multicastra való áttérésre: a socket opciók és az IOCTL-ek használata.
- A socket opciók használata egy változás alapú megközelítés, amely lehetővé teszi a fejlesztők számára, hogy szükség szerint megváltoztassák a socket tulajdonságait (például a küldő blokkolása vagy feloldása, új forrás hozzáadása stb.). Ez a megközelítés intuitívabb és a javasolt megközelítés. A multicast-programozás változás alapú megközelítéséről bővebben az MLD és az IGMP használata Windows-aljzatokkal című fejezetben olvashat.
- Az IOCTL-ek használata a végső állapot alapú megközelítés, mivel lehetővé teszi a fejlesztők számára, hogy egyetlen hívással egy teljesen konfigurált aljzatállapotot adjanak meg, beleértve a felvételi és kizárási listákat is. A végső állapot alapú megközelítésről bővebben lásd: Végső állapot alapú multicast programozás.
Az új IPv6 multicast-alkalmazások létrehozásakor az IOCTL-ek használata helyett a socket-opciók használata ajánlott.
Az IPv6-os multicast-alkalmazások létrehozásához van egy másik megközelítés is, amely a WSAJoinLeaf függvény használatát jelenti. Bár a WSAJoinLeaf függvény használata nem ajánlott gyakorlat, vannak olyan helyzetek, amelyek megkövetelhetik a használatát. Például a Windows Server 2003 és korábbi Windows Server rendszereken a foglalatbeállítások használatának egyik hátránya, hogy azok IP-verzió-specifikusak. A Windows ezen régebbi verzióinál eltérő socket-beállításoknak kell lenniük az IPv6 és az IPv4 számára. A Windows Vista és újabb verziókon új socket opciók támogatottak, amelyek IPv4 és IPv6 esetén is használhatók. A WSAJoinLeaf funkció ezzel szemben IP-verzió- és protokoll-független, ezért hasznos megközelítés lehet egy olyan alkalmazás létrehozásához, amelynek több IP-verzióval kell működnie Windows Server 2003 és korábbi rendszereken. A WSAJoinLeaf függvény használata megfelelőbb lehet bizonyos helyzetekben, amikor protokoll- és IP-verzió-függetlenségre van szükség.