Descripción de las gotas del reensamblaje TCP

Descripción de las gotas del reensamblaje TCP

85726
Created On 09/25/18 19:21 PM - Last Modified 06/13/23 13:41 PM


Resolution


Este documento analiza un escenario común mientras soluciona problemas con las gotas de paquetes de reensamblado TCP 

 

He aquí un caso de estudio donde, un cliente, 172.22.136.50 intenta conectarse a un servidor 192.16.31.62 en el puerto de destino 80. El cortafuegos se configura con dirección dinámica y traducción de puertos, debido a los cuales el SYN de la recepción y la etapa de transmisión muestran diferentes números IP y de puerto, aunque el identificador IP sigue siendo el mismo.

 

El cliente envía el SYN.  El Firewall recibe el SYN, realiza NAT y transmite el SYN. El servidor recibe el SYN y responde con un SYN-ACK. El cortafuegos recibe el SYN-ACK, de-NATS y transmite el paquete de vuelta al cliente. El SYN-ACK nunca lo hace al cliente desde el firewall, y por lo tanto el cliente reintenta conectar 4 veces más en el mismo número de puerto, antes de intentar hacer una conexión en un nuevo número de puerto.

 

La primera instantánea muestra aparece desde el cliente al servidor, en la recepción, firewall, transmisión y las etapas de descenso (aunque la etapa de Drop no tiene paquetes) del firewall. La segunda instantánea muestra SYN-ACKs desde el servidor al cliente, de nuevo en la recepción, transmisión, Firewall y las etapas de caída del firewall.

 

a) el cliente primero intenta conectarse al servidor con un paquete SYN con los valores IP y TCP siguientes:

S IP: 172.22.136.50, D IP: 192.16.31.62, Ip.Id 24915, src port 44912, dest puerto 80, SEQ # 2033466733, ACK # 0

b) el Firewall recibe el paquete, y traduce la IP de 172.22.136.50 a 198.180.162.5 y los puertos de origen de 44912 a 21081, por lo que los paquetes SYN en la etapa de transmisión tienen los valores IP y TCP siguientes

S IP: 198.180.162.5, D IP: 192.16.31.62, IP.ID 24915 src puerto 21081, dest puerto 80, SEQ # 2033466733, ACK # 0

c) el SYN llega eventualmente al servidor y el servidor responde con un SYN-ACK. El SYN-ACK cuando se recibe en el firewall tiene los valores IP y TCP siguientes:

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 743112262, ACK # 2033466734

d) el Firewall de-NATS el SYN-ACK y transmite el paquete, con los valores IP y TCP siguientes

S IP: 192.16.31.62, D IP: 172.22.136.50, IP.ID 0, src port 80, dest Port 44912, SEQ # 743112262, ACK # 2033466734

 

Avinash-SYN. JPG

 

 

 Avinash-Dell-pcap-Analysis. jpg

 

Debido a que el cliente nunca recibió el SYN-ACK, reintenta 4 veces más en la misma IP de origen, IP de destino, Puerto de origen, Puerto de destino, SEQ # y ACK # antes de que finalmente se dé por vencido y, a continuación, intentando volver a conectar en un nuevo número de puerto.  

 

S IP: 172.22.136.50, D IP: 192.16.31.62, Ip.Id 24916, src port 44912, dest puerto 80, SEQ # 2033466733, ACK # 0

S IP: 172.22.136.50, D IP: 192.16.31.62, Ip.Id 24917, src port 44912, dest puerto 80, SEQ # 2033466733, ACK # 0

S IP: 172.22.136.50, D IP: 192.16.31.62, Ip.Id 24918, src port 44912, dest puerto 80, SEQ # 2033466733, ACK # 0

S IP: 172.22.136.50, D IP: 192.16.31.62, Ip.Id 24919, src port 44912, dest puerto 80, SEQ # 2033466733, ACK # 0

 

El servidor recibe todos estos aparece y responde de nuevo a todos estos aparece con su SYN-ACKS. Al igual que SYN, el SYN-ACKs también tiene la misma IP de origen, IP de destino, Puerto de origen, Puerto de destino, SEQ # y ACK #. 

 

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 743112262, ACK # 2033466734

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 743112262, ACK # 2033466734

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 743112262, ACK # 2033466734

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 743112262, ACK # 2033466734

 

Se espera que vea Ip.Id 0 para SYN-ACKs. Esto no significa que el paquete esté malformado.

 

 

Después de los primeros 4 intentos fallidos, el servidor continúa retransmitiendo el SYN-ACKS, pero ahora en una secuencia diferente #. Idealmente, un cambio en SEQ # en el SYN-ACK no le importará al cliente, porque el cliente no conoce el número de SEQ todavía del servidor (el paquete SYN del cliente tiene un ACK # 0).

 

Como se muestra en las instantáneas, el servidor retransmite SYN-ACKS con los valores IP y TCP siguientes:

 

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 883668401, ACK # 2033466734

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 883668401, ACK # 2033466734

S IP: 192.16.31.62, D IP: 198.180.162.5, IP.ID 0, src port 80, dest Port 21081, SEQ # 883668401, ACK # 2033466734

 

El Firewall recibe estos SYN-ACKS y los deja con el mostrador siguiente:

 

tcp_drop_packet 2 0 advierten los paquetes de TCP pktproc caídos debido a un error en el reensamblaje TCP

 

La razón de la falla en el reensamblado de TCP puede ser entendida habilitando "TCP REASS", junto con los filtros regulares, capturas y flujo básico.

 

> paquete de depuración de plan de bits-Diag conjunto log característica TCP
todos todos
fptcp fptcp
REASS REASS

 

> paquete de depuración de plan de bits-Diag Mostrar configuración

.....

Registro
habilitado: sí
log-Throttle: no
Sync-log-by-ticks: Yes
características:
flujo: básico
TCP: REASS fptcp
contadores:     

 

Los registros pan_packet_diag siguientes explican cómo las fallas de TCP reassebly causaron el paquete gotas

 

a) logs de la SYN transmitida

 

= = 2015-09-01 13:21:45.170-0400 = =
paquete recibido en la información del paquete de la etapa de FastPATH
: Len 74 puerto 30 interfaz 30 vsys 1
wqe index 227771 paquete 0x0x80000004162190e6 paquete descodificado
volcado:
L2:70:81:05: EC: D4:3F-> 00:1B: 17:00:04:1E, tipo 0x0800
IP: 172.22.136.50-> 192.16.31.62, Protocolo 6
versión 4, DIH 5, tos 0x00, Len 60,
ID 24915, frag_off 0x4000, TTL 60, checksum 51665
TCP: Sport 44912, dport 80, SEQ 2033466733, ACK 0,
reservado 0, offset 10, Window 5840, checksum 49659,
banderas 0x0002 (SYN), datos urgentes 0
opción del TCP:
00000000:02 04 05 B4 04 02 08 0A 99 03 5C 3e 00 00 00 00. ....... .. \>....
00000010:01 03 03 00....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:45.171-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418bcdd00 Session = 371381 seqno = 2033466733 tcplen = 0 l4plen = 0 C2S estado 0
2015-09-01 13:21:45.171-0400 Debug: pan_tcp_tcb_init_base (pan_reass. c:612): SYN: C2S
2015-09-01 13:21:45.171-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:539): TCP MSS 1460
2015-09-01 13:21:45.171-0400 Debug: pan_tcp_parse_ options_syn (pan_reass. c:560): Sack permitido
2015-09-01 13:21:45.172-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:568): ignorar TCP opción 8
2015-09-01 13:21:45.172-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:553): TCP escala de ventana 0
Cookie SYN: pan_reass (init State): C2S: 0 C2S: nxtseq 2033466734 C2S: startseq 2033466734 C2S: Triunfo 0 C2S: St 3 C2S: newsyn 0:: s2c: nxtseq 0 s2c: startseq 0 s2c: Win 5840 s2c: St 0 s2c: newsyn 0 ACK 0 cotilla 0
2015-09-01 13:21:45.172-0400 Debug : pan_tcp_reass (pan_reass. c:2484):
Session = 371381 trabajo 0x8000000418bcdd00 carga útil Len 0, TCP datos Len 0, RET 0
búsqueda de reenvío, ingreso interfaz 30
modo L3, virtual-router 2
búsqueda de ruta en virtual-router 2, IP 192.16.31.62   

 

b) "Lessing" a través de los logs de pan_packet_diag, nos topamos con el primer SYN-ACK recibido por el firewall.

El fireawall recibe este SYN-ACK en la etapa de path rápido y evalúa el siguiente paquete que espera en la dirección de C2S, es decir, paquete con unSeq # 2033466734(típicamente el paquete ACK del cliente).    Asimismo, el siguiente paquete que espera de la dirección s2c es uno con el Seq # 743112263. Después de evaluar estas condiciones, el Firewall transmite el paquete. 

 

= = 2015-09-01 13:21:45.173-0400 = =
paquete recibido en la información del paquete de la etapa de FastPATH
: Len 66 puerto 28 interfaz 28 vsys 0
wqe index 224088 paquete 0x0x8000000416faf0e6 paquete descodificado
volcado:
L2: B4:14:89:85:4E: 43-> 00:1B: 17:00:04:1C, tipo 0x0800
IP: 192.16.31.62-> 198.180.162.5, Protocolo 6
versión 4, DIH 5, tos 0x08, Len 52,
ID 0, frag_off 0x4000, TTL 57, checksum 63923
TCP: Sport 80, dport 21081, SEQ743112262, ACK2033466734,
reservado 0, offset 8, ventana 14600, checksum 47633,
Flags 0x0012 (SYN ACK), datos urgentes 0
TCP opción:
00000000:02 04 05 B4 01 01 04 02 01 03 03 09.     ....... ....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:45.173-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418b5ab80 Session = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c estado 0
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_tcb_init_base (pan_reass. c:612): SYN: s2c
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:539): TCP MSS 1460
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_parse_ options_syn (pan_reass. c:560): Sack permitido
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:553): TCP Window escala 9
SYN cookie: Pan_reass (init State): C2S: 1 C2S: nxtseq2033466734C2S: startseq 2033466734 C2S: triunfo 14600 C2S: St 3 C2S: newsyn 0:: s2c: nxtseq743112263s2c: startseq 743112263 s2c: Win 5840 s2c: St 3 s2c: newsyn 0 ACK2033466734entrometido 0
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_tcb_upd_state (pan_reass. c:783 ): Estado TCP = 1 Prev = 3
2015-09-01 13:21:45.173-0400 Debug: pan_tcp_reass (pan_reass. c:2484):
Session = 371381 trabajo 0x8000000418b5ab80 carga útil Len 0, TCP Data Len 0, RET 0
reenvío de búsqueda, interfaz de ingreso 28
modo L3, virtual-router 2
Búsqueda de ruta en virtual-router 2, IP 172.22.136.50
ruta encontrada, interfaz ethernet1/15, zona 8, NextHop 10.174.62.17
resolver ARP para IP 10.174.62.17 en interfaz ETHERNET1/15
ARP entrada encontrada en interfaz 30
transmitir paquete en Puerto 30 años.              

 

c) el Firewall también recibe los siguientes 3 paquetes SYN-ACK retransmitidos con los SEQ # 743112262 y el ACK # 2033466734, y los transmite.
 

 

= = 2015-09-01 13:21:46.169-0400 = =
paquete recibido en la información del paquete de la etapa de FastPATH
: Len 66 puerto 28 interfaz 28 vsys 0
wqe index 222187 paquete 0x0x80000004162018e6 paquete descodificado
volcado:
L2: B4:14:89:85:4E: 43-> 00:1B: 17:00:04:1C, tipo 0x0800
IP: 192.16.31.62-> 198.180.162.5, Protocolo 6
versión 4, DIH 5, tos 0x08, Len 52,
ID 0, frag_off 0x4000, TTL 57, checksum 63923
TCP: Sport 80, dport 21081,Seq 743112262, ACK 2033466734,
reservado 0, offset 8, Window 14600, checksum 47633,
Flags 0x0012 (SYN ACK), datos urgentes 0
TCP opción:
00000000:02 04 05 B4 01 01 04 02 01 03 03 09.   ....... ....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:46.169-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418b1f500 Session = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c estado 1
2015-09-01 13:21:46.169-0400 Debug: pan_tcp_tcb_init_base (pan_reass. c:612): SYN: s2c
2015-09-01 13:21:46.169-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:539): TCP MSS 1460
2015-09-01 13:21:46.169-0400 Debug: pan_tcp_parse_ options_syn (pan_reass. c:560): Sack permitido
2015-09-01 13:21:46.170-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:553): TCP Window escala 9
SYN cookie: pan_reass (nuevo SYN): C2S: 1C2S: nxtseq 2033466734C2S: startseq 2033466734 C2S: triunfo 14600 C2S: St 3 C2S: newsyn 0::s2c: nxtseq 743112263s2c: startseq 743112263 s2c: Win 5840 s2c: St 1 s2c: newsyn 0 ACK 2033466734 cotilla 0
2015-09-01 13:21:46.170-0400 Debug: pan_tcp_reass (pan_reass. c:2484):
Session = 371381 trabajo carga útil 0x8000000418b1f500 Len 0, datos TCP Len 0, RET 0
búsqueda de reenvío, interfaz de ingreso 28
modo L3,
búsqueda de ruta del virtual-router 2 en virtual-router 2, IP 172.22.136.50
ruta encontrada, interfaz ethernet1/15, zona 8, NextHop 10.174.62.17
Resolver ARP para 10.174.62.17 IP en la interfaz ethernet1/15
ARP entrada encontrada en la interfaz 30
transmitir paquete en el puerto 30
-------------------------------------------
= = 2015-09-01 13:21:48.169-0400 = =
paquete recibido en información del paquete de la etapa de FastPATH
: Len 66 puerto 28 interfaz 28 vsys 0
wqe index 227536 paquete 0x0x8000000416e7e8e6 paquete descodificado
volcado:
L2: B4:14:89:85:4E: 43-> 00:1B: 17:00:04:1C, tipo 0x0800
IP: 192.16.31.62-> 198.180.162.5, Protocolo 6
versión 4, DIH 5, tos 0x08, Len 52,
ID 0, frag_off 0x4000, TTL 57, checksum 63923
TCP: Sport 80, dport 21081,Seq 743112262, ACK 2033466734,
reservado 0, offset 8, Window 14600, checksum 47633,
Flags 0x0012 (SYN ACK), datos urgentes 0
opción TCP:
00000000:02 04 05 B4 01 01 04 02 01 03 03 09.             ....... ....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:48.170-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418bc6780 Session = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c estado 1
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_tcb_init_base (pan_reass. c:612): SYN: s2c
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:539): TCP MSS 1460
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_ options_syn (pan_reass. c:560): Sack permitido
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:553): TCP Window escala 9
SYN cookie: pan_reass (nuevo SYN): C2S: 1C2S: nxtseq 2033466734C2S: startseq 2033466734 C2S: triunfo 14600 C2S: St 3 C2S: newsyn 0::s2c: nxtseq 743112263s2c: startseq 743112263 s2c: Win 5840 s2c: St 1 s2c: newsyn 0 ACK 2033466734 cotilla 0
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_reass (pan_reass. c:2484):
Session = 371381 trabajo carga útil 0x8000000418bc6780 Len 0, datos TCP Len 0, RET 0
búsqueda de reenvío, interfaz de ingreso 28
modo L3,
búsqueda de ruta del virtual-router 2 en virtual-router 2, IP 172.22.136.50
ruta encontrada, interfaz ethernet1/15, zona 8, NextHop 10.174.62.17
Resolver ARP para 10.174.62.17 IP en la interfaz ethernet1/15
ARP entrada encontrada en la interfaz 30
transmitir paquete en el puerto 30
------------------------------------------          

= = 2015-09-01 13:21:48.170-0400 = =
paquete recibido en la información del paquete de la etapa de FastPATH
: Len 66 puerto 28 interfaz 28 vsys 0
wqe index 226639 paquete 0x0x8000000416a288e6 paquete descodificado
volcado:
L2: B4:14:89:85:4E: 43-> 00:1B: 17:00:04:1C, tipo 0x0800
IP: 192.16.31.62-> 198.180.162.5, Protocolo 6
versión 4, DIH 5, tos 0x08, Len 52,
ID 0, frag_off 0x4000, TTL 57, checksum 63923
TCP: Sport 80, dport 21081,Seq 743112262, ACK 2033466734,
reservado 0, offset 8, Window 14600, checksum 47633,
Flags 0x0012 (SYN ACK), datos urgentes 0
TCP opción:
00000000:02 04 05 B4 01 01 04 02 01 03 03 09.   ....... ....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:48.170-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418baa700 Session = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c estado 1
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_tcb_init_base (pan_reass. c:612): SYN: s2c
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:539): TCP MSS 1460
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_ options_syn (pan_reass. c:560): Sack permitido
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_parse_options_syn (pan_reass. c:553): TCP Window escala 9
SYN cookie: pan_reass (nuevo SYN): C2S: 1C2S: nxtseq 2033466734C2S: startseq 2033466734 C2S: triunfo 14600 C2S: St 3 C2S: newsyn 0::s2c: nxtseq 743112263s2c: startseq 743112263 s2c: Win 5840 s2c: St 1 s2c: newsyn 0 ACK 2033466734 cotilla 0
2015-09-01 13:21:48.170-0400 Debug: pan_tcp_reass (pan_reass. c:2484):
Session = 371381 trabajo carga útil 0x8000000418baa700 Len 0, datos TCP Len 0, RET 0
búsqueda de reenvío, interfaz de ingreso 28
modo L3,
búsqueda de ruta del virtual-router 2 en virtual-router 2, IP 172.22.136.50
ruta encontrada, interfaz ethernet1/15, zona 8, NextHop 10.174.62.17
Resolver ARP para 10.174.62.17 IP en la interfaz ethernet1/15
ARP entrada encontrada en la interfaz 30
transmitir paquete en el puerto 30          

 

 

d) cuando el cortafuegos recibe el siguiente conjunto de SYN-ACKS desde el servidor con el modificadoSeq # 883668401, éste elimina el paquete.   Este es un comportamiento esperado porque mientras el Firewall espera el tiempo de espera del Protocolo de enlace TCP de 10 segundos (la duración máxima entre recibir el SYN-ACK y el ACK subsiguiente para establecer completamente la sesión), mantuvo el seguimiento de los siguientes # SEQ esperados del servidor lado como 743112263, pero recibió un paquete con laSeq # 883668401.   Este desajuste en el número SEQ hace que el cortafuegos deje caer el paquete. Igualmente todos los paquetes subsecuentes con el SEQ # 883668401, son caídos por la cacerola.

 

= = 2015-09-01 13:21:54.169-0400 = =
paquete recibido en la información del paquete de la etapa de FastPATH
: Len 66 puerto 28 interfaz 28 vsys 0
wqe index 222256 paquete 0x0x80000004165330e6 paquete descodificado
volcado:
L2: B4:14:89:85:4E: 43-> 00:1B: 17:00:04:1C, tipo 0x0800
IP: 192.16.31.62-> 198.180.162.5, Protocolo 6
versión 4, DIH 5, tos 0x08, Len 52,
ID 0, frag_off 0x4000, TTL 57, checksum 63923
TCP: Sport 80, dport 21081,Seq 883668401, ACK 2033466734,
reservado 0, offset 8, Window 14600, checksum 64069,
Flags 0x0012 (SYN ACK), datos urgentes 0
TCP opción:
00000000:02 04 05 B4 01 01 04 02 01 03 03 09.   ....... ....
Flujo FastPATH, sesión 371381
NAT Session, dirección de ejecución/traducción
de Puerto 2015-09-01 13:21:54.169-0400 Debug: pan_tcp_reass (pan_reass. c:1999): REASS: Work 0x8000000418b21780 Session = 371381 seqno = 883668401 tcplen = 0 l4plen = 0 s2c estado 1
2015-09-01 13:21:54.169-0400 Debug: pan_tcp_reass (pan_reass. c:2074): REASS: Session = 371381seqno = 883668401rcv_nxt = 743112263nueva conexión
2015-09-01 13:21:54.169-0400 Debug: pan_tcp_reass (pan_reass. c:2090): número de secuencia en SYN_ACK no es consistente (actual + 1 883668402 vs start_seq 743112263),Drop
2015-09-01 13:21:54.169-0400 Debug: pan_tcp_reass (pan_reass. c:2484):
sesión = 371381 trabajo 0x8000000418b21780 carga útil Len 0, TCP datos Len 0 , se ha fallado el reensamblado delTCP RET 2
: RET 2
             

 

 



Actions
  • Print
  • Copy Link

    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClWQCA0&lang=es&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

Choose Language