Ir al contenido principal

Alguien me envió el siguiente rastreo y me preguntó si representaba retransmisiones porque los «números de paquetes» estaban duplicados.

T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0486 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 PA
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0000 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 A
R 0044 TCP host2.sub2.dom2.com  host.subdomain.domain.co      4000 49957 PA
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdominio.dominio.com host2.sub2.dom2.com      49957 4000 A

Me confundió un poco su uso del término «números de paquetes», ya que se refería a las dos últimas columnas numéricas. Le expliqué que se trataba de los números de puerto de origen y destino, no de números de paquetes. Por desgracia, no pude responder a su pregunta porque no había capturado suficiente información del encabezado del paquete TCP como para poder determinar si se trataba de retransmisiones o no.

Para determinar si un paquete TCP es una retransmisión, debe capturar el número de secuencia del paquete. Al inicio de cada conexión TCP, los dos hosts seleccionan números de secuencia aleatorios y, a continuación, incrementan el número de secuencia por cada byte de datos TCP que envían. El host receptor devuelve en el campo de acuse de recibo el número de secuencia que espera ver a continuación.

El siguiente ejemplo muestra lo que recomiendo como conjunto mínimo de argumentos de control para packet_monitor, suponiendo que le interese algo más que la simple información de que se ha enviado o recibido un paquete. El argumento interface identifica la interfaz IP que se va a supervisar. Si no se proporciona un nombre de interfaz, packet_monitor supervisará todas las interfaces. Packet_monitor puede utilizar una gran cantidad de memoria de flujos, por lo que el uso del argumento interface ayudará a reducir esta cantidad. El argumento -verbose es el que realmente imprimirá los números de secuencia y de acuse de recibo; de nuevo, sin él no hay forma de identificar las retransmisiones. También imprimirá otra información útil para analizar los rastros, por ejemplo, los valores de tiempo de vida (TTL) y tamaño de ventana (window). Los argumentos -filter -host y -port ayudan a identificar una conexión específica y reducen el número de paquetes que hay que examinar.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p
 +ort 23
dir                                                 icmp type           tcp
dir   len proto source             destination         src port dst port type
Xmit IP  Ver/HL 45, ToS 0, Len   29, ID 8569, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9eaf, Src ac100174, Dst ac100122
TCP de phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953077, ack 1766884569, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 9c85, Urg-> 0000
IP recibida   Ver/HL 45, ToS 0, Len   29, ID 45db, Flg/Frg    0, TTL 3c, Prtl 6
Cksum de3d, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a phx_vos-m16.51094
seq 1766884569, ack 448953078, ventana 8192, 1 bytes de datos, indicadores Push Ack.
X/Off 05, Indicadores 18, Cksum c984, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 8576, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9ea2, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953078, ack 1766884570, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, Cksum d883, Urg-> 0000
IP recibida   Ver/HL 45, ToS 0, Len   29, ID 45dc, Flg/Frg    0, TTL 3c, Prtl 6
Cksum de3c, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a phx_vos-m16.51094
seq 1766884570, ack 448953079, ventana 8192, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación c982, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   28, ID 8580, Flg/Frg   0, TTL 3c, Prtl 6
Cksum 9e99, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953079, ack 1766884571, ventana 65535, 0 bytes de datos, indicadores Ack.
X/Off 05, Flags 10, Cksum 098b, Urg-> 0000
IP recibida   Ver/HL 45, ToS 0, Len   28, ID 45dd, Flg/Frg    0, TTL 3c, Prtl 6
Cksum de3c, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a phx_vos-m16.51094
seq 1766884571, ack 448953079, ventana 8192, 0 bytes de datos, indicadores Ack.
X/Off 05, Flags 10, Cksum e98a, Urg-> 0000

Los números de secuencia anteriores se incrementan en 1 porque cada paquete contiene solo 1 byte de datos; si los paquetes incluyeran 10 bytes, 23 bytes o 1023 bytes, los números de secuencia se incrementarían en 10, 23 o 1023.

Entonces, ¿cómo es una retransmisión? En una retransmisión, el número de secuencia es menor o igual al número de secuencia anterior y tiene al menos 1 byte de datos; los paquetes sin datos no cuentan. En el siguiente ejemplo, el número de secuencia 448953089 se repite varias veces. Todas las veces, excepto la primera, son retransmisiones.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -filter -host 172.16.1.34 -p
+ort 23
dir                                                 icmp type           tcp
dir   len proto source             destination         src port dst port type
IP recibida   Ver/HL 45, ToS 0, Len   28, ID 4d43, Flg/Frg    0, TTL 3c, Prtl 6
Cksum d6d6, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a phx_vos-m16.51094
seq 1766885133, ack 448953089, ventana 8192, 0 bytes de datos, indicadores Ack.
X/Off 05, Flags 10, Cksum e74e, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 9191, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9287, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953089, ack 1766885133, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 9745, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 919a, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 927e, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953089, ack 1766885133, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 9745, Urg-> 0000
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 91a0, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 9278, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953089, ack 1766885133, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 9745, Urg-> 0000
. . .
Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 91f9, Flg/Frg    0, TTL 3c, Prtl 6
Cksum 921f, Src ac100174, Dst ac100122
TCP desde phx_vos-m16.51094 a 172.16.1.34.telnet
seq   448953089, ack 1766885133, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 9745, Urg-> 0000
IP recibida   Ver/HL 45, ToS 0, Len   29, ID 4f04, Flg/Frg    0, TTL 3c, Prtl 6
Cksum d514, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a phx_vos-m16.51094
seq 1766885133, ack 448953090, ventana 8192, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 7744, Urg-> 0000

Además de los argumentos de interfaz y verbosos, incluiría los argumentos time_stamp y numéricos. El argumento time_stamp coloca una marca de tiempo en cada paquete mostrado, lo que facilita la correlación de los mensajes de los archivos de registro con el seguimiento y permite estimar la duración real de eventos como una secuencia de retransmisión. El argumento numérico reduce la sobrecarga al no buscar nombres de host o puerto.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -time_stamp -numeric -filter
+ -host 172.16.1.34 -port 23
dir                                                 icmp type
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src port ds
+t port type
14:30:17.604 Xmit IP   Ver/HL 45, ToS 0, Len   29, ID 9b7b, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 889d, Src ac100174, Dst ac100122
TCP desde 172.16.1.116.51094 a 172.16.1.34.telnet
seq   448953090, ack 1766885134, ventana 65535, 1 bytes de datos, indicadores Push Ack.
X/Off 05, Indicadores 18, Cksum 9b43, Urg-> 0000
14:30:17.606 IP recibida   Ver/HL 45, ToS 0, Len   29, ID 5442, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum cfd6, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.telnet a 172.16.1.116.51094
seq 1766885134, ack 448953091, ventana 32768, 1 bytes de datos, indicadores Push Ack.
X/Off 05, indicadores 18, suma de comprobación 1b42, Urg-> 0000

Si sabes que el problema se encuentra en la capa TCP o IP, normalmente esta es toda la información que necesitas. Sin embargo, si el problema pudiera estar en la capa de aplicación, también necesitarás los datos reales. Puedes mostrar los datos con el argumento -hex_dump. Por defecto, solo se muestran los primeros 128 bytes de datos. Para estar seguro, siempre establezco la longitud en 1500, lo que mostrará todos los datos del paquete.

packet_monitor -interface #sdlmux.m16.11-2 -verbose -time_stamp -numeric -hex_du
 +mp -length 1500 -filter -host 172.16.1.34 -port 23
dir                                                 icmp type
+        tcp
hh:mm:ss.ttt dir   len proto source             destination         src port ds
+t port type
10:25:19.387 Rcvd IP   Ver/HL 45, ToS 0, Len   3b, ID f8f, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 1478, Src ac100122, Dst ac100174
TCP desde 172.16.1.34.49562 a 172.16.1.116.telnet
seq   110526313, ack 1206659552, ventana 32768, 19 bytes de datos, indicadores Push Ack
+.
X/Off 05, Indicadores 18, Cksum d3ee, Urg-> 0000
desplazamiento 0 . . . 4 . . .   8 . . . C . . . 0...4... 8...C...
0    54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * Esto es solo una estimación
10    65 73 74
10:25:19.389 IP de transmisión   Ver/HL 45, ToS 0, Len   3b, ID f969, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a9d, Src ac100174, Dst ac100122
TCP desde 172.16.1.116.telnet a 172.16.1.34.49562
seq 1206659552, ack 110526332, ventana 8192, 19 bytes de datos, indicadores Push Ack
+.
X/Off 05, Flags 18, Cksum 33dc, Urg-> 0000
offset 0 . . . 4 . . .   8 . . . C . . . 0...4... 8...C...
0    54 68 69 73 20 69 73 20 6f 6e 6c 79 20 61 20 74 * Esto es solo una estimación.
10    65 73 74
10:25:22.263 IP de transmisión   Ver/HL 45, ToS 0, Len   28, ID f994, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a85, Src ac100174, Dst ac100122
TCP desde 172.16.1.116.telnet a 172.16.1.34.49562
seq 1206659571, ack 110526332, ventana 8192, 0 bytes de datos, indicadores Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
Sin datos tcp.

Antes de enviar un rastreo de packet_monitor con datos a cualquier persona, recuerde limpiar los datos, tanto los valores de texto como los hexadecimales, para eliminar la información confidencial. En algunas circunstancias, es posible que también desee limpiar las direcciones IP. Las direcciones IP aparecen en dos lugares: en la línea de decodificación del encabezado del protocolo, donde aparecen como notación decimal punteada estándar, y en la línea inmediatamente superior a la línea de decodificación, donde aparecen como valores hexadecimales.

10:25:22.263 IP de transmisión   Ver/HL 45, ToS 0, Len   28, ID f994, Flg/Frg    0, TTL 3
+c, Prtl 6
Cksum 2a85, Src ac100174, Dst ac100122
TCP desde 172.16.1.116.telnet a 172.16.1.34.49562
seq 1206659571, ack 110526332, ventana 8192, 0 bytes de datos, indicadores Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
Sin datos tcp.