È necessario riempire i byte quando si utilizza una lunghezza del campo di pacchetti

0

Sono coinvolto in un progetto che implica l'implementazione di un protocollo binario che verrà trasmesso su TCP. Durante le nostre prime discussioni, abbiamo riscontrato un breve intoppo nel decidere se il riempimento di byte è necessario se decidiamo di includere la lunghezza del pacchetto nell'intestazione del campo.

Ad esempio. Se la nostra struttura dei pacchetti era così:

[STX] [PACKET LENGTH] [PACKET ID] ..... [ETX]

Abbiamo bisogno di roba da byte? Uno dei miei colleghi sembra dire che, dato che conosciamo la lunghezza del pacchetto, anche se un carattere speciale, vale a dire STX, ETX appare nei byte, non importa quanto stiamo leggendo comunque la quantità di byte [Lunghezza pacchetto].

Sembra avere senso, ma non sono sicuro al 100% se questo ragionamento è giusto.

Si noti che non stiamo usando moduli di tipo di gestore di protocolli esistenti come proto-buf ma stiamo progettando questo protocollo noi stessi per il nostro uso.

Per confermare ciò che penso sto significando riferendosi al riempimento di byte:

Byte stuffing is a process that transforms a sequence of data bytes that may contain 'illegal' or 'reserved' values into a potentially longer sequence that contains no occurrences of those value

Tratto da Wiki - Sovraccarico costante per byte

    
posta dreza 13.04.2014 - 09:52
fonte

2 risposte

3

Il tuo collega è corretto.

Se la lunghezza del pacchetto è totale e il carico utile dei dati è l'unico pezzo di lunghezza variabile nel pacchetto, non è necessario caricare il carico utile in byte. Se hai più di un pezzo di lunghezza variabile, dovrai pensare a come disambiguare i vari blocchi, in modo da sapere dove si ferma e inizia il successivo.

Il riempimento del byte viene utilizzato quando non è possibile inserire la lunghezza del pacchetto nello stream prima del payload dei dati del pacchetto. Solitamente, questo è dovuto al fatto che i messaggi sono di lunghezza variabile e la lunghezza del messaggio non può essere conosciuta a priori.

    
risposta data 13.04.2014 - 10:03
fonte
1

Ho dovuto cercare "byte stuffing". Non sono sicuro che sia un termine comune, quindi potresti voler includere una breve definizione di esso.

Supponendo che intendi la tecnica che modifica i byte in modo che tu possa avere un byte di terminazione, come zero, eseguendo l'escape dei byte di dati che sono zero ...

Per favore, pensaci prima di chiedere. Lunghezza del campo Carattere di terminazione Riesci a pensare a qualsiasi situazione che richiederebbe entrambi?

La lunghezza del campo è quasi sempre la scelta migliore. Dopo aver letto la lunghezza è possibile leggere i dati. Non è necessario controllare i dati per i byte speciali.

Una parola di cautela però: non fidarti ciecamente dei dati di lunghezza. Controlla sempre che il valore si trovi prima in un intervallo valido.

    
risposta data 13.04.2014 - 10:02
fonte

Leggi altre domande sui tag