8 votes

Comment les services de messagerie en nuage atteignent-ils les appareils derrière un NAT / pare-feu ?

L'obtention de notifications push avec des appareils ayant une IP locale fonctionne bien. Je me demande simplement comment cela fonctionne. Est-ce simplement uPnP ? L'appareil commence à communiquer avec le service de messagerie en nuage, puis l'IGD entre en jeu ? Donc le mappage reste Le client de notification push maintient-il une connexion constante avec le serveur en nuage ? J'aimerais penser que ce n'est pas le cas.

Je m'intéresse plus particulièrement à la manière dont la notification push sait comment atteindre l'appareil s'il se trouve derrière un NAT ou un pare-feu. Existe-t-il un scénario dans lequel les notifications push de Google ne seraient pas en mesure d'atteindre un appareil ?

6voto

Michael Hampton Points 2100

Comme vous pouvez l'imaginer, Google est assez discret sur les détails de son implémentation. Je me contenterai donc de la décrire dans le cas général et sous une forme très basique.

Le principe du push est le suivant : le client (c'est-à-dire le téléphone) ouvre une connexion TCP avec le serveur de messagerie (par exemple Google). Cette connexion est censée rester ouverte aussi longtemps que le téléphone est allumé. Heureusement, une connexion TCP n'utilise absolument aucune bande passante lorsqu'elle ne transmet rien, ce qui permet de ne pas gaspiller beaucoup de données, de mettre l'émetteur radio hors tension, etc.

La connexion puede restent ouvertes indéfiniment, mais derrière un NAT, l'infrastructure du NAT tient un tableau des connexions ouvertes qu'elle gère et interrompt les connexions qui sont restées inactives pendant un certain temps, généralement 10 à 15 minutes. Aucune des deux extrémités ne reçoit de notification à ce sujet. Ce problème est donc traité en envoyant un paquet TCP keep-alive qui rafraîchit l'entrée dans la table de connexion NAT de l'opérateur. Cela ne coûte qu'environ 50 octets et ne doit être fait que toutes les quelques minutes.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X