Este documento explica cómo Network Address Translation (NAT) maneja los fragmentos del Internet Control Message Protocol (ICMP) cuando usted configura la sobrecarga de NAT. Para obtener información sobre la sobrecarga de NAT, vea las preguntas frecuentes sobre NAT.
El manejo de los fragmentos ICMP depende del estado de la tabla de traducción NAT y del orden en que el router NAT recibe los fragmentos ICMP. Observaremos tres casos diferentes en los que enviamos dos pings de 172.16.0.1 a 172.17.1.2, cada uno con una longitud de 3600 bytes (tres fragmentos IP).
No hay requisitos específicos para este documento.
Este documento no tiene restricciones específicas en cuanto a versiones de software y de hardware.
For more information on document conventions, refer to the Cisco Technical Tips Conventions.
En este escenario, observamos que NAT crea una entrada de traducción completamente ampliada en la tabla de traducciones. Una vez que se haya hecho, y que no queden otras direcciones utilizables en el agrupamiento de NAT, la NAT libera los fragmentos recibidos antes del primer fragmento (fragmento 0) de un paquete.
A medida que empezamos, sólo una dirección del conjunto realiza la sobrecarga; la tabla de traducción NAT está vacía; y la configuración NAT aparece como:
ip nat pool POOL1 10.10.10.3 10.10.10.3 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
Veamos qué sucede cuando los paquetes comienzan a llegar al router NAT.
Llega el fragmento 0 del paquete 1 y NAT crea una entrada de traducción totalmente ampliada. A continuación, NAT traduce y reenvía el fragmento 0 del paquete 1. La tabla de traducción ahora aparece como:
Pro Inside global Inside local Outside local Outside global icmp 10.10.10.3:24320 172.16.0.1:24320 172.17.1.2:24320 172.17.1.2:24320
Observe el número 24320 en la tabla de traducciones anterior. Es el valor de identificación ICMP incluido en el encabezado ICMP del datagrama IP. Sólo el fragmento 0 del datagrama IP contiene este encabezado ICMP. Para determinar si los segmentos múltiples son parte del mismo paquete, NAT necesita seguir el valor ident de IP, que se encuentra en el encabezado IP de todos los fragmentos desde el datagrama IP original. Si varios fragmentos tienen el mismo valor de identificación IP que el fragmento 0, que creó la traducción extendida, NAT traduce estos fragmentos usando la misma entrada de traducción extendida. Consulte RFC 791 para obtener más información sobre el campo de identificación IP. Consulte RFC 792 para obtener más información sobre el campo de identificación ICMP.
Llegan el paquete 1 fragmento 2 y el paquete 1 fragmento 1. Dado que estos fragmentos son parte del mismo paquete que contiene el fragmento 0 (el cual creó la conversión), NAT usa la entrada de traducción indicada anteriormente para traducir y enviar estos fragmentos. El dispositivo de destino recibe todos los fragmentos para el paquete 1 y envía una respuesta.
Llega el paquete 2 fragmento 1. Dado que se trata de un paquete nuevo, su valor de identificación IP no coincide con nada que haya sido registrado por NAT. Por lo tanto, NAT no puede utilizar la traducción existente. Además, no puede crear una traducción dado que ya cuenta con una entrada de traducción completamente ampliada y no tiene la identificación del ICMP para crear otra. NAT pierde el fragmento 1 del paquete 2.
Llega el Paquete 2 fragmento 0. NAT puede utilizar la traducción anterior dado que la identificación ICMP coincide. (Todos los pings dentro de un único conjunto de pings utilizan el mismo número de identificación ICMP.) En este punto, NAT registra el identificador IP de este paquete. NAT traduce y reenvía el fragmento 0 del paquete 2.
Llega el paquete 2 fragmento 2. La NAT puede ahora utilizar la traducción dado que el valor de identificación IP coincide con la NAT registrada en el paso anterior. NAT traduce y reenvía el fragmento 2 del paquete 2. El dispositivo de destino recibe sólo el fragmento 0 y 2 (falta el fragmento 1), por lo que no envía respuesta.
En este escenario, vemos que si primero llegan fragmentos que no sean el primer fragmento (fragmento 0), NAT crea una traducción simple siempre y cuando haya una dirección en el conjunto NAT que no se haya utilizado aún en una traducción completamente extendida.
A medida que comenzamos, hay sólo una dirección en el conjunto NAT, la tabla de traducción NAT está vacía y la configuración aparece como:
ip nat pool POOL1 10.10.10.3 10.10.10.3 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
Llega el paquete 1 fragmento 1. NAT no puede crear una traducción completamente ampliada en la tabla de traducción porque no tiene la información de identificación de ICMP en este fragmento. Sin embargo, puesto que no hay traducciones completamente extendidas en el lugar, el NAT ingresa una traducción simple. A continuación, NAT traduce y reenvía el fragmento 1 del paquete 1. La entrada de traducción aparece como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.3 172.16.0.1 --- ---
Se recibe paquete 1 fragmento 0. Dado que la información de identificación de ICMP está incluida en este fragmento, NAT ingresa una entrada de traducción completamente ampliada:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.3 172.16.0.1 --- --- icmp 10.10.10.3:24321 172.16.0.1:24321 172.17.1.2:24321 172.17.1.2:24321
A continuación, NAT registra la información de identificación IP y traduce y reenvía el fragmento 0 del paquete 1.
Llega el paquete 1 fragmento 2. Debido a que este fragmento tiene la misma información de identificación de IP que NAT registró en el paso 2, NAT utiliza la traducción totalmente extendida para traducir y reenviar el fragmento 2 del paquete 1.
El dispositivo de destino recibe todos los fragmentos y responde. En este momento, todos los pings prosperan hasta que la tabla de traducción de NAT se borra o se desconecta.
En este escenario, vemos que si primero llegan fragmentos que no sean el primer fragmento (fragmento 0), NAT crea una traducción simple siempre y cuando haya una dirección en el conjunto NAT que no se haya utilizado aún en una traducción completamente extendida. Si una traducción extendida en la tabla NAT ya utiliza la dirección, corre el riesgo de que NAT traduzca cada una de las direcciones de origen del fragmento a una dirección diferente.
A medida que comenzamos, más de una dirección en el conjunto NAT realiza sobrecarga, la tabla de traducción ya tiene una traducción extendida en su lugar y la configuración es:
ip nat pool POOL1 10.10.10.3 10.10.10.5 prefix-length 24 ip nat inside source list 5 pool POOL1 overload access-list 5 permit 172.16.0.0 0.0.0.31
La tabla de traducción aparece como:
Pro Inside global Inside local Outside local Outside global icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322
Llega el paquete 1 fragmento 1. NAT no puede crear una entrada de tabla de traducción completamente extendida ya que no tiene la información de identificación ICMP en este fragmento y no puede crear una entrada de traducción simple para la dirección 10.10.10.3, ya que hay una entrada extendida existente para esta dirección IP. La NAT selecciona la siguiente dirección IP libre (10.10.10.4) y crea una traducción simple. A continuación, NAT traduce y reenvía el fragmento 1 del paquete 1. La tabla de traducción ahora aparece como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.4 172.16.0.1 --- --- icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322
Se recibe paquete 1 fragmento 0. Dado que la información de identificación de ICMP está incluida en este fragmento, NAT ingresa una entrada de traducción totalmente ampliada para la dirección 10.10.10.3, y registra la información de identificación de IP para este paquete. A continuación, NAT traduce y reenvía el fragmento 0 del paquete 1. La tabla de traducción ahora aparece como:
Pro Inside global Inside local Outside local Outside global --- 10.10.10.4 172.16.0.1 --- --- icmp 10.10.10.3:24322 172.16.0.1:24322 172.17.1.2:24322 172.17.1.2:24322 icmp 10.10.10.3:24323 172.16.0.1:24323 172.17.1.2:24323 172.17.1.2:24323
Llega el paquete 1 fragmento 2. Debido a que su información de identificación de IP coincide con la que NAT registró en el paso 2, NAT utiliza la traducción totalmente extendida que se creó en el paso 2 para traducir y reenviar el fragmento 2 del paquete 1.
En este punto, el dispositivo de destino recibe todos los fragmentos del paquete 1, pero la dirección de origen del fragmento 0 y 2 se ha traducido a 10.10.10.3 y el fragmento 1 se ha traducido a 10.10.10.4. Por lo tanto, el dispositivo de destino no puede reensamblar el paquete y no envía ninguna respuesta.
Llega el Paquete 2 fragmento 0. NAT utiliza la traducción completamente extendida anterior o crea una nueva traducción totalmente extendida dependiendo del valor del campo ICMP ident del fragmento. En cualquier caso, NAT registra la información de identificación IP. A continuación, NAT traduce y reenvía el fragmento 0 del paquete 2.
Llega el paquete 2 fragmento 2. Su información de identificación de IP coincide con lo que NAT registró en el paso 4, por lo que NAT utiliza la segunda traducción completamente extendida creada en el paso 4. NAT traduce y reenvía el fragmento 2 del paquete 2.
Llega el paquete 2 fragmento 1. Su información de identificación de IP coincide con lo que NAT registró en el paso 4, por lo que NAT utiliza la segunda traducción completamente extendida creada en el paso 4. NAT traduce y reenvía el fragmento 1 del paquete 2.
El dispositivo de destino recibe los tres fragmentos del paquete 2 de la misma fuente (10.10.10.3), de manera que vuelve a ensamblar el paquete y responde.
El hecho de que NAT elimine o reenvíe fragmentos ICMP depende de diversas razones tales como el orden en el que el router NAT recibe los fragmentos y el estado de la tabla de traducción en ese momento. En ciertas condiciones, NAT traduce los fragmentos de manera diferente, lo que hace imposible que el dispositivo de destino reensamble el paquete.