Muss mein Handy jetzt auch noch Apple Talk oder IPX können?
Nein natürlich nicht;
Aber alles umzusetzen ist eine große Aufgabe. Wie du bereits festgestellt hast gibt es viele DHCP Alternativen - aber warum sollte ein Android alle beherrschen. Zu welchem Zweck?
bei einem Phone lass ich es mir noch einreden dass man hier evtl. Abstriche macht,
aber wenn ich nur meinen Drucker anschau, welchen Sinn hat es, SLAAC only zu können,
weder eine echt fixe IPv6 noch stateful DHCPv6 sind möglich; und damit ist es nicht wirklich einsetzbar,
weil man ja gerne einen DNS-Namen dafür am DNS eintragen will ...
(ich hab IPv6 einfach deaktiviert, so kann ich es nicht gebrauchen)
Kommt darauf an welchen RFC man nimmt. https://www.system.de/ipv6-rfc/
Die Auswahl ist ja gigantisch.
genau hier ist auch das Problem ... hier stehen halt bei IPv4 mehr als 3 Jahrzehnte etablierte Implementationen dahinter
und bei IPv6 gibts noch keine fertige ...
ich mein Du kannst folgendes auch bei Linux in der Geschichte nachvollziehen;
welches Windows machte die ersten Gehversuche mit IPv6?
richtig, WinXP und seine Derivate wie XP x64 bzw. der Server 2003 (x64);
und aus welchem Jahr stammte das?
und konnte man es wirklich mit IPv6 einsetzen? Nein.
2006/2007 kam dann Windows VISTA,
das konnte man erstmals überhaupt mit viel Bauchweh mit IPv6 einsetzen;
zu diesem Zeitpunkt waren die ersten RFC bereits mehr als 10 Jahre(!) alt;
und Hardware die mit IPv6 umgehen konnte, war kaum vorhanden;
wohlgemerkt: wenn man f. den Consumer keine entsprechende Hardware am Markt hat,
dann hat man verloren, weil schließlich sind eine Menge an Consumer, welche mangels
entsprechender Hardware mit IPv4 angebunden werden mussten gewichtiger als eine einzige Firma ...
in welchem Jahr tauchten die ersten Devices/Phones auf, welche auch eine IP-Verbindung hatten?
da war jedenfalls von IPv6 noch nichts am Markt ...
wann hatte in Österreich A1 Telekom bei den Mobilen Geräten (Phones, Tablets) IPv6 (DualStack eigtl. Light) eingeführt?
das wäre jedenfalls die Chance gewesen IPv6 mit den Mobilen Devices in die Breite zu tragen,
weil ohne der entsprechenden Anbindung durch den Mobilfunkbetreiber kamen die Dinger ohnehhin nicht ins Netz;
dort hätte anfangs eine Umsetzung zwischen beiden Netzen stattfinden können und nach und nach
durch den IPv6 Einzug hättte man weniger und weniger an Umsetzung machen müssen,
bis diese schlussendlich komplett weggefallen wäre;
was ist aber die Realität?
man findet z.B. kaum eine Bank, welche deren Infrastruktur mit DualStack angebunden hat;
jetzt nicht den Webauftritt selbst, sondern Electronic Banking ist bis auf kaum existente Ausnahmen noch immer durchwegs IPv4only;
(damit müssen Consumer auch per IPv4 angebunden werden)
aber wie heißt es so schön:
"wenn ich IPv4 brauche um zu bekommen, was IPv6 nicht hat,
dann brauch ich auch kein IPv6 um zu haben was IPv4 ohnehin bereits hat;"
(irgendwie ein Henne-Ei Problem
)
ich stell es jetzt in den Raum, aber die SIcherheitslücken von denen zuerst bei SSLv3, dann bei TLSv1.0, .... die Rede ist/war,
haben/hatten diese was damit zu tun, ob von IPv4 od. IPv6 die Rede ist?
der "Gedanke" dass man es nur einmal implementieren muss, und es dann sowohl mit IPv4 und IPv6 läuft, funktioniert nicht wirklich;
ein Code-Snippet in einem Programm von mir ...
(natürlich als Routinen, die ich mehrfach verwende)
Spoiler anzeigen
#define UNKNOWN 0
#define IPV4 1
#define IPV6 2
int getAddrType( const char* pszIPaddr, int* pnIPaddrType )
{
int nIPaddrType = UNKNOWN;
int nRet;
struct addrinfo hint;
struct addrinfo* prslt = (struct addrinfo*) NULL;
memset( (void*) &hint, (int) '\0', sizeof( hint ) );
hint.ai_family = PF_UNSPEC;
hint.ai_flags = AI_NUMERICHOST;
nRet = getaddrinfo( pszIPaddr, (const char*) NULL, &hint, &prslt );
if ( nRet );
else
{
if ( prslt->ai_family == AF_INET )
nIPaddrType = IPV4;
else
if ( prslt->ai_family == AF_INET6 )
nIPaddrType = IPV6;
}
freeaddrinfo( prslt );
if ( pnIPaddrType )
*pnIPaddrType = nIPaddrType;
return nRet;
}
int getDNSname( const char* pszIPaddr, char* pszDNSname )
{
int nIPaddrType = UNKNOWN;
int nRet = getAddrType( pszIPaddr, &nIPaddrType );
struct hostent* pHostEnt;
if ( nRet )
return nRet;
switch( nIPaddrType )
{
case IPV4 :
{
struct in_addr ipv4addr;
inet_pton( AF_INET, pszIPaddr, &ipv4addr );
pHostEnt = gethostbyaddr( (const void*) &ipv4addr, sizeof( ipv4addr ), PF_INET );
}
break;
case IPV6 :
{
struct in6_addr ipv6addr;
inet_pton( AF_INET6, pszIPaddr, &ipv6addr );
pHostEnt = gethostbyaddr( (const void*) &ipv6addr, sizeof( ipv6addr ), PF_INET6 );
}
break;
default : ;
}
if ( pHostEnt && pHostEnt->h_name )
{
if ( pszDNSname )
strcpy( pszDNSname, (char*) pHostEnt->h_name );
return 0;
}
else
{
if ( pszDNSname )
*pszDNSname = '\0';
return -1;
}
}
Alles anzeigen