Hallo, ich hab mal wieder ein Problem... allerdings eher ein theoretisches oder besser gesagt ein Verständnisproblem.
Zunächst mal was ich möchte: ich würde gerne ein Netzwerkprotokoll entwickeln, das aber nicht auf Text basiert, sondern "reale" Werte überträgt... d.h. ich möchte eine Zahl (z.B. 6784343) nicht als String übertragen, sondern z.B. nur die 4 Byte, die der Datentyp umfasst... soweit ja kein Problem... nun möchte ich aber eine variable Anzahl solcher Zahlen und auch noch 2 Zeichenketten variabler Länge dazupacken und daraus ein Paket schnüren. Logische Folge: Ich brauch sowas wie nen Header, wo mir die Anzahl der Zahlenwerte und die Länge des Pakets mitgeteilt wird.
Das alles ist auch völlig logisch und ist soweit ja auch kein Problem!
Vielleicht denke ich jetzt auch im Kreis und hab ein Brett vorm Kopf:
Wie erkenne ich nun einen Fehler, wenn z.B. ein Client z.B. ein Byte "vergisst" oder sogar "absichtlich weglässt"? Dann lese ich doch ein Byte des folgenden Paketheaders mit aus und beginne dann beim folgenden Paket auch nicht am Anfang, sondern um 1 Byte versetzt und bekomme ja absolut nichts anderes als Müll oder hab ich da irgendwo nen Fehler in meiner "Logik"?
Beispiel:
(Paketlänge aus dem Header ausgelesen = 5Byte) (Datenteil, 4 Byte lang)
im darauffolgenden Paket lese ich doch dann nur Müll aus oder nicht?
Klar, der Client darf sowas nicht vergessen, aber ich möchte das Protokoll "rock steady" haben und auch ein bösartiger Client soll da kein Durchkommen haben... vielleicht denke ich auch einfach zuviel nach ;-)
Hat da jemand schon etwas mehr Erfahrung als ich und kann mir vielleicht weiterhelfen oder mir ein paar Sachen sagen, wo ich mich schlau machen kann? Seiten mit Beispielen zu solchen Sachen? Bin auf diesem Gebiet leider ein absoluter Anfänger, denn eigene Protokolle entwickeln ist halt doch was neues
Meine Ideen beschränken sich bislang ziemlich... das einzige was mir einfällt wäre ne Hash-Prüfsumme des Pakets im Header... die Wahrscheinlichkeit, dass im darauffolgenden Paket ein Kombination aus Bytes zu finden ist, die dann im Zusammenspiel wieder einen richtigen Hash ergeben ist wohl sehr nahe an 0... aber vielleicht gibt es ja Techniken und Vorgehensweisen um sowas noch eleganter zu lösen?
Zunächst mal was ich möchte: ich würde gerne ein Netzwerkprotokoll entwickeln, das aber nicht auf Text basiert, sondern "reale" Werte überträgt... d.h. ich möchte eine Zahl (z.B. 6784343) nicht als String übertragen, sondern z.B. nur die 4 Byte, die der Datentyp umfasst... soweit ja kein Problem... nun möchte ich aber eine variable Anzahl solcher Zahlen und auch noch 2 Zeichenketten variabler Länge dazupacken und daraus ein Paket schnüren. Logische Folge: Ich brauch sowas wie nen Header, wo mir die Anzahl der Zahlenwerte und die Länge des Pakets mitgeteilt wird.
Das alles ist auch völlig logisch und ist soweit ja auch kein Problem!
Vielleicht denke ich jetzt auch im Kreis und hab ein Brett vorm Kopf:
Wie erkenne ich nun einen Fehler, wenn z.B. ein Client z.B. ein Byte "vergisst" oder sogar "absichtlich weglässt"? Dann lese ich doch ein Byte des folgenden Paketheaders mit aus und beginne dann beim folgenden Paket auch nicht am Anfang, sondern um 1 Byte versetzt und bekomme ja absolut nichts anderes als Müll oder hab ich da irgendwo nen Fehler in meiner "Logik"?
Beispiel:
(Paketlänge aus dem Header ausgelesen = 5Byte) (Datenteil, 4 Byte lang)
im darauffolgenden Paket lese ich doch dann nur Müll aus oder nicht?
Klar, der Client darf sowas nicht vergessen, aber ich möchte das Protokoll "rock steady" haben und auch ein bösartiger Client soll da kein Durchkommen haben... vielleicht denke ich auch einfach zuviel nach ;-)
Hat da jemand schon etwas mehr Erfahrung als ich und kann mir vielleicht weiterhelfen oder mir ein paar Sachen sagen, wo ich mich schlau machen kann? Seiten mit Beispielen zu solchen Sachen? Bin auf diesem Gebiet leider ein absoluter Anfänger, denn eigene Protokolle entwickeln ist halt doch was neues
Meine Ideen beschränken sich bislang ziemlich... das einzige was mir einfällt wäre ne Hash-Prüfsumme des Pakets im Header... die Wahrscheinlichkeit, dass im darauffolgenden Paket ein Kombination aus Bytes zu finden ist, die dann im Zusammenspiel wieder einen richtigen Hash ergeben ist wohl sehr nahe an 0... aber vielleicht gibt es ja Techniken und Vorgehensweisen um sowas noch eleganter zu lösen?