2016-04-25 6 views
0

Wir UDP-Nachrichten von einem Gerät zum anderen senden. In der Nachricht befindet sich ein Zeitstempel und wird in einem 16-Bit-Feld übertragen. Der Empfänger verfolgt, wie oft das Feld "rollt", so dass Zeitspannen, die mehr als 16 Bits benötigen, verfolgt werden können. Der Protokolldesigner hat entschieden, dass wir den gesamten 32-Bit-Zeitstempel verwenden sollten, um den CRC für die Nachricht zu berechnen. Ist das eine gute Idee? Beachten Sie, dass wir einen Nachrichtenzeitraum haben, der viel kleiner als der "Rollover" -Perioden ist.Verwenden implizierte Daten in einer Nachricht, um eine CRC eine gute Entwurfsstrategie zu berechnen?

+0

Kein gutes Design. Mangelhafte Datenübertragungsschicht (Integrität der Nutzlast) mit Anwendungslogik (Überlauf des Timers). - Was passiert, wenn die CRC-Prüfung fehlschlägt? War die Payload beschädigt (-> Wiederholen/Ignorieren) oder sind die Timer auseinander gerutscht? Keine Möglichkeit zu erzählen. - Warum nicht explizit den vollständigen Zeitstempel als Teil der Payload übertragen? – JimmyB

Antwort

0

Da Sie offenbar die Kontrolle über die Nachrichten sind, sollten Sie nur die 32-Bit übertragen Zeitstempel in der Nachricht.

Was ist die Größe des CRC? Wenn es sich um eine 16-Bit-CRC ist, könnten Sie die Fehlererkennungsfunktion vollständig verzichten und die Gleichungen lösen, die fehlenden 16-Bits des Zeitstempel aus der gesendeten Nachricht und der CRC zu erhalten. Aber wenn Sie das tun, warum schicken Sie nicht einfach die anderen 16 Bits des Zeitstempels direkt in das CRC-Feld, anstatt in einen CRC?

Wenn es eine 32-Bit-CRC ist, könnten Sie wieder lösen, und mit 16 Bits "Stärke" in der Fehlererkennung statt 32 bleiben. Auch hier müsste man fragen, warum Sie nicht würden Sende einfach die anderen 16 Bits des Zeitstempels und lege einen 16-Bit-CRC in den Rest.

Oder wenn Sie die Länge der Nachricht ändern können, fügen Sie einfach die fehlenden 16-Bit-Zeitstempel, so dass die CRC und die Fehlererkennungsfähigkeit intakt.

+0

Es ist ein 24-Bit-CRC. Ich denke, dass der Protokollentwickler dachte, dass das System einen zusätzlichen Fehlermodus erfassen würde, d. H. Einen Fehler bei der Berechnung des Überlaufs. Das Problem, das ich sehe, ist, dass die Kommunikation im Fall eines Fehlers in der Rollover-Berechnung gelähmt wird. Die Überprüfung des Roll-Over mit einem einfachen Größenvergleich schlägt fehl, wenn die UDP-Pakete außer Betrieb sind. Daher denke ich, dass dies ein Fehler im Design ist. Aber ich möchte hören, was die Leute denken. – Gerry

Verwandte Themen