lunes, 7 de diciembre de 2009

La importancia del MTU

Generalmente se encuentra en internet demasiada documentación hablando del MTU. En este breve artículo veremos que es y por qué afecta tanto la performance de la red.

Según la Wikipedia MTU "[...] es un término de redes de computadoras que expresa el tamaño en bytes de la unidad de datos más grande que puede enviarse usando un Protocolo de Internet [...]".

Cuando un host tiene que enviar información a la red, realiza varios cálculos para determinal el tamaño que debe tener el paquete.





Los datos generados por las aplicaciones generalmente se conocen como "Payload", y son encapsulados en cada capa donde se agregan encabezados que permiten distinguir datos entre diferentes conversaciones (capa 4), la búsqueda de la ruta para llegar al destino (capa 3) y la forma de transmitir la trama en los medios locales (capa 2).

Estos encabezados hacen que la capacidad útil de transporte de datos (el payload) se vea reducida, pero aseguran que la comunicación entre extremos funcione. A su vez, cada capa ve como payload el payload propiamente dicho más los encabezados de las capas superiores.

De esta forma, a nivel de Capa 2 veremos:


Generalmente cuando hablamos de MTU ejemplificamos dando los valores para el protocolo Ethernet.que puede tener 1500 bytes de payload (más el encabezado y trailer de capa 2).

Ahora bien, no todos los protocolos de capa 2 tienen definida la misma MTU, e idealmente todo el camino que nuestros paquetes tienen que atravesar para llegar al destino debería tener el mismo valor.
Pero en la realidad utilizamos diversos caminos con diversas encapsulaciones y protocolos de capa 2, por lo que seguramente se deberá recurrir al proceso de fragmentación.



Cuando hablamos de fragmentación nos referimos a un método que permite tomar un paquete entrante y partirlo en varios fragmentos salientes en donde -por ejemplo- en el caso que el server que está a la derecha envía un paquete TCP a la PC, puede tener un payload máximo de 1500 bytes, pero dado que el router conoce que el cliente de PPPoE tiene una MTU menor, debe hacer dos fragmentos del mismo paquete y enviarlos por separado.



Esto genera una sobrecarga en los equipos, dado que el router debe generar nuevos encabezados para enviar los fragmentos y el host receptor debe esperar a recibirlos todos y ensamblarlos para poder enviar el TCP ACK, por lo que estamos dando más trabajo a los equipos.

En algunos protocolos de enrutamiento (como OSPF) es importante que la MTU de las interfases de los vecinos coincida, dado que los paquetes de información del estado enlace pueden armarse de un valor mayor a la MTU del otro lado, por lo que se descartaría información dado que no se usa TCP.

Una posible solución para evitar la sobrecarga de los equipos es activar el campo de "Don't Fragment" del encabezado IP, que vemos a continuación en el diagrama:



Ahora la problemática de esto es que si el paquete llega con el bit "DF" activado, y el router detecta que se necesita fragmentación por existir una MTU menor, el router directamente descartará el paquete y generará un paquete de aviso de ICMP (Fragmentación Necesaria).

¿Cómo averiguo la MTU mínima del camino hasta un host?


Existen varias herramientas que nos informan acerca de esto:

Para GNU/Linux disponemos de una que se llama tracepath:

ariel@c8$ tracepath -n 10.0.0.22
 1:  10.1.0.2       0.059ms pmtu 1500
 2:  10.1.0.1       0.120ms pmtu 1400
 2:  10.0.0.22      0.514ms reached
 Resume: pmtu 1400 hops 2 back 254

Entonces cualquier paquete que enviemos con más de 1400 bytes será fragmentado o descartado de acuerdo  a las opciones que estén configuradas en el camino.

Nos vemos en la próxima. (¡¡¡Que lindo estar de vuelta!!!)

3 comentarios:

Damian dijo...

Interesante che..! Y siendo newbie en todo esto entendí tuito!!! jo! quien me ha visto y quien me ve..!! Alpargata'e'yute, facón'cruzao y en la cli de un 2811 configurando interfaces..! Se vemo pronto, y buen enlace...!

Damián.

Anónimo dijo...

Muy interesente todo este tema, pero necesito saber si existe un comando similar al tracepath para win xp?
Saludos
Jorge

Ariel Weher dijo...

Prueba con mturoute, disponible en http://www.elifulkerson.com/projects/mturoute.php

Saludos

Publicar un comentario