9 votes

Comment les appareils Apple maintiennent-ils des connexions persistantes avec les serveurs Apple pour des éléments tels que APN, FindMy network, etc.

Les appareils Apple tels que les iPhones et les Macs sont capables de recevoir des notifications en temps quasi réel du système APN, ainsi que de se connecter fréquemment au réseau FindMy, etc. Je me demande comment ces appareils sont capables de maintenir des connexions persistantes avec les serveurs Apple.

Je suppose que les appareils Apple n'utiliseraient pas quelque chose comme les sondages, car cela consommerait probablement de la batterie et gaspillerait des données cellulaires. Je me demande si Apple utilise quelque chose du genre WebSockets ou peut-être leur propre système propriétaire ?

7voto

Graham Miln Points 39606

Socket TCP/IP

La connexion est probablement une prise réseau en utilisant TCP/IP. A option keep-alive peut aider à maintenir une connexion tranquille.

Le problème intéressant est de savoir comment Apple choisit de gérer les millions de connexions simultanées. Problème du C10K y Le secret des 10 millions de connexions simultanées .

7voto

Oskar Points 1242

Chaque dispositif ouvre une ou plusieurs connexions TCP v4 et/ou v6 sur un ou plusieurs des ports suivants .

Si vous utilisez un pare-feu ou un nom de point d'accès privé pour les données cellulaires, vos appareils Apple doivent pouvoir se connecter à des ports spécifiques sur des hôtes spécifiques :

  • Le port TCP 5223 pour communiquer avec les APN.
  • Port TCP 443 ou 2197 pour envoyer des notifications aux APN.

Le port TCP 443 est utilisé lors de l'activation de l'appareil, puis comme solution de repli si les appareils ne peuvent pas atteindre les APN sur le port 5223. La connexion sur le port 443 utilise un proxy tant que celui-ci permet à la communication de passer sans être décryptée. Les serveurs APNs utilisent l'équilibrage de charge, de sorte que vos appareils ne se connectent pas toujours à la même adresse IP publique pour les notifications. Il est préférable de laisser votre appareil accéder à ces ports sur l'ensemble du bloc d'adresses 17.0.0.0/8, qui est attribué à Apple.

Sur Du côté du serveur d'Apple, la connexion par proxy d'une tierce partie et l'utilisateur final demande d'envoyer une notification à un autre appareil.

APNs met tout en œuvre pour livrer vos notifications, et pour les livrer avec la meilleure expérience utilisateur :

  • Les APN gèrent une connexion IP accréditée, cryptée et persistante vers l'appareil de l'utilisateur.
  • Les APN peuvent stocker des notifications pour un appareil qui est actuellement hors ligne. Les APN transmettent ensuite les notifications stockées lorsque l'appareil est en ligne.
  • Les APN peuvent regrouper les notifications avec le même ID de regroupement.

Quant au comment, les cœurs d'efficacité du silicium d'Apple et l'intégration étroite entre la pile réseau, le système d'exploitation, la conception du matériel et la gestion de l'énergie permettent aux appareils de dormir la plupart du temps pendant qu'ils attendent et ne sont pas occupés par d'autres tâches locales. Les notifications locales servent également à réveiller l'appareil sans nécessiter de connexion réseau.

2voto

Motti Shneor Points 504

Bien que les réponses existantes fournissent une description plus ou moins précise de l'aspect de cette connexion continue - elles décrivent la fonctionnalité en utilisant des termes génériques (IP, API, TCP+keep-alive) et ainsi de suite - qui peuvent être vrais, mais qui manquent le côté "Apple" de la chose. Ces réponses pourraient expliquer à la fois Android et Windows et, en fait, toute plate-forme informatique maintenant des connexions réactives à long terme.

L'ajout important que je veux faire ici - est que le "Base OS" d'Apple - la partie partagée entre MacOS iOS tvOS, watchOS et ainsi de suite - contient plusieurs sous-systèmes et API qui permettent un tel comportement pratiquement "gratuitement" à tout développeur de logiciels, à condition qu'ils utilisent les sous-systèmes "recommandés" de l'OS, et non de simples API de réseau génériques (comme posix, etc.).

La capacité à maintenir une connexion réactive à long terme n'est pas seulement requise par les services basés sur les notifications (comme "FindMy" et autres), mais aussi par tous les services multimédias à distance - FaceTime, iTunes, Maps (Navigation) et en réalité tous leurs concurrents aussi (Zoom, Viber, Slack et amis).

Une caractéristique importante que le PO n'a PAS mentionnée - la capacité de survivre et de renouveler la connexion immédiatement en changeant de réseau, de pile réseau et en utilisant plusieurs piles réseau et installations simultanément - est également importante. Un iPhone peut passer du cellulaire au WiFi, au Bluetooth et même utiliser les 3 ensemble des dizaines de fois au cours d'un seul appel.

Les mécanismes importants à apprendre sont :

  • Le cadre SystemConfiguration (pour la "joignabilité" et la capacité de maintenir une connexion sans polling)
  • CFNetwork Framework - le cadre de la fondation de base mettant en œuvre la plupart des interfaces de bas et de haut niveau des services de réseau - où tous les accès via "proxy" ou "pare-feu" ou le maintien de la connexion à long terme sont mis en œuvre
  • NSURLSession - les API Swift/Obj-C de niveau supérieur permettant aux développeurs d'applications de maintenir de telles connexions.

J'ai dû utiliser les trois lorsque j'ai développé des logiciels d'audio/vidéoconférence, des agents de sécurité, des outils de gestion de bases de données à distance et bien d'autres. Je me suis toujours étonné de la facilité et de l'efficacité des API fournies par Apple par rapport aux solutions que j'ai construites pour d'autres plateformes.

Un tout petit exemple : Lorsque vous "dites au système d'exploitation" que vous souhaitez maintenir la connexion avec un serveur spécifique et être informé des changements dans son "accessibilité", le système d'exploitation le fait pour vous, mais PAS dans votre propre processus. C'est un service de l'OS. Ainsi... votre application peut être tuée, et être relancée immédiatement lorsque la connexion est rétablie. De plus, si 3 processus doivent maintenir la connexion à un domaine ou à un service, l'OS ne suit ce domaine/service qu'UNE SEULE FOIS pour tous les "auditeurs" enregistrés, ce qui améliore également l'efficacité.

Ainsi, lorsque vous branchez ou débranchez le câble Ethernet, le système d'exploitation n'a pas besoin de "sonder" la chose - il maintient le matériel basé sur les interruptions de toute façon. Cela peut être fait de manière beaucoup plus efficace ! De même lorsque vous perdez la connexion cellulaire.

Enfin, je vous recommande d'apprendre ces 3 frameworks Apple, et d'apprendre comment cela se passe sur cette plateforme.

Un bon début peut être de regarder cette vidéo de la WWDC 2015 d'Apple - Présentation de Network.framework : Une alternative moderne aux Sockets

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X