Protokollentwicklung für eigene Client/Server Applikation

Persönliche Seite #567706
Lesenswert?

Huhu,

Ich bräuchte mal so den einen oder anderen Ratschlag.

Zurzeit entwickle ich (aus Langeweile ;)) eine Art Chat. Die 
Schnittstelle ist eine Winsock2 Kapselung via einer Klasse.

Soweit so gut.

Jetzt benötige ich natürlich ein Protokoll, zwischen Server/Client. 
Bisher mache ich das so, dass ein Paket immer zB 2kB Größe hat. Je nach 
dem ersten Byte dieses Paketes (Command-Byte) überlegt sich dann der 
Empfänger, was der Sender mit dem Rest des Paketes (Dem Parameter, 
quasi) gemeint haben könnte.
Dafür bette ich quasi eine Struktur in dieses Paket ein. (Verschiedene 
Kommandotypen haben ihre eigene Struktur, die den Parameter beschreibt).
In der nächste Version wollte ich das dann so machen:
Es wird das Command-Byte gelesen und anschließend die Länge des 
Parameters. Anschließend wird der komplette Parameter empfangen (Quasi 
eine Schleife, bis alle Bytes angekommen sind).

Jetzt ergibt sich aber folgendes Problem: Will mir jetzt jemand einen 
Streich spielen, und schickt ein Paket mit Parameterlänge 5, schickt mir 
aber 10 Parameterbytes, so Gerät alles aus dem Takt.

Jetzt meine Frage: Gibts irgendeine Art "Richtlinie" oder auch nur 
Tipps, wie ich mir ein eigenes Protokoll entwickle? Ich denke da an 
Start/Stop Bytes, die aber nicht im Parameter vorkommen dürfen.
Wenn da also jemand Ratschläge zu hat, wäre ich demjenigen sehr 
verbunden.
Persönliche Seite #567803
Lesenswert?

Du könntest eine Headerstruktur an den Anfang eines jeden Paketes 
setzen, in der nicht nur das Kommandobyte, sondern auch noch die Anzahl 
der zugehörigen Nutzbytes und eine Prüfsumme über alles drinsteht.

Wenn Du dann nur noch Pakete auswertest, bei denen die Prüfsumme stimmt, 
dann liegst Du auf einer etwas abgesicherteren Seite.

Zusätzlich könntest Du noch ein "magic word", also eine bestimmte 
Zahlenkonstante in Deine Paketheader eintragen, um diese schneller 
erkennen zu können. Das sollte dann schon ein DWORD (uint32_t) sein, 
Werte wie 0xfeedc0de oder 0xdeadface lassen sich auch in einem Hexdump 
schön erkennen.

Erfolg!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren