El Protocolo FLUTE

Anuncio
Capítulo 3
El Protocolo FLUTE
3.1.
Introducción
El protocolo FLUTE[46] (File Delivery over Unidirectional Transport, distribución de ficheros
sobre transporte unidireccional) permite la difusión de ficheros de forma masiva y escalable en
internet, especialmente en redes multicast. En FLUTE, un único transmisor envía ficheros a múltiples receptores admitiendo varias modalidades de emisión que se detallarán más adelante. FLUTE
contempla el uso de mecanismos de control de congestión, que se basan en la transmisión de datos
a distintas tasas binarias, para adecuarse en la medida de lo posible a la capacidad de recepción de
cada receptor. El protocolo FLUTE, como todos aquellos que ofrecen la posibilidad de transmisión
de datos de forma fiable en redes multicast, son catalogados como experimentales[43]. La razón de
esta clasificación se fundamenta en que la IETF todavía no ha adoptado un esquema de control
de congestión para protocolos multicast fiables. Aunque está principalmente pensado para redes
unidireccionales, en FLUTE es posible utilizar métodos de recuperación de archivos, en los que es
necesaria la comunicación entre los receptores y el emisor.
3.2.
ALC y LCT
FLUTE utiliza las funcionalidades ofrecidas por el protocolo ALC [45](Asynchronus Layered Coding, codificación asíncrona por capas) que a su vez es una implementación de LCT[44] (Layered
Coding Transport, transporte de codificación por capas). Estos protocolos proporcionan a FLUTE
el transporte de objetos binarios a través de IP y UDP. ALC implementa LCT mediante el uso de
FEC como mecanismo de recuperación de errores y un control de congestión basado en la transmisión de datos a múltiples tasas binarias. En el contexto del uso de FLUTE en IPDC sobre DVB-H
no es necesaria la utilización de mecanismos de control de congestión, ya que la transmisión de
los datos se produce sobre una red de difusión controlada. Con la utilización de FEC se consigue
que la recuperación de errores se realice sin necesidad de comunicación entre los receptores y el
emisor.
La transmisión de objetos binarios en ALC/LCT se realiza mediante canales y sesiones. Un canal
está definido por la dirección IP fuente, la dirección IP destino y puerto. Una sesión está compuesta
por uno o varios canales. La utilización de varios canales dentro de una misma sesión está justificada
en el ámbito del uso de protocolos de control de congestión en redes multicast. De esta forma cada
canal de una sesión puede enviar los mismos datos pero a distintas tasas binarias. El primer canal,
al que se le denomina canal base tendrá la tasa más pequeña, aumentando en los siguientes canales.
De este modo, si el ancho de banda es el suficiente el receptor puede recibir la información por el
canal de más alta capacidad, mientras que si existe congestión, se conecta al canal base. También
es posible distribuir distintos ficheros en cada canal, por lo que los receptores dependiendo de la
capacidad disponible, pueden descargar un menor o mayor número de ficheros.
15
16
3.2. ALC y LCT
Cada sesión se identifica con un TSI (Transport Session Identifier, identificador de sesión de
transporte) presente en las cabeceras de los paquetes ALC. En caso de que se transmitan varios
objetos en una misma sesión cada objeto se identifica mediante el campo TOI (Transport Object
Identifier, identificador de objeto de transporte) de la cabecera ALC. El TOI se compone de un
máximo de 3 bloques de 32 bits más un bloque de 16 bits. Por tanto, la longitud de un TOI
puede ser 0, 16, 48, 80 o 112 bits. La cabecera ALC es básicamente la misma que la de LCT pero
con un último campo que describe los datos del paquete codificados con FEC (FEC Payload ID,
identificador de carga FEC). La estructura de la cabecera ALC se muestra en la figura 3.1.
Figura 3.1: Estructura de un paquete ALC
La función de los distintos campos son los siguientes:
V (versión): número de versión de LCT.
C (bandera de control de congestión): determina la longitud del campo CCI.
S (bandera del identificador de sesión de transporte): indica el número de palabras de 32
bytes que tiene el campo TSI. La longitud en bits del TSI viene determinada por la fórmula
32∗S + 16∗H, siendo H el campo de bandera de media palabra.
O (bandera del identificador de objeto de transporte): es análogo al campo S pero aplicado
al TOI, siendo la longitud en bits del TOI 32∗O + 16∗H.
T (bandera de presencia del SCT): si está a 1 es que el campo SCT (Sender Current Time,
hora actual del emisor) se está utilizando.
R (bandera de presencia del ERT): su funcionalidad es análoga a la del campo T pero en
este caso hace referencia a la existencia del campo ERT (Expected Residual Time, tiempo
restante estimado) en vez de al SCT.
A (bandera de cierre de sesión) y B (bandera de cierre de objeto): si su valor es 1 indica que
no se recibirán más paquetes de la sesión actual y del objeto actual respectivamente.
HDR_LEN (longitud de la cabecera LCT): anuncia la longitud total de la cabecera LCT en
palabras de 32 bits.
CP (código de puntos): se utiliza para informar al receptor de parámetros que cambian
durante la sesión. En ALC un parámetro variable en el transcurso de una sesión puede ser la
codificación FEC. Por lo tanto en el código de puntos se podría transportar el identificador
de la codificación FEC. Cabe destacar que la correspondencia entre el contenido del campo
código de puntos y el identificador de codificación FEC o cualquier otro parámetro se realiza
externamente al protocolo ALC.
3. El Protocolo FLUTE
17
CCI (información de control de congestión): contiene información relevante del protocolo de
control de congestión como número de canales o de capas.
TSI (identificador de sesión de transporte): permite la identificación de una sesión entre
todas las pertenecientes a un determinado receptor.
TOI (identificador de objeto de transporte): identifica los paquetes que transportan datos
de un determinado objeto dentro de una sesión.
SCT (hora actual del emisor): indica la hora en la que el emisor ha enviado el paquete.
ERT (tiempo residual esperado): anuncia el tiempo estimado hasta el final de la sesión o de
la transmisión del objeto.
Extensiones de la cabecera LCT: se pueden ampliar el número de campos de los paquetes
LCT mediante la extensión de la cabecera. La presencia de campos que extiendan a los
estándares se infiere del campo HDR_LEN, que como se ha dicho anteriormente informa de
la longitud de la cabecara LCT en palabras de 32 bits.
Identificador de Carga FEC: este campo es propio de ALC. Identifica a los símbolos codificados que se transportan en la carga útil de los paquetes.
FLUTE a partir de las funcionalidades que le proporcionan ALC y LCT añade elementos que
permiten anunciar los archivos presentes en cada sesión con el proposito de que los receptores
elijan cuáles descargar. Para tal fin se transmite junto con los ficheros un documento XML llamado
FDT (File Delivery Table, tabla de distribución de ficheros).
3.3.
Instancias FDT
En el FDT se describen, además de las propiedades de los ficheros transmitidos, las características
de la transmisión FLUTE. El documento FDT se distribuye como un conjunto de instancias FDT,
que se transmiten con un TOI de valor 0 . Cada instancia FDT describe uno, varios o la totalidad de
los ficheros de los descritos en la FDT. Así pues, los receptores no necesitan conocer completamente
el contenido de una determinada sesión en un principio, ya que a medida que vayan interpretando
las instancias FDT que lleguen, obtendrán la información completa de la sesión. Las instancias
FDT se distinguen unas de otras a través de un identificador de instancia FDT, que se incorpora
al paquete LCT por medio de una extensión llamada EXT_FDT, tal y como se muestra en la
figura 3.2.
Figura 3.2: Paquete de datos de una instancia FDT
La estructura de la instancia FDT es la siguiente:
18
3.3. Instancias FDT
Elemento FDT-Instance: es el elemento raíz. Contiene el atributo Expire que indica el tiempo
en formato NTP en el que la instancia FDT ya deja de tener validez. También cuenta con
el atributo booleano Complete que indica si su valor es “true” que en siguientes instancias
FDT no se aportarán datos nuevos.
Elemento File representa las propiedades de un fichero difundo en una sesión FLUTE. Debe
contener obligatoriamente los atributos TOI y Content-Location. El atributo TOI contiene el
TOI de los paquetes que transportan el fichero y Content-Location contiene una URI (Unifom
Resource Identifier, identificador uniforme de recurso) válida que identifica al fichero. Además
de estos atributos obligatorios, pueden incluirse otros opcionales como:
• Content-Type: describe el contenido de los ficheros segun el formato MIME (Multipurpose Internet Mail Extensions, Extensiones de Correo de Internet Multiproposito).
• Content-Length: describe la longitud en bytes del fichero.
• Content-Encoding: contiene la codificación que se ha usado para comprimir el archivo,
en el caso de que se haya utilizado alguno.
• Content -MD5: se utiliza para que el receptor pueda comprobar la integridad del fichero.
• FEC Object Transmision Information: engloba un conjunto de atributos que describe
la codificación FEC de los archivos distribuidos. Mediante estos atributos es posible
difundir la información de la codificación FEC de los datos en las instancias FDT en
vez de en las cabeceras ALC. Estos atributos comienzan por FEC-OTI ( FEC Object
Transmision Information, información de transmisión de objectos FEC) e informan
del identificador de la codificación (FEC-OTI-FEC-Encoding-ID), del identificador de
instancia (FEC-OTI-FEC-Instance-ID), del tamaño máximo de los bloques originales (FEC-OTI-Maximum-Source-Block-Length), de la longitud de los símbolos codificados (FEC-OTI-Encoding-Symbol-Length) así como del número máximo de bloques
codificados(FEC-OTI-Max-Number-of-Encoding-Symbols).
El esquema XML de las instancias FDT puede extenderse con nuevos atributos ya sea en el
elemento FDT-Instance o en File. En IPDC se añaden los siguientes elementos:
Group: se utiliza para identificar objetos que deben descargarse de manera conjunta. Si
por ejemplo se transmite una página web en una sesión FLUTE, dentro de esta sesión se
enviará el archivo html y las imágenes que se pudieran referenciar. Todos estos elementos se
describirían en las instancias FDT como pertenecientes a un mismo grupo, de modo que en
el caso de descargar el código html, el receptor FLUTE sabrá qué objetos complementarios
tendrá que descargar. Este elemento está definido en el esquema de FDT definido para IPDC
[34].
FullFDT : es un atributo booleano que indica si todos los archivos transmitidos en la sesión
FLUTE están descritos en la instancia FDT. Este atributo (con valor true) asegura al lado
receptor que la instancia FDT que se recibe es una relación completa de los ficheros difundidos en la sesión. FullFDT es de gran utilidad para el descubrimiento de los servicios en
IPDC. Como se comentó en el capítulo referente a IPDC, los servicios disponibles en una
plataforma se describen en la ESG. La ESG se trocea y se encapsula en archivos llamados
contenedores que se distribuyen a los receptores mediante el protocolo FLUTE. Dado que cada contenedor puede contener referencias a otros contenedores generados de la misma ESG,
es fundamental para el receptor procesar la totalidad de los contenedores que componen la
ESG. Con FullFDT se consigue informar al receptor de que todos los archivos presentes en
la sesión en un determinado instante de tiempo están descritos en la instancia FDT, y por
ende, garantizar que no existen otros ficheros (y por tanto contenedores) difundidos en la
sesión y así poder formar una ESG coherente, es decir, sin referencias erróneas.
3. El Protocolo FLUTE
19
Version-ID-Length: informa al receptor de la longitud en bits que se utiliza del campo TOI
para especificar la versión de cada fichero ya que el TOI de LCT se puede utilizar para
identificar al objeto transportado a la vez que notificar nuevas versiones del mismo, utilizando
los bits más significativos para identificar al objeto y los menos significativos para informar
de la versión. Así pues si en el elemento File de una instancia FDT se encuentra un atributo
Version-ID de valor 16, 16 bits en el TOI se dedican a identificar el objeto y otros 16, los
menos significativos, a notificar la versión. Version-ID-Length se utiliza en el mecanismo
de actualización de la ESG conocido como “Split-TOI”. Este mecanismo utiliza los bits de
versión del fichero para informar de cambios en los contenedores (con el cambio del número
de versión). Tanto este atributo como FullFDT están definidos en una extensión específica
para el transporte de la ESG[36] dentro del esquema FDT en IPDC.
3.4.
Descarga de ficheros en FLUTE
Como ya se ha visto, FLUTE está diseñado para la difusión de ficheros a un gran número de
receptores. Las diferentes maneras en las que se puede realizar dicha difusión acarrea un comportamiento distinto en los receptores. Conviene recordar que en FLUTE los receptores en un
principio disponen sólo de la información necesaria para sintonizar la sesión (fundamentalmente
IP destino, IP origen y TSI) pero no tienen información de los archivos transportados. Es decir, el
receptor puede enfrentarse a una sesión que transporta siempre los mismos archivos, o que varían
con el tiempo, archivos de gran longitud o de unos pocos kilobytes. Así pues, los siguientes apartados se describirán los distintos tipos de sesiones FLUTE existentes y el proceso de estimación
de los ficheros transportados en cada sesión.
3.4.1.
Tipos de Sesiones en FLUTE
En FLUTE es posible llevar a cabo los siguientes tipos de sesiones:
Sesión estática: se distribuyen unos ficheros prefijados de antemano aunque de cada fichero
pueden distribuirse distintas versiones, nunca se distribuiran de forma simultánea.
Sesión de contenidos fijos: similar a la sesión estática, pero en el que las versiones de los
archivos enviados no pueden cambiar durante toda la sesión. Un ejemplo de este tipo de
sesiones puede verse en la figura 3.3.
Figura 3.3: Ejemplo de una sesión de contenidos fijos.
Sesión dinámica: en esta clase de sesiones los archivos transportados pueden variar en el
transcurso del tiempo.
Carrusel estático: se envían un conjunto fijo de ficheros en una sesión que puede llegar a ser
ilimitada en el tiempo. La figura 3.4 ilustra una este tipo de emisión en carrusel.
20
3.4. Descarga de ficheros en FLUTE
Figura 3.4: Ejemplo de un carrusel estático
Carrusel dinámico: es un carrusel en el que los archivos se eliminan, modifican o añaden en
el trascurso de la emisión.
A continuación se detallan las características específicas de FLUTE correspondientes a cada tipo
de sesión:
Sesión estática:
• De la totalidad de las instancias FDT emitidas durante la sesión al menos una debe
describir todos y cada uno de los ficheros distribuidos. La instancia FDT en cuestión
debe tener el atributo Complete a TRUE.
• Algunas instancias FDT pueden trasportar datos que no se incluían en las instancias
anteriores o que hayan cambiado (como el tamaño de los ficheros).
• Cualquier instancia FDT puede retransmitirse durante la sesión.
Sesión de contenidos fijos:
• Cada instancia FDT debe informar de todos los archivos que se transmiten en la sesión.
Por lo tanto el atributo Complete de cada una de ellas tiene el valor TRUE.
• Como en el caso anterior las intancias FDT pueden repetirse en el transcurso de la
sesión.
Sesión dinámica:
• En lo que respecta a FLUTE, las características de emisión son las mismas que en la
sesión estática.
Carrusel estático:
• Sus características son similares a las vistas en la sesión estática de contenidos fijos,
salvo en la duración de la sesión, mucho más larga en este caso.
Carrusel dinámico:
• Las instancias FDT se distribuyen de la misma forma que en las sesiones dinámicas.
3.4.2.
Estimación del Fin de la Sesión
Una vez descritos los tipos de sesiones FLUTE desde el punto de vista de la construcción y
emisión de las instancias FDT, es conveniente aclarar cómo se produce la recepción de ficheros en
estas distintas clases de sesiones. Para la recepción de cualquier fichero en FLUTE es necesaria la
creación de la relación de ficheros distribuidos en la sesión. Esta tarea que en un principio puede
3. El Protocolo FLUTE
21
resultar sencilla, dependiendo de las características de la sesión que se sintonice puede hacerse más
compleja, ya que no se tiene la plena seguridad de extraer una relación exacta de los ficheros que
se transportan.
En las sesiones de contenidos fijos es fácil determinar cuándo se tiene la información completa
acerca de los ficheros transportados en la sesión, dado que cada instancia FDT contiene la relación
definitiva de los ficheros enviados. En cambio en las sesiones estáticas los archivos pueden actualizarse y en las sesiones dinámicas además añadirse o eliminarse en cualquier momento durante la
sesión. Así pues, queda a criterio del receptor la consideración de una sesión como suficientemente
completa, exceptuando el caso en el que se reciban paquetes FLUTE con el campo A activado,
lo que anuncia el fin de la sesión. Se verán a continuación unos criterios definidos en el “DVB
Document A101”[30] para la suposición de una sesión como completa:
Una sesión de contenidos fijos se considera completa cuando se recibe una instancia FDT con
el atributo Complete a “true” y el terminal recibe correctamente todos los ficheros descritos
en la FDT. En caso de que no se reciban todos los ficheros, es necesario que se reciban
paquetes FLUTE con el campo B activado para considerar que no se recibirán más paquetes
de algún fichero.
Una sesión estática o un carrusel estático se consideran suficientemente completos cuando
se reciben una o varias instancias FDT con el atributo Complete activado y además se han
producido las descargas de las últimas versiones de los ficheros. Como en las sesiones de
contenidos fijos, si se reciben paquetes con la bandera B activada también se considera a la
sesión suficientemente completa.
En una sesión o un carrusel dinámico se utilizan algoritmos basados en temporizadores para
no permanecer indefinidamente escrutando los paquetes de la sesión. Estos temporizadores
marcan el tiempo máximo que se espera a la llegada de actualizaciones de la FDT así como
de paquetes con TOI no definidos en las instancias FDT recibidas.
22
3.4. Descarga de ficheros en FLUTE
Descargar