Wie funktionieren Sockets über drahtlose Verbindungen?

15

Ich habe nur clientseitige (insbesondere mobile) Anwendungen mit Android ausgeführt, bei denen das gesamte Netzwerk auf der HTTP-Ebene mithilfe von Framework-bereitgestellten Komponenten wie HttpUrlConnection verwaltet wird.

Push-Messaging-Systeme wie Websockets / XMPP usw. sorgen jedoch für eine dauerhafte Verbindung zum Server. Sogar Googles GCM, das in von Google Play unterstützte Geräte integriert ist, stellt eine dauerhafte Verbindung zu den Servern her.

Meine Frage ist, wie funktioniert das ohne Batterieentladung? Wenn wir fortlaufend nacheinander HTTP-Anforderungen stellen, ist der Akkuverbrauch erheblich. Wie werden diese dauerhaften Verbindungen aufrechterhalten, ohne dass dasselbe Problem auftritt?

Vinay S Shenoy
quelle
Haben Sie Fragen zu Sockets oder Websockets? Das sind zwei sehr unterschiedliche Dinge.
SVICK
@svick Meine Frage bezog sich auf Sockets.
Vinay S Shenoy

Antworten:

23

Eine offene TCP-Verbindung ist ein logischer Zustand. Dies bedeutet nicht, dass diese Daten immer hin und her gesendet werden. Nach dem ersten Drei-Wege-Handshake sind Sie in den Status "Verbunden" eingetreten. Sie sind in diesem Zustand, bis entweder eine 3-Wege-Trennung auftritt oder ein Keep-Alive-Fehler auftritt.

Während der Lebensdauer der Verbindung können Ressourcen vom zugrunde liegenden "physischen" Medium eingerichtet werden, um Datenübertragungen für diese Verbindung durchzuführen. Bei einer Kabelverbindung handelt es sich um die Übertragung von Ethernet-Frames. Im Fall einer 3G / 4G-Funkverbindung erfolgt dies, indem nach Bedarf Verbindungen mit den Protokollen der niedrigeren Ebene hergestellt werden.

Während der gesamten Verbindungsdauer gibt es keine physische zugrunde liegende Datenverbindung. Stattdessen ruht die Wartezeit, bis ein Peer in der TCP-Verbindung Daten senden muss.

Ein weiteres Problem ist, dass TCP ack- basiert ist. TCP-Peers können sich gegenseitig auf dem Laufenden halten, was definitiv empfangen wurde. Bei einem Fehler wird TCP erneut übertragen. Dies funktioniert gut für ziemlich zuverlässige physische Verbindungen, neigt jedoch dazu, bei sehr lauten / unterbrochenen Verbindungen auseinanderzufallen, wie bei Ihren drahtlosen Verbindungen. Wie Sie sich vorstellen können, treten in diesen Umgebungen Bestätigungen / Neuübertragungen sehr häufig auf.

Daher unternimmt das zugrunde liegende WLAN-Protokoll normalerweise alles, um die Notwendigkeit von TCP-Neuübertragungen zu verringern. Zum Beispiel sind viele Fehlerprüfungen in die drahtlose Schicht integriert. Kollegen im Mobilfunkbereich (Basisstation / Telefon) verwenden ebenfalls ein NAK- basiertes Protokoll, um der anderen Seite mitzuteilen, wenn sie etwas nicht erhalten haben. Wobei nak basierend reduziert den Aufwand für Fehler bei der Überprüfung (nehmen wir an, alles in Ordnung , wenn die andere Seite sagt , es ist nicht). Es hilft auch, Fehler vorher zu behebenSie sprudeln in die TCP-Ebene und vermeiden so viele TCP-Thrashs, die erneut übertragen werden sollen. Darüber hinaus wird der Umfang von erneuten Übertragungen an drahtlose Peers verringert. Das Telefon muss nicht erneut den Server im Internet nach dem Paket fragen, sondern nur die Basisstation über die drahtlose Verbindung.

Doug T.
quelle