Datagram format

De Departamento de Informatica
Saltar a: navegación, buscar

Contenido

Motivación

Dentro de las múltiples capas que poseen las redes de computadores, existe una llamada capa de red de Internet la cual esta encargada del traspaso de paquetes de capa de red desde un host a otro. Estos paquetes son llamados datagrams (datagramas) y serán el objeto de estudio de este artículo

¿Qué es un datagram?

(1) Encapsulado general de un datagram

Un datagram es un paquete creado a través del encapsulamiento de un segment (segmento) y una nueva cabecera, la cual contiene información adicional tal como el origen y dirección final de destino. Una vez terminado el encapsulamiento el datagram sera traspasado a la siguiente capa, la cual corresponde a ser la capa de enlace. La imagen (1) muestra la representación general de un datagram.

Datagram format

Se a mencionado anteriormente lo qué es un datagram y para que es utilizado, ahora corresponde definir las partes generales de un datagram:

  • El mensaje (M en (1)), o parte del mismo, a ser enviado desde la capa de aplicación .
  • Una cabecera con la información de la capa de transporte (Ht en (1)) que en conjunto con el mensaje forma un segment.
  • Una cabecera con la información de la capa de red (Hn en (1)) que en conjunto con el segment forma un datagram.

Las cabeceras

Las cabeceras (headers) estan conformadas por campos (fields) que pueden variar en cantidad o tamaño dependiendo del protocolo que se este utilizando y con el cual se construye el datagram. El siguiente cuadro ilustra un IPv4 datagram:

bit offset 0–3 4–7 8–15 16–18 19–31
0 Versión Largo de cabecera Tipo de servicio Largo del datagram (bytes)
32 Identificador Flags Offset de fragmentación
64 Tiempo de vida Protocolo de la capa superior Checksum de la cabezera
96 Dirección IP de origen
128 Dirección IP de destino
160 Opciones (Si es que hay alguna)
160
or
192+
 
Datos
 

Es importante volver a recalcar que el cuadro anterior varía dependiendo del protocolo. Otro punto a considerar es el tamaño máximo soportado por el medio de transporte del datagram, es por esto que es común separar o fragmentar un datagram en varios para posibilitar su envió.

Fragmentación

Debido a que los enlaces (links) poseen una capacidad máxima de transmisión (maximum transmission unit o MTU) se debe realizar una fragmentación de los datagrams de manera que posean un tamaño menor que el MTU.

Cada protocolo posee especificaciones propias de como debe ser realizada la fragmentación, similar a las cabeceras, es por esto que se debe revisar las especificaciones caso a caso. Un ejemplo utilizando el protocolo IPv4 seria el siguiente:

 Se tiene un datagram de 8000 bytes (IP header de 20 bytes y un IP payload de 7980 bytes)
 el cual debe ser enviado por un enlace con un MTU de 1500 bytes, 
 ¿Cuantos Fragmentos son necesarios y cuál es su offset? 

La siguiente tabla muestra el resultado de la operación:

Fragmento ID MTU (bytes) IP header (bytes) IP payload (bytes) Flag offset del fragmento (bytes)
1 123 1500 20 1480 1 0
2 123 1500 20 1480 1 185
3 123 1500 20 1480 1 370
4 123 1500 20 1480 1 555
5 123 1500 20 1480 1 740
6 123 1500 20 580 0 925
  • IP payload es el peso del datagram sin el IP header.
  • El número de fragmentos puede ser encontrado con \lceil IPpayloadTotal/(MTU - IPheader) \rceil, donde (MTU - IPheader) corresponde al máximo valor de IP payload de cada fragmento.
  • El offset de cada fragmento corresponde a ser a (offsetFragmentoAnterior + (IPpayloadFragmentoAnterior/8))
  • La suma de los IP payload de todos los fragmentos corresponde al IP payload total.
  • El flag de todos los fragmentos, a excepción del último, tienen valor igual a 1 ya que no son el fragmento final (solo el fragmento final tiene valor igual a 0).

El ejemplo anterior considera un MTU constante, pero eventualmente podría variar durante la transmisión, por lo mismo máximo IP payload podría cambiar entre los distintos fragmentos, modificando la cantidad de fragmentos necesarios para realizar el envió.

Debido a que un datagram puede ser separado en fragmentos, se debe tener en consideración su ensamblado cuando se termine de transmitir al receptor.

Ensamblado

Es útil el poder separar un datagram en fragmentos para poder ser enviados, pero al receptor del datagram no le sirven los fragmentos si es que no pueden ser ensamblados, es por esto que los protocolos también deben definir una forma de ensamblar un datagram que fue separado en fragmentos. Siguiendo con el ejemplo de la sección anterior, el receptor tiene dos formas de saber que un datagram es un segmento:

  • El flag no es 0 (esto se cumple para todos los fragmentos excepto para el último).
  • El offset del fragmento es distinto de 0 (esto se cumple para todos los fragmentos excepto para el primero).

Una vez a llegado el fragmento con flag 0 al receptor este podrá comprobar el tamaño total del datagram debido a que (IPpayload + (offsetDelFragmento*8)) y a su vez ver si aun faltan fragmentos retrasados. El receptor puede saber si un fragmento corresponde a un mismo datagram gracias al ID común que estos comparten. De estar todos los fragmentos, el receptor los podrá ordenar basándose en el offset de cada uno para así poder obtener el datagram completo.

Referencias

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas