Path MTU Discovery ( PMTUD ) es una técnica estandarizada en redes informáticas para determinar el tamaño máximo de la unidad de transmisión (MTU) en la ruta de red entre dos hosts de Protocolo de Internet (IP), generalmente con el objetivo de evitar la fragmentación de IP . PMTUD fue originalmente pensado para enrutadores en Protocolo de Internet versión 4 (IPv4). [1] Sin embargo, todos los sistemas operativos modernos lo utilizan en puntos finales. En IPv6 , esta función ha sido delegada explícitamente a los puntos finales de una sesión de comunicaciones. [2] Como una extensión del descubrimiento estándar de path MTU, una técnica llamada Path MTU Discovery de capa de empaquetamiento funciona sin soporte de ICMP . [3]
En el caso de los paquetes IPv4, Path MTU Discovery funciona configurando el bit de bandera Don't Fragment (DF) en los encabezados IP de los paquetes salientes. Luego, cualquier dispositivo a lo largo de la ruta cuya MTU sea menor que el paquete lo descartará y enviará de vuelta un mensaje de Fragmentación necesaria (tipo 3, código 4) del Protocolo de mensajes de control de Internet (ICMP) que contiene su MTU, lo que permite que el host de origen reduzca su MTU de ruta de manera adecuada. El proceso se repite hasta que la MTU sea lo suficientemente pequeña como para atravesar toda la ruta sin fragmentación.
Como los enrutadores IPv6 no fragmentan los paquetes, no existe la opción No fragmentar en el encabezado IPv6 . Para IPv6, Path MTU Discovery funciona asumiendo inicialmente que la MTU de la ruta es la misma que la MTU en la interfaz de la capa de enlace donde se origina el tráfico. Luego, de manera similar a IPv4, cualquier dispositivo a lo largo de la ruta cuya MTU sea menor que el paquete descartará el paquete y enviará de vuelta un mensaje ICMPv6 Paquete demasiado grande (tipo 2) que contiene su MTU, lo que permite que el host de origen reduzca su MTU de ruta de manera adecuada. El proceso se repite hasta que la MTU sea lo suficientemente pequeña como para atravesar toda la ruta sin fragmentación. [4]
Si la MTU de la ruta cambia después de que se establece la conexión y se vuelve menor que la MTU de la ruta determinada previamente, el primer paquete grande causará un error ICMP y se encontrará la nueva MTU de la ruta más baja. Si la ruta cambia y la nueva MTU de la ruta es más grande, la fuente no se enterará del aumento, porque todos los enrutadores a lo largo de la nueva ruta podrán retransmitir todos los paquetes que la fuente envíe utilizando la MTU de la ruta más baja determinada originalmente. [5] [6] [4]
Muchos dispositivos de seguridad de red bloquean todos los mensajes ICMP por razones de seguridad percibidas, incluidos los errores necesarios para el correcto funcionamiento de PMTUD. Esto puede dar lugar a conexiones que completan correctamente el protocolo de enlace de tres vías TCP , pero que luego se bloquean al intentar transferir datos. Este estado se conoce como conexión de agujero negro . [7]
Algunas implementaciones de PMTUD intentan evitar este problema infiriendo que se han descartado paquetes de gran tamaño debido a la MTU en lugar de a la congestión del enlace. Uno de estos esquemas está estandarizado en RFC 8899, Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). [3] En caso de pérdida de conectividad, DPLPMTUD utiliza paquetes de sondeo de tamaños controlados para sondear la MTU de la ruta. El reconocimiento de un paquete de sondeo indica que la MTU de la ruta es al menos del tamaño de ese paquete. El uso de DPLPMTUD está estandarizado en QUIC . [8] Sin embargo, para que los protocolos de la capa de transporte funcionen de manera más eficiente, los mensajes ICMP inalcanzables (tipo 3) aún deberían estar permitidos.
Algunos enrutadores, incluidos los del núcleo Linux [9] y Cisco [10] , ofrecen una opción para reducir el tamaño máximo de segmento (MSS) anunciado en el protocolo de enlace TCP como solución alternativa. Esto se conoce como fijación de MSS .
Otro problema es cuando los administradores de redes no actualizan correctamente la MTU entre dos saltos de capa 3 adyacentes si el enlace entre estos saltos está compuesto por múltiples segmentos de capa 2 con conmutadores entre ellos. Por lo general, la MTU en la interfaz L3 saliente se toma del primer segmento L2. Pero si el segundo segmento o los siguientes tienen una MTU menor, el conmutador que se encuentra entre ellos simplemente descartará silenciosamente el paquete sin informar ningún ICMP (porque solo los saltos de capa 3 pueden generar un "paquete demasiado grande" ICMP). Por lo tanto, en este caso, los administradores deben actualizar la MTU para cada interfaz L3 saliente a la MTU mínima de los segmentos de capa 2 utilizados hasta el siguiente salto L3.