Estoy a punto de escribir un protocolo de mensaje sobre una transmisión TCP. El receptor necesita saber dónde están los límites del mensaje.Escribir un protocolo de flujo: ¿Campo de tamaño de mensaje o delimitador de mensaje?
Puedo enviar 1) mensajes de longitud fija, 2) campos de tamaño para que el receptor sepa qué tan grande es el mensaje, o 3) un terminador de mensaje único (supongo que no se puede usar en ningún otro lugar del mensaje) .
No utilizaré el n. ° 1 por razones de eficiencia.
Me gusta el n. ° 2 pero, ¿es posible que la transmisión se desincronice?
No me gusta la idea n. ° 3 porque significa que el receptor no puede conocer el tamaño del mensaje con anticipación y también requiere que el terminador no aparezca en ningún otro lugar del mensaje.
Con el n. ° 2, si es posible desconectarme, ¿puedo agregar un terminador o me garantizo que nunca se desincronizará siempre que el programa del remitente sea correcto en lo que envía? ¿Es necesario hacer # 2 Y # 3?
Háganme saber.
Gracias, JBU
_Además, conocer el tamaño del mensaje al principio de la transmisión facilitará la asignación de memoria en el extremo receptor._ Una palabra de cuidado: asegúrese de limitar la cantidad de memoria asignada. De lo contrario, usted es susceptible a ataques DDoS con paquetes personalizados que tienen un campo de tamaño de 2^32-1 (o por más grandes que sean sus enteros), llenando rápidamente su memoria. – Kenji