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?
Antwort
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.
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
- 1. Berechnen Sie CRC 8 in Ziel c
- 2. CreateWindowEx verwenden, um eine Nachricht-Only-Fenster
- 3. Eine gute Strategie, um die Integrität einer Datei zu gewährleisten
- 4. Verwenden einer Datumsvariablen, um das letzte Arbeitsdatum zu berechnen
- 5. Python Daten/Datei Crc
- 6. Berechnen von Modbus RTU CRC 16
- 7. Versucht, eine Sentinel-gesteuerte Schleife zu verwenden, um eine Menge Ganzzahlen hinzuzufügen und zu berechnen
- 8. Ist es eine gute Methode, CHECK-Einschränkungen zu verwenden, um Daten während einer INSERT-Anweisung zu validieren?
- 9. Ist es eine gute Praxis, das [Obsolete] -Attribut zu verwenden, um Entwickler anweisen, Teile einer API zu verwenden
- 10. Node.js: Socket.io in einer express.js-Route verwenden, um eine Nachricht an einen bestimmten Client zu senden
- 11. Ist es eine gute Übung, $ parent in angular zu verwenden?
- 12. Wie erstellt man eine Schleife, um eine Funktion basierend auf Strings in einer Spalte zu berechnen?
- 13. Verwenden Sie AJAX, um nach einer neuen Nachricht zu suchen
- 14. Um eine Nachricht auf Klick
- 15. Wie ermittelt man, welche CRC zu verwenden?
- 16. Ist es eine gute Übung, size_t in C++ zu verwenden?
- 17. Verwenden Sie * dies eine gute Idee?
- 18. Verwenden von Anfragefunktionen in Python, um Daten an eine Website zu senden und eine Antwort zurückzurufen
- 19. CRC-Berechnung in Java
- 20. Ist es eine gute Idee, NSUserDefaults zu verwenden, um den letzten Status einer iPhone-Anwendung zu speichern?
- 21. Was ist eine gute Methode, um einen Befehlsnamen zu erfinden?
- 22. Ist eine gute Idee, Couchbase mit Rails zu verwenden?
- 23. Wie verwende ich eine berechnete Spalte, um eine andere Spalte in der gleichen Ansicht zu berechnen
- 24. Ist es eine gute Übung, variable Subdomains zu verwenden?
- 25. Eine gute Möglichkeit, um mit einer POST-Anfrage umzuleiten?
- 26. Verwenden Sie eine Variable, um auszuwählen, welche Teil zu verwenden
- 27. Verwendet eine Arbeitsmethode, um andere gute Programmierpraxis zu implementieren?
- 28. ist es eine gute Sache, Iteratoren zu verwenden, um einen formatierten Stream zu lesen?
- 29. Ist MSMQ eine gute Idee?
- 30. ist es eine gute Übung, iframe zu verwenden, um header/navbar zu implementieren?
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