TCP framing

TCP framing

de Facundo Padula Lenna -
Número de respuestas: 2

Buenas,

según lo que leímos y hablamos en el monitoreo entendemos que TCP es un protocolo de streaming y por ende no tenemos garantía de que con un rcv se lea lo que enviamos con un send.
Para esto vimos que hay varias soluciones, entre las cuales están agregar una cantidad fija de bytes al principio de lo que mandamos que contenga el largo del frame que queremos enviar. De esta forma leemos esta cantidad fija y si el valor de esto es N, luego leemos los siguientes N bytes completando el primer frame y repetimos el procedimiento.
La otra alternativa que consideramos es usar delimitadores, tal como hablamos en el monitoreo. Entendemos que esto es más complejo porque implica leer "ciegamente" hasta encontrar el delimitador, además de la complicación de escapar los datos de forma de que no aparezca el delimitador.

En cuanto a la primera opción: sabemos que TCP asegura que los datos que lleguen, llegan en orden, por lo que siempre leeremos primero la cantidad de bytes de "información útil" del frame. Asumiendo que podamos obtener el tamaño en bytes del frame a enviar, ¿podríamos tener algún otro problema?

En cuanto a la segunda opción: ¿qué recomiendan usar como delimitador y secuencia de escape? ¿Tiene que ser antes o después de encodear el frame?

Por último, ¿podrían decirnos en qué caso debemos notar la diferencia entre asegurarnos de leer un frame por vez y leer todo lo que hayamos mandado? ¿La resolución del video afecta esto?

En respuesta a Facundo Padula Lenna

Re: TCP framing

de Jorge Visca -

Pueden encontrar más información sobre los dos métodos que mencionan buscando por "length prefixing" y "byte stuffing". Puede haber otros métodos.

En byte stuffing es común usar 0xFF y 0xFE como separador y escape. Otra opción popular es 0x00 y '\'. Cualquier cosa funciona.


En respuesta a Facundo Padula Lenna

Re: TCP framing

de Matias Richart -

Con respecto a tu última pregunta lo que te va a afectar es el comportamiento de la red. Por ejemplo, si hay pérdidas o retardo en la red.

Para emular esto podes usar la herramienta tc de Linux aunque te puede llevar un tiempo entender como usarla.

La opción mas simple es modificar tu código y agregar un retardo en el receptor para que comience a leer un tiempo después de iniciada la conexión. De esa manera te aseguras de que lleguen varios segmentos TCP antes de comenzar a leer.

Saludos