Wie erreichen Cloud-Nachrichtendienste Geräte hinter NAT / Firewall?


8

Das Abrufen von Push-Benachrichtigungen mit Geräten mit lokaler IP-Adresse funktioniert einwandfrei. Ich frage mich nur, wie das funktioniert. Ist es nur uPnP? Das Gerät startet die Kommunikation mit dem Cloud-Messaging-Dienst und dann startet IGD? Die Zuordnung bleibt also bestehen. Hält der Push-Benachrichtigungsclient eine konstante Verbindung zum Cloud-Server? Ich würde gerne denken, dass dies nicht der Fall ist.

Ich bin speziell daran interessiert, wie die Push-Benachrichtigung weiß, wie das Gerät erreicht wird, wenn es sich hinter einem NAT oder einer Firewall befindet. Gibt es ein Szenario, in dem Google Push-Benachrichtigungen ein Gerät nicht erreichen können?

Antworten:


6

Wie Sie sich vorstellen können, ist Google in Bezug auf die Implementierungsdetails ziemlich leise. Ich beschreibe dies nur im allgemeinen Fall und in einer sehr einfachen Form.

Die Art und Weise, wie Push ausgeführt wird, besteht darin, dass der Client (dh das Telefon) eine TCP-Verbindung zum Messaging-Server (z. B. Google) herstellt. Diese Verbindung soll so lange geöffnet bleiben, wie das Telefon eingeschaltet ist. Glücklicherweise verbraucht eine TCP-Verbindung absolut keine Bandbreite, wenn sie nichts überträgt, sodass nicht viele Daten verschwendet werden, der Funksender heruntergefahren werden kann usw.

Die Verbindung kann unbegrenzt offen bleiben. Hinter einem NAT führt die NAT-Infrastruktur jedoch eine Tabelle mit offenen Verbindungen, die sie verarbeitet, und trennt Verbindungen, die einige Zeit inaktiv waren, normalerweise 10 bis 15 Minuten. Kein Ende erhält eine Benachrichtigung darüber. Dies wird also durch Senden eines TCP-Keep-Alive-Pakets erledigt, das den Eintrag in der NAT-Verbindungstabelle des Netzbetreibers aktualisiert. Dies kostet nur ungefähr 50 Bytes und muss nur alle paar Minuten durchgeführt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.