Programmierung

SckConnect() mit IPv6

Anlässlich des heute global stattfindenden "World IPv6 Day" geht es diesmal um den Einsatz von IPv6 in der CONEZPT 16 Version 5.6. Beim Prozedurbefehl SckConnect() kann das Zielsystem entweder per IP-Nummer oder durch einen Hostnamen angegeben werden. Für die Verwendung von IPv6 sind dabei einige Dinge zu beachten.


Bei Angabe einer Nummer ist das zu verwendene Protokoll direkt ersichtlich. "192.168.0.1" ist klar eine IPv4-Adresse, "2a02:2e0:3fe:100::7" eine Adresse der Version 6. Bei einem Namen sieht das anders aus, das Betriebssystem kann für einen Hostnamen mehrere Adressen liefern, die sowohl IPv4 als auch IPv6 sein können. So wird für den Namen "localhost" beispielsweise "127.0.0.1" und "::1" zurückgeliefert. Welche Adresse soll also verwendet werden?

Durch die Verwendung eines Namenspräfix kann der Entwickler die Auswahl der IP-Adresse und somit auch des Protokolls steuern;

ip4: 	ausschließlich v4
ip4f:	bevorzugt v4, v6 wenn es keine v4-Adresse gibt
ip6:	ausschließlich v6
ip6f:	bevorzugt v6, v4 wenn es keine v6-Adresse gibt

Ohne Präfix verwendet CONZEPT 16 bevorzugt IPv4-Adressen, dies entspricht "ip4f:".
Nun kann ein Host auch mehrere Adressen eines Protokolls haben, gerade bei IPv6 ist dies oft der Fall. SckConnect() klassifiziert dann die Adressen und wählt in der Reihenfolge der Adresstypen "Loopback", "Unique Local Unicast", "Global Unicast" und "Link Local Unicast" die erste gefundene Adresse aus.

Nach der Auswahl der Adresse versucht SckConnect() eine Verbindung aufzubauen. Jetzt kann es sein, das der Service auf dem Zielsystem aber gar nicht mit der ausgewählten Protokollversion arbeitet, obwohl der Rechner im Dual-Stack-Betrieb läuft und beide Protokolle aktiviert sind. Zum Beispiel kann ein Webservice seine Dienste nur für IPv4 bereitstellen.

Ein Verbindungsversuch mit "ip6f:www.test.net" scheitert in diesem Fall, da der Rechner zwar eine IPv6-Adresse hat, der Service aber kein IPv6 verwendet. Hier hilft dann nur ein zweiter Verbindungsversuch mit "ip4:www.test.net", der in unserem Fall dann erfolgreich wäre.

Keine Kommentare

Kommentar abgeben