Está en la página 1de 8

MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 1

Estudio y evaluación de técnicas FEC para la


recuperación frente a errores
Rafael Ubal Tena

transmisión.
Resumen—En este trabajo se da una breve descripción de las El protocolo TCP soluciona las consecuencias de la pérdida
principales características de los mecanismos de corrección de de paquetes a través de retransmisiones de los mismos, lo cual
errores FEC (Forward Error Correction) y del protocolo de requiere un mecanismo de notificación de recepción: cuando el
transmisión de datos multimedia RTP (Real-time Transport
Protocol). Estos dos ámbitos se tratan por separado y en conjunto,
emisor no recibe reconocimientos en un cierto tiempo, reenvía
discutiendo la aplicación de técnicas FEC sobre RTP. Además, se los paquetes implicados. De nuevo, esta característica resulta
describe la implementación de un simulador que modela una red inviable en una transmisión de datos multimedia en tiempo
imperfecta (con errores de transmisión) sobre la que se evalúa la real, ya que el retardo adicional de una retransmisión
eficacia de las técnicas de corrección de errores, utilizando excedería muy probablemente las restricciones temporales
diferentes variantes de FEC y múltiples tasas de error. preestablecidas. En este sentido, las técnicas de inclusión de
redundancia son las que sustituyen a las retransmisiones. Las
técnicas FEC, descritas en la siguiente sección, son las más
I. INTRODUCCIÓN
ampliamente utilizadas para este propósito, hasta el punto de

L AS redes actuales que forman Internet son en su mayoría


redes IP. A pesar de que este protocolo de red ha gozado
de actualizaciones, la versión 4 del mismo es la que se emplea
que los estándares RFC incorporan la utilización de FEC sobre
RTP.
En cuanto a los medios de transmisión hacia los que está
más comúnmente, en la mayoría de casos por compatibilidad enfocado RTP, se puede afirmar que pueden ser de naturaleza
hacia atrás con recursos hardware y software. variopinta: desde redes de área local con una tasa de fallos,
Uno de los principales problemas de IPv4 en el ámbito de la retardos y jitter muy bajos, hasta redes de área amplia
transmisión de datos multimedia es su carencia de garantías en proclives a ocasionar pérdidas de paquetes y alta variabilidad
cuanto a calidad de servicio. Concretamente, existe un riesgo en su transmisión. Por ello, tanto el protocolo RTP como las
continuo de pérdida de paquetes, ocasionado principalmente técnicas de tolerancia a fallos aplicadas sobre él (FEC) deben
por la congestión de nodos enrutadores o por errores en la contemplar este hecho para actuar con eficacia.
transmisión debidos a fenómenos físicos. Además, este tipo de Todas estas circunstancias motivan el desarrollo del
redes no fueron diseñadas en sus orígenes como redes capaces presente trabajo, en el que se propone una pequeña
de entregar paquetes en tiempo real, lo cual es asimismo un herramienta para simular una red con una tasa de fallos
requisito de las transmisiones multimedia. parametrizable, sobre la cual se transmite un flujo de datos
Las limitaciones de los medios físicos y de los mecanismos RTSP utilizando tolerancia a fallos en forma de paquetes FEC
fijados durante la juventud de Internet se han paliado con el con un código de redundancia variable. Mediante esta
tiempo mediante el diseño de protocolos de más alto nivel que herramienta, se pretende obtener el código FEC idóneo, o lo
detecten y actúen frente a eventos de pérdida, desordenación o que es lo mismo, la cantidad de información redundante
corrupción de datos, siendo el protocolo de transporte TCP el apropiada, para redes de diferente naturaleza y, por tanto, con
más ampliamente utilizado. Sin embargo, el requisito del diferentes tasas de error.
tiempo real impide la utilización de protocolos altamente El resto de este trabajo sigue la siguiente estructura. La
interactivos, como TCP, cuya sobrecarga haría inviable una sección II describe brevemente los protocolos FEC y RTP. La
recepción de paquetes sobre los que se imponga una cota sección III presenta la herramienta construida y la metodología
superior en cuanto al tiempo de transmisión. de simulación. Por último, la sección IV incluye unas notas
Por esta razón surge el protocolo RTP (con sus hermanos concluyentes a este trabajo.
RTCP y RTSP), comentados en la siguiente sección. Ya que
no es posible exigir a protocolos inferiores una cierta calidad
de servicio, la filosofía de RTP consiste en monitorizar de II. ESTÁNDARES Y PROTOCOLOS
forma continua las características de las redes sobre las que se
trabaja y variar los parámetros de transmisión adaptándose A. Forward Error Correction (FEC)
dinámicamente a la situación del medio y dispositivos de Forward Error Correction es un sistema de corrección de
errores para transmisiones de datos en el que el emisor añade
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 2

datos redundantes que permiten al receptor detectar y corregir codificadores algebraicos como convolucionales. Sin embargo,
errores sin la necesidad de solicitar de nuevo los datos. La en cualquier caso, la codificación global se procesa en
principal ventaja de este mecanismo reside en la elusión de bloques, cuyo tamaño viene dictado por un codificador
retransmisiones, a costa de incrementar el volumen de datos intermediario (interleaver), que separa a cada uno de los
enviados (y por tanto el ancho de banda necesario). componentes.
Las técnicas FEC son una alternativa a la corrección de Los bits de información son codificados por el primer
errores en medios donde la retransmisión es demasiado componente codificador directamente, mientras que el segundo
costosa, como por ejemplo aplicaciones en tiempo real, o componente codificador opera con una versión desordenada de
imposible, como soportes físicos de almacenamiento (CD, ellos. Con ello producimos los bits de paridad del primer y el
memorias FLASH, etc). segundo codificador. La señal a enviar por el canal estará
El volumen de información redundante y su disposición formada por los bits sistemáticos que coinciden con los de
determina el código FEC, que puede variar según las información y los bits de paridad de ambos componentes
condiciones del medio de transmisión. Asimismo, el código codificadores.
FEC determina el número máximo de errores que se pueden En recepción, la turbo decodificación iterativa está formada
corregir. por dos componentes decodificadores convolucionales en
paralelo que decodifican los bits recibidos por su
1) Evolución de técnicas FEC correspondiente componente codificador. El primer
La primera técnica FEC que se publicó [1] utilizaba componente decodificador produce además cierta información
codificación algebraica. En este caso, el codificador interpone no relacionada con los bits de entrada, que permite al segundo
bits de paridad entre la secuencia de datos utilizando un componente decodificar los mismos bits recibidos con una tasa
algoritmo algebraico determinado. de error menor. El proceso se reitera hasta que se obtiene la
Una técnica FEC posterior fue la conocida como tasa de error deseada, teniendo en cuenta que por cada
codificación convolucional [2], que trabaja sobre flujos de iteración se aumenta el grado de complejidad del turbo
datos, en lugar de hacerlo sobre bloques. La principal decodificador convolucional.
característica de estos códigos FEC es que la codificación de El método de la turbo codificación ha pasado a formar parte
una secuencia de bits está altamente influenciada por bits de estándares, como UTRA (UMTS Terrestrial Radio Access),
anteriores, por lo que el algoritmo de decodificación los tiene debido a su gran potencia de recuperación de errores en
en cuenta para estimar la secuencia más probable de bits comunicaciones.
correctos a la hora de recomponer la secuencia original.
Originalmente, la decodificación convolucional tenía el
B. Real-Time Transport Protocol (RTP)
inconveniente de ser espacialmente costosa, y generalmente
ocasionaba desbordamiento de buffers en implementaciones El protocolo RTP define un formato estándar de paquetes
deficientes. para transmitir audio y vídeo en Internet. Fue publicado
Más tarde, A. Viterbi desarrolló una técnica de originalmente en el RFC 1889 y, más tarde, en el RFC 3550
decodificación convolucional [3] que supuso a partir de [5], dejando obsoleta la primera versión. El estándar define el
entonces el estándar de decodificación FEC. Este algoritmo uso de RTP bien con conexiones TCP en un puerto arbitrario,
compara los bits recibidos con los bits que podrían haberse o bien con conexiones UDP en puertos pares. En este último
generado para cada posible transición desde estados previos caso, el siguiente puerto impar se utiliza para comunicaciones
del decodificador. Basado en métricas de similitud, se escoge de control con RTCP (RTP Control Protocol).
la secuencia más cercana a que podría ser la original, la cual se Inicialmente, RTP se diseñó como un protocolo multicast,
devuelve como flujo de bits decodificado. El algoritmo de pero ha acabado utilizándose en muchas aplicaciones unicast,
Viterbi, basado en programación dinámica, tiene la ventaja de principalmente en streaming de audio/vídeo (junto con el
hacer un uso eficiente de la memoria utilizada, desechando protocolo RTSP) y videoconferencias. Las aplicaciones que
flujos de bits anteriores que tienen poca probabilidad de ser utilizan RTP son poco sensibles a la pérdida de paquetes, pero
reutilizados. sí lo son a los retardos de la comunicación, por lo que la
implementación de RTP sobre el protocolo de transporte UDP
2) Turbo-Coding es una opción más sensata que sobre TCP.
En 1993, C. Berrou desarrolló la técnica FEC más potente Los paquetes RTP dan información sobre el tipo de
hasta el momento, llamada turbo-coding [4]. Con esta técnica, contenido multimedia que se está transmitiendo, números de
los sistemas de comunicación pueden alcanzar el límite secuencia de paquetes, marca de tiempo real que representa el
máximo teórico de la capacidad de los canales, caracterizada instante de presentación de los datos (time-stamping) y
anteriormente por Shannon, y considerada inalcanzable monitorización de entrega.
durante mucho tiempo. En sí mismo, el protocolo RTP no garantiza calidad de
Una de las características de tubo-coding es que el servicio, entrega de paquetes a tiempo u ordenación de
codificador debe incluir combinaciones de, como mínimo, dos paquetes a la llegada. Sin embargo, el protocolo asociado
codificadores FEC. Entre ellos se pueden encontrar tanto RTCP da información de la calidad de recepción, con lo que la
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 3

tasa de transmisión de datos puede ajustarse a los parámetros servidor, utilizando órdenes similares al VCR (play, pause…).
de la red monitorizada. También soporta el acceso basado en tiempo a los ficheros
A continuación se pasa a describir brevemente los multimedia del servidor.
protocolos RTCP y RTSP, ambos estrechamente ligados a Las órdenes RTSP tienen una sintaxis similar a HTTP, con
RTP: la principal diferencia de que el servidor RTSP mantiene
información de sesión. Para ello, existe un mecanismo de
1) Real Time Control Protocol (RTCP) asignación de identificadores de sesión, que permite cerrar y
El protocolo RTCP [5] está ligado a cualquier conexión abrir conexiones conservando información entre ellas, incluso
RTP, y da información sobre la utilización de la red por la que eludiendo el protocolo TCP. Las órdenes principales de RTSP
se transmiten los datos multimedia. Los paquetes RTCP no son las siguientes:
transportan datos en sí mismos, sino que se envían • DESCRIBE: Una petición de este tipo incluye una URL
periódicamente a todos los participantes de una sesión de (rtp://…) y obtiene como respuesta la descripción del
streaming multimedia, de forma que todos obtengan pistas contenido asociado.
sobre la calidad del servicio que la red está proporcionando a • SETUP: Especifica cómo se transportarán los datos que
sus demandas. se enviarán. Para ello, se incluye típicamente el puerto
RTCP recoge estadísticas de una conexión multimedia, tales local de recepción RTP y metainfomación RTCP. La
como el número de bytes enviados, paquetes perdidos, jitter respuesta del servidor confirma los parámetros y añade
(variación del retardo), etc. Las aplicaciones de envío pueden otros, como el puerto RTP del servidor.
hacer uso de esta información ajustando la calidad de los datos • PLAY: Comienza la reproducción del medio
enviados, bien cambiando la resolución de las imágenes o la especificado. Esta orden puede desencadenar la
tasa de bits del audio, o bien ajustando los parámetros de transmisión de uno o más flujos multimedia.
compresión del codificador. • PAUSE: Para temporalmente la reproducción,
reanudándola con la orden PLAY siguiente.
2) Real Time Streaming Protocol (RTSP) • RECORD: Utilizada para enviar un flujo al servidor, de
El protocolo RTSP, publicado en el RFC 2326 [6], se utiliza forma que éste lo almacene.
asimismo generalmente junto con RTP, y permite que los • TEARDOWN: Terminación de la sesión actual. Para todos
clientes controlen el flujo de datos multimedia generado por el los flujos asociados a esta sesión y libera los datos de la

Figura 1: Captura del tráfico RTSP con Ethereal


MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 4

sesión en el servidor. que permite evaluar la eficacia de las técnicas FEC a la hora
de corregir errores sobre un flujo de datos RTSP real. Con este
objetivo, se ha seguido la siguiente metodología:
C. FEC sobre RTP
El RFC 2733 [7] propone la aplicación de técnicas FEC • En primer lugar, se ha capturado tráfico RTSP real.
sobre el protocolo RTP. Este protocolo está destinado a Para ello, se ha descargado el software libre
funcionar sobre cualquier tipo de redes IP, incluyendo las QuickTime, reproductor de vídeo de Apple, y se ha
redes de área amplia (WAN). Es en estas redes donde existe introducido la siguiente URL, que hace referencia a un
un gran riesgo de pérdida de paquetes, debido principalmente flujo de datos RTSP: rtsp://stsv01.st.ehu.es/MSR.mov
a posibles congestiones de notos intermedios. Por otra parte, la
• A continuación, hemos descargado el software, también
transmisión de datos multimedia (por ejemplo, voz) tiene
libre, Ethereal, una aplicación que permite capturar,
restricciones temporales que no permiten solicitud de
analizar y clasificar el tráfico que atraviesa la tarjeta de
retransmisión en caso de pérdidas.
red local. Con Ethereal, seleccionamos el tráfico RTSP
RTP es, por tanto, un protocolo muy susceptible de
entrante, correspondiente al vídeo recibido con
incorporar técnicas FEC, que añaden redundancia al flujo de
QuickTime, y lo volcamos en un fichero.
datos enviado, compensando así la imposibilidad de aplicar el
• Este fichero sirve como entrada a la herramienta
mecanismo de reenvíos.
construida, que simula tres elementos principales: i) un
La aplicación de FEC sobre RTP consiste en escoger un
emisor de datos con capacidad de incluir redundancia
conjunto de paquetes RTP y combinarlos utilizando la
FEC, ii) una red imperfecta que introduce errores de
operación xor. Para ello, se deben extender los datos de los
transmisión y iii) un receptor capaz de reconstruir los
paquetes RTP originales de forma que alcancen una longitud
paquetes recibidos, siempre que la información FEC lo
igual a la del paquete más largos. Las cabeceras de los
permita.
paquetes RTP se combinan de forma selectiva, aunque también
utilizando la operación xor. Este proceso queda detallado en la
El objetivo de este estudio es analizar varios códigos FEC
sección 6 del RFC.
actuando sobre datos RTSP que se transmiten sobre una red
El estándar deja la libertad de escoger un código FEC libre
cuya tasa de fallos puede especificarse en cada experimento.
según la implementación. Se llama código a las combinaciones
Variando la redundancia FEC y la frecuencia con que ocurren
específicas de paquetes RTP que se utilizan para construir la
los errores en el medio de transmisión, mediremos el grado de
secuencia de paquetes FEC. El código FEC puede variar
pérdida de datos en forma de bytes erróneos y paquetes
incluso dinámicamente, adaptándose a características variables
erróneos.
del medio de transmisión. Para la especificar qué paquetes
A continuación, se detalla este proceso y se describe la
RTP están asociados a un paquete FEC, este último incorpora
herramienta desarrollada, así como los resultados obtenidos a
una cabecera de 24 bits, de los cuales, el bit i indica que el
partir de ella.
paquete RTP con número de secuencia N+i se utilizó en la
operación xor, siendo N el número de secuencia del propio
paquete FEC. A. Captura de tráfico RTSP
En este RFC, se propone enviar el flujo de paquetes FEC de Para generar tráfico RTSP entrante, escogemos una URL
forma independiente respecto al flujo RTP original, con la aleatoria, obtenida en Google, y la introducimos en
ventaja de que los usuarios que no implementen FEC sean QuickTime. Por otra parte, iniciamos una captura de tráfico
capaces de ignorar la información redundante y conservar la con Ethereal, como se muestra en la Figura 1.
original. Sin embargo, el flujo de datos original puede Adicionalmente, Ethereal permite filtrar el tráfico
reconstruirse únicamente a partir de paquetes FEC, evitando el capturado. Al encontrarnos en una máquina con más
envío de los paquetes RTP, pero obligando al receptor a aplicaciones abiertas que comparten tarjeta de red, e incluso
implementar este estándar. una misma aplicación generando diferentes tipos de tráfico,
Las diferentes secciones del RFC 2733 enumeran la debemos seleccionar únicamente el tráfico RTSP. Esta acción
nomenclatura utilizada a lo largo de la especificación, se consigue introduciendo en el campo Filter la siguiente
describen la metodología de incorporación de redundancia, cadena:
incorporan una serie de ejemplos de códigos FEC y fijan el ip dst eq 192.168.123.100 and rtsp
formato de los paquetes FEC. Adicionalmente, las secciones 9 De esta forma, indicamos que sólo queremos visualizar
y 10 añaden un posible algoritmo a implementar en el receptor tráfico que tenga como IP destino la de nuestra máquina, y que
(incluyendo el código en C) y dan un ejemplo de sesión RTP además sea tráfico RTSP. El resultado de la aplicación del
en el que se aplica el protocolo especificado en sus secciones filtro lo almacenamos en un nuevo fichero, de nombre
anteriores. stream.cap.
Una vez disponemos del flujo de datos sobre el que
III. ENTORNO EXPERIMENTAL experimentar con técnicas FEC, debemos volcarlo en un
fichero cuyo formato sea analizable por nuestra aplicación.
Para este trabajo, se ha perfilado un entorno experimental
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 5

genera otros que a su vez pueden servir como entrada de un


Nombre Tamaño Descripción
(bytes) nuevo proceso. Concretamente, los programas desarrollados y
su forma de operar es la siguiente:
fec 1 0 si el paquete es RTSP y 1 si
es FEC
error 1 1 si el paquete contiene error, 0 • buildstream.py: Éste es un script en Python que
si no transforma la salida de Ethereal, en forma de vectores
seq 2 Número de secuencia del C, en un fichero FecRtsp. Se utiliza para convertir el
paquete (0 para FEC) fichero stream.c en stream.sender.
length 2 Tamaño del paquete • stream.py send: El programa stream.py, con la
feclength* 1 Número de paquetes RTSP a opción send, lee un fichero que contenga una captura
partir de los que se construyó de paquetes RTSP y añade redundancia FEC, utilizando
un paquete FEC un código FEC determinado. Además se introducen
fecseq0* 2 Número de secuencia de errores aleatoriamente, simulando el envío de paquetes
fecseq1* 2 paquetes RTSP a partir de los por una red. Se utiliza para convertir stream.sender en
... ... que se construyó un paquete stream.network, todos ellos en formato FecRtsp.
fecseqfeclength-1* 2 FEC • stream.py recv: Con esta opción, se simula la
data length Datos del paquete recepción de paquetes en el extremo opuesto de la
*Estos campos sólo se encuentran cuando fec es igual a 1. conexión RTSP. El receptor intenta reconstruir los
paquetes RTSP originales a partir de la información
Tabla 1: Formato de los ficheros FecRtsp
FEC introducida. Se utiliza para convertir
stream.network en stream.recv.
Ethereal tiene una opción descrita como Follow TCP Stream,
mostrada al pulsar con el botón derecho sobre la lista de • stream.py comp: Por último, esta opción permite
paquetes. Con esta opción, podemos eliminar la información comparar dos archivos FecRtsp, obteniendo estadísticas
de control introducida por el nivel físico, el nivel de red y el sobre el número de bytes y el número de paquetes
protocolo TCP, obteniendo un simple flujo de datos perdidos y no reconstruidos. Se utiliza para comparar
stream.sender con stream.recv.
correspondiente al flujo RTSP.
Además, el cuadro de diálogo resultante ofrece la opción de
representar el contenido de la información en diferentes
formatos, entre los cuales escogemos el de C Arrays. Con este
formato, los datos se representan en forma de vectores con la
sintaxis del lenguaje C, estando cada vector formado por los
bytes de un solo paquete. Esto resulta idóneo para nuestros
objetivos, puesto que no sólo obtenemos una representación en
texto plano de los datos analizable mediante scripts, sino que
además quedan delimitados los bytes correspondientes a
diferentes paquetes, lo cual es una información que habríamos
perdido eliminando las cabeceras TCP.
Los vectores C los almacenamos en un fichero, stream.c,
que servirá como referencia para los programas construidos.
Sin embargo, requieren una conversión al formato de fichero,
esta vez binario, que se utilizará a lo largo de los
experimentos. Este formato, así como el proceso de
conversión, se describe a continuación.

B. Formato de ficheros internos


Los ficheros manejados internamente siguen un formato
específico, denominado formato FecRtsp en lo sucesivo. Los
ficheros FecRtsp representan una secuencia de paquetes FEC o
RTSP. La siguiente tabla muestra el formato empleado, a su
vez, para cada uno de los paquetes de dicha secuencia:

Encadenando estructuras de datos con este formato, cada


uno de los programas utilizados lee ficheros, los procesa, y
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 6

Figura 2: Porcentaje de bytes perdidos

El script de Python se basa en la clase Packet, que modela


A continuación, se describen con detalle los procesos de un paquete RTSP o FEC. Sus métodos principales son read y
incorporación de redundancia, inyección de errores de write, utilizados respectivamente para leer y escribir un
transmisión y recomposición de paquetes, todos ellos paquete en un archivo FecRtsp.
localizados en el programa stream.py. El proceso a seguir en el envío se basa en leer paquetes del
archivo de origen y escribirlos en el fichero destino,
incluyendo paquetes FEC según el código especificado. Para
C. Envío del flujo RTSP (stream.py send)
crear un paquete FEC a partir de dos o más paquetes RTSP, se
La parte del script stream.py dedicada a la simulación del utiliza la función Packet.buildfec. Asimismo, para escribir
envío del flujo RTSP pretende generar un fichero FecRtsp un paquete en el archivo destino, se utiliza la función
conteniendo una serie de paquetes RTSP y FEC con una serie Packet.WriteWithError, una extensión de Packet.write que
de errores forzados. El código FEC y la tasa de errores de la inyecta errores según la tasa de error especificada. Los errores
red vienen especificados en la línea de órdenes, durante la se inyectan tanto en los paquetes RTSP como en los paquetes
llamada al script. FEC.
Los códigos FEC implementados se corresponden con La función Packet.buildfec recibe una lista de paquetes
diferentes grados de redundancia. Suponiendo que los RTSP, y convierte el paquete actual en un paquete FEC
paquetes a, b, c... son los que forman el flujo RTSP y que generado a partir de los paquetes de dicha lista. La longitud
f(x,y...) es la función de construcción de paquetes FEC, los del paquete FEC será la máxima de todos los paquetes RTSP.
códigos implementados se pueden representar así: Para generar los datos, se rellenan primero con 0 todos los
paquetes hasta que tengan la misma longitud, y, a
• Código 0; 0% de redundancia: a b c d ... continuación, se realiza la operación xor sobre todos ellos.
• Código 1; 50% de redundancia: a b f(a,b) c d Disponiendo de la lista de paquetes RTSP y del paquete FEC
f(c,d) ... resultante, cualquiera de ellos puede reconstruirse a partir del
• Código 2; 75% de redundancia: a b c f(a,b,c) d resto, realizando el mismo proceso.
f(a,c,d) f(a,b,d) d ... La función Packet.WriteWithError escribe un paquete en
• Código 3; 100% de redundancia: a b f(a,b) c el fichero introduciendo errores en los bytes que corresponda.
f(b,c) d f(c,d) ... Para ello, se mantiene un contador que indica el número de
bytes restantes hasta que se produzca un error. Cada byte
Por otra parte, el parámetro que especifica la tasa de íntegro que se escribe en el fichero de salida provoca una
inyección de errores es la inversa del tiempo medio que disminución del contador. Cuando éste llega a 0, el siguiente
transcurrirá entre un error y el siguiente. El programa genera byte contendrá un error y el contador toma un valor aleatorio
números aleatorios con distribución exponencial para calcular con distribución exponencial y con la inversa de la tasa de
el número de bytes íntegros antes de que ocurra un nuevo error como media.
error. Las tasas de error analizadas varían entre 10-5 y 10-2.
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 7

Figura 3: Porcentaje de paquetes perdidos

recibidos, el número total de paquetes del flujo original y el


número de paquetes erróneos recibidos, respectivamente.
D. Recepción del flujo RTSP (stream.py recv)
El proceso de recepción de los datos consiste en almacenar
en un buffer los diez últimos paquetes recibidos (permitiendo F. Resultados
códigos FEC que actúen hasta sobre diez paquetes). Cuando se A continuación se presentan una serie de resultados (Figuras
recibe un paquete RTSP o FEC erróneo, éste se descarta. En 2 y 3) obtenidos tras la puesta en marcha del script de
las simulaciones, la existencia de error viene determinada por simulación desarrollado. Para generarlos, se ha experimentado
el campo error del formato FecRtsp, aunque en la realidad, con varias tasas de inyección de errores, intentando representar
esta condición se determinaría haciendo una comprobación del redes más fiables (como redes Ethernet locales) o redes menos
checksum en un nivel inferior del protocolo TCP/IP. fiables (como redes de área amplia o redes inalámbricas).
Cuando se recibe un paquete FEC, se comprueba si hubo Concretamente, se ha variado la tasa de error desde 10-5 (un
algún paquete RTSP erróneo, almacenado en el buffer, que sea error cada 105 bytes transferidos, con distribución
posible reconstruir a partir de aquél. En tal caso, una llamada a exponencial) hasta 10-2 (un error cada 100 bytes).
la función reconstruct se encarga de esta tarea. Esta función Por otro lado, para cada tasa de error se ha experimentado
se aplica sobre el paquete FEC recibido, y tiene como con diferentes códigos FEC, representados desde el código 0
argumentos una lista de paquetes entre los cuales se podrían (0% de redundancia) hasta el código 3 (100% de redundancia),
encontrar los paquetes RTSP erróneos. descritos anteriormente. Las dos variables monitorizadas y
representadas en estas gráficas son el porcentaje de bytes
perdidos y el porcentaje de paquetes perdidos.
E. Comparación de los flujos RTSP (stream.py comp)
La última utilidad del script creado es la de comparar los 1) Porcentaje de bytes perdidos:
flujos de datos generados por el emisor y los obtenidos por el Observando la primera de las gráficas de la Figura 1,
receptor tras el proceso de recomposición con técnicas FEC. podemos ver que para una tasa de error de 10-5, el código FEC
Introduciendo como parámetros los ficheros que representan 1 (redundancia del 25%) ya consigue recuperar la totalidad de
ambos flujos de datos, el programa muestra estadísticas que los errores inducidos por la red, llegando a un 0% de bytes
permiten analizar la eficiencia de las técnicas FEC en cuanto a perdidos.
paquetes y bytes reconstruidos. Para ello, el programa extrae Para las tasas de error de 10-4 y 10-3, observamos una caída
en la salida estándar una lista de cuatro valores de esta forma: del porcentaje de bytes perdidos conforme aumentamos la
redundancia FEC. Es importante recordar que los errores
totalbytes errbytes totalpackets errpackets
introducidos en la red afectan tanto a paquetes originales como
Estos valores representan el tamaño en bytes del flujo a paquetes FEC. Sin embargo, cuanta más redundancia FEC se
original (sin la redundancia FEC), el número de bytes erróneos introduzca, existe mayor probabilidad de encontrar un paquete
MÁSTER EN INGENIERÍA DE COMPUTADORES – TRANSMISIÓN DE DATOS MULTIMEDIA 8

RTSP/FEC no afectado por ningún error que permita 100%) para paliar completamente el problema. Sin embargo,
reconstruir un determinado paquete RTSP original. un aumento de redundancia se traduce en una disminución
La tasa de error de 10-2 es muy agresiva, ya que provoca una agresiva del número de errores observados por el receptor.
alta probabilidad de que incluso caigan varios errores en un Para tasas de error de 10-3, redundancias razonables
mismo paquete. En este caso, la redundancia FEC no obtiene simplemente reducen suavemente el total de errores
prácticamente ningún beneficio, puesto que en todos los casos percibidos, mientras que una tasa de 10-2 se traduce en una
se obtiene prácticamente un 1% de bytes perdidos (igual a la transmisión irreparable mediante FEC.
tasa de error). Como trabajo futuro, se puede proponer la extensión de la
herramienta diseñada para modelar los retardos de los
2) Porcentaje de paquetes perdidos: paquetes, así como el jitter dependiente de los diferentes tipos
En la primera de las cuatro gráficas de la Figura 3, podemos de redes. Con estas ampliaciones podría evaluarse la forma en
realizar la misma observación que en la monitorización del que afectan las citadas variables a un flujo de datos
porcentaje de bytes perdidos: para tasas de errores pequeñas, multimedia, como por ejemplo, la medida en que un jitter
el código FEC 1 ya soluciona todos los problemas de determinado afecta al retardo mínimo que deben sufrir los
transmisión. paquetes (y por tanto el tamaño de los buffers en el receptor)
La red con tasa de fallos de 10-3 es la que muestra más dependiendo también del tamaño de los paquetes. En este y
beneficios con un aumento de la redundancia FEC. otros estudios, la captura de los datos multimedia realizada
Observando la gráfica correspondiente, podemos ver que, si no mediante Ethereal podría ser reutilizable.
se introdujera ninguna técnica de recuperación de errores, los
paquetes perdidos ascenderían al 42%. Sin embargo, una
redundancia FEC del 100% es capaz de disminuir el REFERENCIAS
porcentaje de paquetes perdidos al 17%.
Por último, la última de las cuatro gráficas no aporta [1] C. E. Shannon. “A Mathematical Theory of Communication”. The Bell
información adicional respecto a las cuatro anteriores. De ella System Technical Journal, Vol. 27, pp. 379–423, 623–656, July,
se desprende de nuevo que una tasa de errores de 10-2 es October, 1948.
[2] P. Elias, “Coding for noisy channels”, IRE Convention Record, pt.4,
demasiado alta como para compensarla con técnicas FEC. pp.37-47, 1955
[3] Andrew J. Viterbi. Error bounds for convolutional codes and an
3) Conclusión asymptotically optimum decoding algorithm. IEEE Transactions on
Information Theory 13(2):260–269, April 1967.
De entre las dos métricas utilizadas, la segunda de ellas [4] Berrou C., Glavieux A., and Thitimajshima P. (1993). “Near Shannon
(porcentaje de paquetes perdidos) es la que tiene sentido en limit error-correcting coding and decoding: Turbo-Codes,” ICC’93,
una transmisión de datos convencionales, por ejemplo Geneva, Switzerland, pp. 1064-1070, May.
[5] RFC 1889 and 3550 - RTP: A Transport Protocol for Real-Time
ficheros. En este caso, un paquete erróneo deja de superar la Applications.
prueba del checksum y es descartado por el propio protocolo [6] RFC 2326 - Real Time Streaming Protocol (RTSP).
TCP/IP. [7] RFC 2733 - An RTP Payload Format for Generic Forward Error
Sin embargo, en una transmisión de datos multimedia, Correction.

podría resultar de utilidad la primera métrica (porcentaje de


bytes perdidos), ya que un paquete erróneo, e imposible de
recuperar, puede continuar conteniendo información válida
para el receptor. Esto podría darse, por ejemplo, en una
transmisión de vídeo, en la que un byte erróneo puede suponer
un píxel erróneo en la imagen final. En tal caso, tiene más
sentido obtener el paquete e interpretarlo erróneamente que
descartarlo a priori.

IV. CONCLUSIONES
En este trabajo, se ha construido una herramienta de
simulación de redes con diferentes tasas de errores y se ha
estudiado la influencia que tiene la aplicación de diferentes
códigos FEC sobre cada una de ellas.
Los resultados han demostrado que, para redes con una tasa
de errores de 10-5, un código FEC de baja redundancia
soluciona los errores de transmisión en su totalidad. Como
término medio, redes con tasa de error de 10-4 necesitan
aumentar en gran medida la redundancia (incluso superando el

También podría gustarte