Zum Hauptinhalt springen

Jemand hat mir den folgenden Trace geschickt und gefragt, ob es sich dabei um Wiederholungsübertragungen handelt, da die „Paketnummern“ doppelt vorkommen

T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.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.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A
T 0536 TCP host.subdomain.domain.com host2.sub2.dom2.com      49957 4000 A

Ich war etwas verwirrt über ihre Verwendung des Begriffs „Paketnummern“; sie bezog sich dabei auf die letzten beiden numerischen Spalten. Ich erklärte ihr, dass es sich dabei um die Quell- und Zielportnummern handelt, nicht um Paketnummern. Leider konnte ich ihre Frage nicht beantworten, da sie nicht genügend Informationen aus dem TCP-Paket-Header erfasst hatte, um feststellen zu können, ob es sich um Wiederholungsübertragungen handelte oder nicht.

Um festzustellen, ob es sich bei einem TCP-Paket um eine erneute Übertragung handelt, muss die Sequenznummer des Pakets erfasst werden. Zu Beginn jeder TCP-Verbindung wählen die beiden Hosts zufällige Sequenznummern aus und erhöhen diese dann für jedes Byte an TCP-Daten, das sie senden. Der empfangende Host gibt im Bestätigungsfeld die Sequenznummer zurück, die er als Nächstes erwartet.

Das folgende Beispiel zeigt, was ich als Mindestanzahl an Steuerargumenten für `packet_monitor` empfehle; vorausgesetzt, Sie interessieren sich für mehr als nur die Information, dass ein Paket gesendet oder empfangen wurde. Das Argument `interface` gibt die zu überwachende IP-Schnittstelle an. Wenn Sie keinen Schnittstellennamen angeben, überwacht `packet_monitor` alle Schnittstellen. `packet_monitor` kann eine große Menge an Stream-Speicher beanspruchen; die Verwendung des Arguments `interface` hilft, diesen Speicherbedarf zu reduzieren. Das Argument -verbose sorgt dafür, dass die Sequenz- und Bestätigungsnummern tatsächlich ausgegeben werden; ohne dieses Argument gibt es keine Möglichkeit, Wiederholungsübertragungen zu identifizieren. Es gibt auch weitere Informationen aus, die bei der Analyse von Traces nützlich sind, zum Beispiel die Werte für die Time-to-Live (TTL) und die Fenstergröße (window). Die Argumente -filter -host und -port helfen dabei, eine bestimmte Verbindung zu identifizieren und die Anzahl der Pakete zu reduzieren, die Sie sich ansehen müssen.

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 von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953077, Ack 1766884569, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 9c85, Urg-> 0000
Empf. IP   Ver/HL 45, ToS 0, Länge   29, ID 45db, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme de3d, Quell-ID ac100122, Ziel-ID ac100174
TCP von 172.16.1.34.telnet an phx_vos-m16.51094
Seq 1766884569, Ack 448953078, Fenster 8192, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum c984, Urg-> 0000
Sende-IP   Ver/HL 45, ToS 0, Länge   29, ID 8576, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme 9ea2, Quell-IP ac100174, Ziel-IP ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953078, Ack 1766884570, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum d883, Urg-> 0000
Empf. IP   Ver/HL 45, ToS 0, Länge   29, ID 45dc, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme de3c, Quell-AC 100122, Ziel-AC 100174
TCP von 172.16.1.34.telnet an phx_vos-m16.51094
Seq 1766884570, Ack 448953079, Fenster 8192, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum c982, Urg-> 0000
Sende-IP   Ver/HL 45, ToS 0, Länge   28, ID 8580, Flg/Frg   0, TTL 3c, Port 6
Prüfsumme 9e99, Quelle ac100174, Ziel ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953079, Ack 1766884571, Fenster 65535, 0 Datenbytes, Flags Ack.
X/Off 05, Flags 10, Cksum 098b, Urg-> 0000
Empf. IP   Ver/HL 45, ToS 0, Länge   28, ID 45dd, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme de3c, Quelle ac100122, Ziel ac100174
TCP von 172.16.1.34.telnet an phx_vos-m16.51094
Seq 1766884571, Ack 448953079, Fenster 8192, 0 Datenbytes, Flags Ack.
X/Off 05, Flags 10, Cksum e98a, Urg-> 0000

Die oben genannten Sequenznummern werden um 1 erhöht, da jedes Paket nur 1 Byte an Daten enthält. Würden die Pakete 10 Byte, 23 Byte oder 1023 Byte umfassen, würden die Sequenznummern um 10, 23 bzw. 1023 erhöht.

Wie sieht eine Wiederholung also aus? Bei einer Wiederholung ist die Sequenznummer kleiner oder gleich der vorherigen Sequenznummer und enthält mindestens 1 Byte an Daten; Pakete ohne Daten zählen nicht. Im folgenden Beispiel wird die Sequenznummer 448953089 mehrmals wiederholt. Mit Ausnahme des ersten Mal handelt es sich jedes Mal um eine Wiederholung.

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
Empf. IP   Ver/HL 45, ToS 0, Länge   28, ID 4d43, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme d6d6, Quell-AC 100122, Ziel-AC 100174
TCP von 172.16.1.34.telnet an phx_vos-m16.51094
Seq 1766885133, Ack 448953089, Fenster 8192, 0 Datenbytes, Flags Ack.
X/Off 05, Flags 10, Cksum e74e, Urg-> 0000
Sende-IP   Ver/HL 45, ToS 0, Länge   29, ID 9191, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme 9287, Quelle ac100174, Ziel ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953089, Ack 1766885133, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
Sender-IP   Ver/HL 45, ToS 0, Länge   29, ID 919a, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme 927e, Quelle ac100174, Ziel ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953089, Ack 1766885133, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
Sender-IP   Version/Header-Länge 45, ToS 0, Länge   29, ID 91a0, Flags/Framing    0, TTL 3c, Port 6
Prüfsumme 9278, Quelle ac100174, Ziel ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953089, Ack 1766885133, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
. . .
Sender-IP   Version/Header-Länge 45, ToS 0, Länge   29, ID 91f9, Flag/Framing    0, TTL 3c, Port 6
Prüfsumme 921f, Quelle ac100174, Ziel ac100122
TCP von phx_vos-m16.51094 an 172.16.1.34.telnet
Seq   448953089, Ack 1766885133, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 9745, Urg-> 0000
Empf. IP   Ver/HL 45, ToS 0, Länge   29, ID 4f04, Flg/Frg    0, TTL 3c, Port 6
Prüfsumme d514, Quell-AC 100122, Ziel-AC 100174
TCP von 172.16.1.34.telnet an phx_vos-m16.51094
Seq 1766885133, Ack 448953090, Fenster 8192, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 7744, Urg-> 0000

Neben den Argumenten „interface“ und „verbose“ würde ich auch die Argumente „time_stamp“ und „numeric“ hinzufügen. Das Argument „time_stamp“ versieht jedes angezeigte Paket mit einem Zeitstempel. Dies erleichtert die Zuordnung von Meldungen in Protokolldateien zum Trace und ermöglicht es Ihnen, abzuschätzen, wie lange Ereignisse – wie beispielsweise eine Wiederholungssequenz – tatsächlich dauern. Das Argument „numeric“ reduziert den Overhead, da keine Host- oder Portnamen nachgeschlagen werden.

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
Prüfsumme 889d, Quelle ac100174, Ziel ac100122
TCP von 172.16.1.116.51094 an 172.16.1.34.telnet
Seq   448953090, Ack 1766885134, Fenster 65535, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Prüfsumme 9b43, Urg-> 0000
14:30:17.606 Empfangenes IP-Paket   Version/HL 45, ToS 0, Länge   29, ID 5442, Flags/Framing    0, TTL 3
+c, Port 6
Prüfsumme cfd6, Quelle ac100122, Ziel ac100174
TCP von 172.16.1.34.telnet an 172.16.1.116.51094
Seq 1766885134, Ack 448953091, Fenster 32768, 1 Datenbyte, Flags Push Ack.
X/Off 05, Flags 18, Cksum 1b42, Urg-> 0000

Wenn Sie wissen, dass das Problem auf der TCP- oder IP-Ebene liegt, sind das in der Regel alle Informationen, die Sie benötigen. Sollte das Problem jedoch auf der Anwendungsebene liegen, benötigen Sie zusätzlich die eigentlichen Daten. Mit dem Argument -hex_dump können Sie die Daten anzeigen. Standardmäßig werden nur die ersten 128 Bytes der Daten angezeigt. Um auf der sicheren Seite zu sein, setze ich die Länge immer auf 1500, wodurch alle Daten im Paket angezeigt werden.

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
Prüfsumme 1478, Quelle ac100122, Ziel ac100174
TCP von 172.16.1.34.49562 an 172.16.1.116.telnet
Seq   110526313, Ack 1206659552, Fenster 32768, 19 Datenbytes, Flags Push Ack
+.
X/Off 05, Flags 18, Prüfsumme d3ee, 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 * Dies ist nur ein t
10    65 73 74                                         * est
10:25:19.389 Sende-IP   Ver/HL 45, ToS 0, Länge   3 Bytes, ID f969, Flg/Frg    0, TTL 3
+c, Port 6
Prüfsumme 2a9d, Quelle ac100174, Ziel ac100122
TCP von 172.16.1.116.telnet an 172.16.1.34.49562
Seq 1206659552, Ack 110526332, Fenster 8192, 19 Datenbytes, Flags 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 * Dies ist nur ein t
10    65 73 74                                         * est
10:25:22.263 Sende-IP   Ver/HL 45, ToS 0, Länge   28, ID f994, Flg/Frg    0, TTL 3
+c, Port 6
Prüfsumme 2a85, Quelle ac100174, Ziel ac100122
TCP von 172.16.1.116.telnet an 172.16.1.34.49562
Seq 1206659571, Ack 110526332, Fenster 8192, 0 Datenbytes, Flags Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
Keine TCP-Daten.

Bevor Sie einen packet_monitor-Trace mit Daten an Dritte senden, denken Sie daran, die Daten – sowohl Text als auch Hex-Werte – zu bereinigen, um proprietäre Informationen zu entfernen. Unter bestimmten Umständen kann es auch sinnvoll sein, die IP-Adressen zu bereinigen. Die IP-Adressen kommen an zwei Stellen vor: In der Zeile zur Dekodierung des Protokoll-Headers erscheinen sie im standardmäßigen Dezimalschreibweise mit Punkten. In der Zeile unmittelbar über der Dekodierungszeile erscheinen sie als Hex-Werte.

10:25:22.263 Sende-IP   Ver/HL 45, ToS 0, Länge   28, ID f994, Flg/Frg    0, TTL 3
+c, Port 6
Prüfsumme 2a85, Quelle ac100174, Ziel ac100122
TCP von 172.16.1.116.telnet an 172.16.1.34.49562
Seq 1206659571, Ack 110526332, Fenster 8192, 0 Datenbytes, Flags Ack.
X/Off 05, Flags 10, Cksum 7b7a, Urg-> 0000
Keine TCP-Daten.