it-swarm.com.de

Erreichbarkeit und IPv6

Eines meiner Projekte verwendet die Reachability-Klasse von Apple, um den Netzwerkstatus zu überwachen und bei Änderungen benachrichtigt zu werden.

Nachdem ich diesen Artikel über die Unterstützung von IPv6 gelesen hatte, habe ich mich gefragt, ob in diese Klasse aufgenommen werden sollte, damit sie mit IPv6 funktioniert. 

Ich habe ein IPv6-Netzwerk im Anschluss an den gleichen Artikel eingerichtet - und alles scheint gut zu funktionieren, aber möglicherweise gibt es ein Problem mit dem Setup.

Überprüft der Teil der Reachability-Klasse, ob die Internetverbindung jetzt mit IPv6 funktioniert, oder müssen einige Änderungen vorgenommen werden?

18

Kurze Antwort von Apple selbst ( https://developer.Apple.com/videos/play/wwdc2015/719/ um ~ 10: 30 - obwohl ich empfehlen würde, das Video vollständig anzusehen - oder zumindest die wichtigsten Punkte hier durchzusehen: http://www.internetsociety.org/deploy360/blog/2015/06/video- of-Apple-wwdc-session-about-ipv6-and-ios-9-jetzt-verfügbar-und-einige-screenshots/ ):

Probieren Sie einfach die Verbindung.

Kopieren und Einfügen von https://developer.Apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Understanding andPreparingforheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//Apple/recid/20f -SW25 , was dies wiederholt:

Ohne Preflight verbinden

Die Reachability-APIs (siehe SCNetworkReachability-Referenz) sind für Diagnosezwecke vorgesehen, nachdem ein Konnektivitätsproblem festgestellt wurde. Viele Apps verwenden diese APIs fälschlicherweise, um proaktiv nach einer Internetverbindung zu suchen, indem sie die SCNetworkReachabilityCreateWithAddress-Methode aufrufen und eine IPv4-Adresse von 0.0.0.0 übergeben, was darauf hinweist, dass sich ein Router im Netzwerk befindet. Das Vorhandensein eines Routers garantiert jedoch nicht, dass eine Internetverbindung besteht. Vermeiden Sie im Allgemeinen die Erreichbarkeit des Preflight-Netzwerks. Versuchen Sie einfach, eine Verbindung herzustellen und Fehler ordnungsgemäß zu behandeln. Wenn Sie die Netzwerkverfügbarkeit überprüfen müssen, vermeiden Sie den Aufruf der SCNetworkReachabilityCreateWithAddress-Methode. Rufen Sie die SCNetworkReachabilityCreateWithName-Methode auf und übergeben Sie stattdessen einen Hostnamen.

Einige Apps übergeben der SCNetworkReachabilityCreateWithAddress-Methode auch eine IPv4-Adresse von 169.254.0.0, eine selbst zugewiesene verbindungslokale Adresse, um nach einer aktiven Wi-Fi-Verbindung zu suchen. Suchen Sie stattdessen nach dem Netzwerk-Erreichbarkeits-Flag kSCNetworkReachabilityFlagsIsWWAN, um nach WLAN- oder Mobilfunkverbindungen zu suchen.

8
Andrew Y

Ich habe auch ähnliche Zweifel hinsichtlich der IPv6- und der Erreichbarkeitsklasse. Apple hat in seinen Dokumenten gebeten, Unterstützung für IPv6-Typen bereitzustellen, wie (struct in_addr6, AF_INET6, struct sockaddr_in6 etc), aber die Klasse scheint noch nicht aktualisiert worden zu sein. Das ist der Zweifel, den ich habe. Ich bin noch nicht beim Testen von IPv6-Tests, habe aber nur beobachtet, während ich die statischen Code-Prüfungen durchführte. Möglicherweise sind einige Änderungen erforderlich.

Erreichbarkeit.m

+ (instancetype)reachabilityForInternetConnection
{
    struct sockaddr_in zeroAddress;

    bzero(&zeroAddress, sizeof(zeroAddress));

    zeroAddress.sin_len = sizeof(zeroAddress);

    zeroAddress.sin_family = AF_INET;

    return [self reachabilityWithAddress:&zeroAddress];
}
0
anoop4real