Verfahren zur Bestätigung auf beiden Seiten, dass ein Signal in einer Richtung empfangen wurde

Angenommen, es gibt zwei Geräte (A & B), die miteinander sprechen (Vollduplex). Nehmen wir für dieses Beispiel an, dass das Medium RF (drahtlos) ist.

Wenn Gerät A eine Nachricht an Gerät B sendet, welche Methoden/Strategien gibt es, damit beide Geräte bestätigen, dass B die Nachricht erhalten hat, und damit beide Geräte sicher sein können, dass das andere Gerät sie kennt?

Dies lässt sich vielleicht am besten durch ein reales Beispiel erklären:

Angenommen, Sie haben einen Vollduplex-RF-Schlüsselanhänger / eine Fernbedienung für Ihr Auto, die die Schlösser steuert. Die Fernbedienung hat einen LCD-Bildschirm.

Wenn Sie befehlen, die Schlösser zu schließen, sendet die Fernbedienung ein Signal an das Auto. Wenn das Auto das Signal richtig empfängt, kann es die Türen sofort verriegeln und dann eine Bestätigung (ACK) an die Fernbedienung zurücksenden, um zu sagen: "Die Türen sind verriegelt", und die Fernbedienung kann dies auf ihrem Bildschirm anzeigen. Die Fernbedienung kann jedoch die ACK des Fahrzeugs empfangen oder nicht.

Wenn die Fernbedienung die ACK des Autos nicht empfängt, wissen die Fernbedienung und der Benutzer nicht, ob die Türen verriegelt sind. An diesem Punkt kann der Benutzer entweder den Vorgang erneut versuchen oder aufgeben und zum Auto gehen, was beides nicht wünschenswert ist, weil es unnötig war. Es kann auch weitere Probleme verursachen, wie z. B. dass der Benutzer erwartet, dass das Auto entriegelt wird, und daher seine Schlüssel nicht mitbringt, um einen Gegenstand aus dem Kofferraum zu holen. Daher besteht der Wunsch, dass Fernbedienung und Auto "auf derselben Seite" sind.

Betrachten wir nun dieselbe Sequenz, außer dass die Fernbedienung das ACK empfangen hat. Die Fernbedienung weiß jetzt, dass das Auto die Nachricht erhalten hat. Es kann dem Benutzer anzeigen, dass die Türen verriegelt sind ... Aber das Auto weiß nicht, dass die Fernbedienung es weiß. Aus Sicht des Autos ist es möglich, dass die ACK nicht empfangen wurde, also sollten die Türen noch nicht verriegelt sein oder wir stoßen auf die im letzten Absatz erwähnten Probleme. Somit kann das Auto darauf warten, dass die Fernbedienung ein eigenes ACK an das Auto sendet. Wenn das empfangen wird, weiß das Auto, dass die Fernbedienung weiß, dass das Auto weiß, dass die Türen verriegelt werden müssen ... Aber weiß die Fernbedienung das? NEIN!

Sehen Sie hier ein Muster? Beide Geräte leiten weiterhin ACKs hin und her. Keiner kann aufhören und sagen "Ich weiß zu 100 %, dass das andere Gerät weiß, dass ich meine Aktion ausführen werde" .

Gibt es eine Möglichkeit für die Fernbedienung und das Auto sicherzustellen, dass die Türen verriegelt sind und die Fernbedienung dies anzeigt?

Wenn dies nicht möglich ist, welche Strategien außer einfacher Brute-Force (Auto sendet wiederholt ACKs) gibt es, um ziemlich sicher zu sein , dass die Türen verschlossen sind und die Fernbedienung dies als solche anzeigt?

Dies ist eine Variante des "Zwei-Generäle"-Problems: en.wikipedia.org/wiki/Two_Generals%27_Problem Letztendlich ist es eine Frage der Nachrichtenkosten vs. der Gewissheit
Sie drücken den Schlüsselanhänger, die Türen verriegeln, Sie hören ein Klicken und Sie gehen weg. Sie hören kein Klicken, also drücken Sie die Taste erneut. Worum geht es in diesem ganzen Drama?
@Andyaka - Bedenken Sie, dass ich, wenn ich in einem Gebäude bin, mein Autoschloss normalerweise nicht hören / sehen / riechen kann. Ich kann mir vorstellen, dass das für alle gilt. Insbesondere meine Fernbedienung hat eine praktische Reichweite von bis zu einer halben Meile (Sichtlinie). Also selbst wenn ich draußen bin, kann es viel Drama geben. Wenn Sie das Beispiel erweitern, um einen Fernstart bei 5 ° F und eine Entfernung von 1/4 Meile + in einer schlechten Nachbarschaft einzubeziehen, können Sie sich sicher das Drama vorstellen, nicht zu wissen, ob Ihr Auto läuft oder nicht die Türen sind verschlossen (Kurzzeitgedächtnis ist nicht meine Stärke).

Antworten (3)

Wie in den Kommentaren erwähnt, ist dies als das Problem der zwei Generäle bekannt und wurde gut untersucht. Es ist bewiesen, dass es keinen perfekten Algorithmus gibt, der immer dazu führt, dass sich beide Parteien einig sind und wissen, dass der andere es auch hat. Aber wenn Sie bereit sind, viele Nachrichten zu senden, können Sie sich beliebig nahe kommen.

Die "beste" Strategie wird durch die Besonderheiten des Problems bestimmt. Dies hängt von den Kosten für das Senden der Nachrichten ab (die in beide Richtungen unterschiedlich sein können), den Ausfallkosten, der Wahrscheinlichkeit, dass Nachrichten verloren gehen, und davon, ob fehlende Nachrichten korreliert sind oder nicht.

Mmm! Die übliche Art ahmt die Art und Weise nach, wie wir selbst Informationen austauschen. „Hier ist eine Nachricht, auf die ich eine Antwort brauche. Die Nachricht lautet: „Schließ die Türen ab, wenn du mein OK bekommst.“ Eine gute Möglichkeit für das Auto, zu antworten, wäre, dieselbe Nachricht zurückzusenden, aber mit einem angehängten ACK1-Code. Es wartet jetzt darauf, dass die Fernbedienung den Befehl wiederholt, vielleicht mit einem etwas anderen ack2-Code.Für etwas wie das Schließen der Fernbedienung ist das Blinken der Autolichter in der Praxis eine gute Möglichkeit, um anzuzeigen, dass die Nachricht ausgeführt wurde.

Ich denke jedoch, dass Sie etwas viel Kritischeres im Sinn haben als das Verriegeln und Entriegeln von Autotüren. Wie wäre es mit "Fahrwerk blockiert" in einem Flugzeug?

Diese Systeme werden Open & Closed Loop genannt. Eine offene Schleife führt nur die Aktion aus. Es gibt viele Möglichkeiten, wie eine Nachricht auf ihre Authentizität überprüft werden kann. Das Hinzufügen von Prüfzeichen am Ende ist eine solche Methode. Cyclic Check Character (CCC) oder Block Check Character (BCC) sind Möglichkeiten, um beispielsweise die Anzahl der "Einsen" in einer digitalen Nachricht zu zählen. Ein bisschen wie das Zählen der Anzahl von "A" in einem Text würde Ihnen eine bessere Überprüfung der Integrität geben.

Am Ende des Tages kann die Nachricht, wenn sie von entscheidender Bedeutung ist, zweimal oder mehrmals gesendet und verglichen werden, um sicherzustellen, dass sie zuverlässig empfangen wird. {treu empfangen - treu empfangen}! Es wird nicht ausgeführt, bis eine zuvor vereinbarte Anzahl ähnlicher Nachrichten ausgetauscht wurde.

Ich hoffe, das eröffnet Möglichkeiten, wie man mit nahezu bombenfester Sicherheit und Authentizität vorgehen kann und beantwortet Ihre Frage ausreichend.

Dies berücksichtigt in keiner Weise die Frage des Abfangens oder der böswilligen Generierung von Befehlen. Das ist eher im Bereich von Chiffren & Codes - ein etwas anderes Ballspiel.

In Computernetzwerken sendet die anfordernde Seite die Anforderung normalerweise erneut, bis sie eine ACK erhält. Wenn die ACK verloren geht, wird eine doppelte Anforderung empfangen.

Beispiel Austausch:

Fernbedienung: "Tür abschließen."
Auto: (Tür verriegeln)
Auto: "ACK" (Nachricht bei der Übertragung verloren)
Fernbedienung: "Tür verriegeln."
Auto: (stellt fest, dass die Tür bereits verriegelt ist und tut nichts)
Auto: "ACK" (Nachricht bei der Übertragung verloren)
Fernbedienung: "Tür verriegeln."
Auto: (stellt fest, dass die Tür bereits verriegelt ist und tut nichts)
Auto: "ACK" (Nachricht erfolgreich empfangen)

Beachten Sie, dass zur Verwendung dieser Methode das Protokoll so konzipiert sein muss, dass doppelte Anforderungen keine Rolle spielen. Die Fernbedienung kann dem Auto also nicht sagen, "Türstatus ändern". Stattdessen muss die Fernbedienung zuerst fragen, ob die Tür derzeit verriegelt ist (mit Wiederholungen), und sie dann auf den entgegengesetzten Status setzen (mit Wiederholungen).

Nach einer bestimmten Anzahl fehlgeschlagener Versuche muss die Fernbedienung aufgeben (möglicherweise ist das Auto nicht in Reichweite). In diesem Fall weiß es nicht, ob sich das Auto außerhalb der Reichweite befindet oder ob das Auto die Antwort nicht gesendet hat. Dies kann vermieden werden, indem zuerst eine No-Op-Nachricht gesendet wird (was dazu führt, dass das Auto eine ACK sendet, aber nichts tut), um zu sehen, ob das Auto in Reichweite ist.

Wie von anderen Antwortenden angemerkt, besteht immer eine Wahrscheinlichkeit ungleich Null, dass die Fernbedienung die ACKs vom Auto nicht empfangen kann, wenn die Operation erfolgreich war. Dies ist unvermeidlich. Im besten Fall kann die Wahrscheinlichkeit so reduziert werden, dass sie in normalen Szenarien unwahrscheinlich ist.