Was ist das Ergebnis des folgenden Verbindungsszenarios in einem MQTT-Netzwerk?

7

In MQTT ist es der Client, der die Verbindung mit einer CONNECT-Nachricht initiiert.

MQTT Connect-Paketparameter

Das erste Feld des Pakets ist das clientId:

Die Client-ID (kurze Client-ID) ist eine ID jedes MQTT-Clients, der eine Verbindung zu einem MQTT-Broker herstellt. Wie die Wortkennung bereits andeutet, sollte sie pro Broker eindeutig sein. Der Broker verwendet es zur Identifizierung des Clients und des aktuellen Status des Clients. (Bild und Zitat stammen von hier .)

Angenommen, ich habe zwei Clients, Client X und Y, in der folgenden Situation.

  1. Broker gestartet, noch keine Kunden.
  2. X stellt erfolgreich eine Verbindung zum Broker mit der client-1ID her, Benutzername ist X.
  3. Jetzt versucht Y, eine Verbindung mit client-1der ID als Benutzername herzustellen Y.

Was wird passieren?

  1. Basierend auf dem clientId, wird denken , der Makler , dass X führt einen wiederholten Verbindungsversuch , das ist abnormales Verhalten .
  2. Es wird nichts Außergewöhnliches passieren. Y stellt eine erfolgreiche Verbindung her, da ein anderer Benutzername verwendet wird .
  3. Es wird nichts Außergewöhnliches passieren. Der Broker lehnt einen Y- Verbindungsversuch ab, da die angegebene clientId bereits verwendet wird.
Bence Kaulics
quelle

Antworten:

6

Wenn das clientiddasselbe ist, heißt es in MQTT in der Spezifikation, dass Sie sie als denselben Client betrachten müssen! Wahrscheinlich sollte Y mit dem verbunden Idund Xgetrennt werden.

Dieser Teil stammt aus der Dokumentation:

Wenn die Validierung erfolgreich ist, führt der Server die folgenden Schritte aus.

  1. Wenn die ClientId einen Client darstellt, der bereits mit dem Server verbunden ist, MUSS der Server den vorhandenen Client trennen [MQTT-3.1.4-2].

  2. Der Server MUSS die in Abschnitt 3.1.2.4 [MQTT-3.1.4-3] beschriebene Verarbeitung von CleanSession durchführen.

  3. Der Server MUSS das CONNECT-Paket mit einem CONNACK-Paket bestätigen, das einen Null-Rückkehrcode [MQTT-3.1.4-4] enthält.

  4. Starten Sie die Nachrichtenübermittlung und halten Sie die Überwachung am Leben.

Weitere Informationen finden Sie in dieser Dokumentation .

ThisaruG
quelle
2
Dies scheint die richtige Antwort zu sein, aber es kann hilfreich sein, den relevanten Teil der Spezifikation zu verknüpfen und zu zitieren (der Schlüsselteil lautet "Wenn die ClientId einen Client darstellt, der bereits mit dem Server verbunden ist, MUSS der Server den vorhandenen Client trennen").
Aurora0001
3
Ich habe diesen Teil irgendwie übersehen, aber es ist überraschend. Ein schädlicher Client kann den Broker dann zwingen, andere Clients zu trennen?
Bence Kaulics