orm@doc-tcpip.org | Erstellt: November 2000 - Letzte Modifikation: Juli 2001 |
Im Paket sieht man nur Sachen, die in den entsprechenden Protokollen festgelegt sind. Man kann also im Prinzip den entsprechenden RFC nehmen, ihn neben den Trace legen und einfach übersetzen.
Hier also ein Beispielpaket aus einem Trace. Der Trace ist unter AIX
mit dem iptrace-Kommando aufgenommen und dann mit dem ipreport-
Kommando formatiert worden.
Natürlich ändert die Plattform und das benutzte Tool nichts am
Inhalt des Paketes - sehr wohl aber an der Ausgabe der Ergebnisse:
Packet Number 2Das ist die Nummer des Paketes im IP-Trace. Es ist eine Nummer, die der IP-Trace vergibt, also nichts mit den Paketen auf dem Netz zu tun hat und die auch in dem Paket nicht drin steht.
ETH: ====( 74 bytes received on interface en0 )==== 12:00:28.036830597
Das Packet wurde empfangen, und zwar auf dem Ethernet Interface en0 zum angebenen Zeitpunkt. Das ganze Paket war 74 Byte lang. 14 Byte entfallen davon auf den Header vor dem IP-Header. Das wird von der IP-Ebene nachgehalten und in einem Zähler aufgerechnet. Es steht aber nicht im Packet drin.
ETH: 00000000 08005af8 b5b600a0 0c121ba1 08004500 |..Z...........E.| ETH: 00000010 003c0115 40004006 a04ec0a8 8c05c0a8 |.<..@.@..N......| ETH: 00000020 8c020017 e445bf6b 51530c41 c0b5a012 |.....E.kQS.A....| ETH: 00000030 7d78fd32 00000204 05b40101 080a000d |}x.2............| ETH: 00000040 77fe39fb c2da0103 0300 |w.9....... |
Das ist die Ausgabe in Hex des Paketes. Das erhält man, wenn man im ipreport den Schalter -x mitangibt. Das "ETH" und die Nummer danach sind Sachen, die der ipreport generiert. Ganz links das Protokoll, also Ethernet. Die Nummer ist die Anzahl der Byte - der Bytecount, in Hex, klar. Das am linken Rand ist das Byte mit dieser Nummer. Das erste Byte - in unserem Fall 08 mit der Nummer 0. In der nächsten Zeile folgt dann links das Byte 00, mit der Nummer 0x10, also 16. Fängt man mit 0 an und zählt jeweils 2 Zeichen, dann kommt man genau auf diese 16:
. 1 1 1 1 1 1 . 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 . ETH: 00000000 08005af8 b5b600a0 0c121ba1 08004500 |..Z...........E.| . 1 . 6 . ETH: 00000010 003c0115 40004006 a04ec0a8 8c05c0a8 |.<..@.@..N......| . Das erste Byte ist also die Nummer 16 dieser Übertragung - das . ist 10 in Hex.
ETH: 00000000 08005af8 b5b600a0 0c121ba1 0800....Die ersten 6 Byte 08005af8 b5b6 geben die MAC-Adresse des Empfängers: 08:00:5a:f8:b5:b6. Die folgenden 6 Byte sind die MAC des Senders. Dann folgt 0800, dass ist der Code für das IP-Protokoll. Hier endet also der Ethernet-Header mit 14 Byte, und es beginnt der IP-Header:
ETH: 00000000 ........ ........ ........ ....4500 ETH: 00000010 003c0115 40004006 a04ec0a8 8c05c0a8 ETH: 00000020 8c02.... ........ ........ ........04 ist die Version, IPv4. Die 5 gibt die Anzahl der 32-Bit Wörter an, aus denen der IP-Header besteht: 32 Bit sind 4 Byte, 5 * 4 ist 20 Byte. Und das ist der Standart IP-Header eines IP-Paketes. Jetzt kommen 2 Byte TOS (Type of Service) - es ist nichts gesetzt (0). Das ist unten weiter erläutert. 3c bezeichnet die Länge des gesamten IP-Teil des Paketes in Bytes (0x3c ist 60 Byte). Danach kommen 2 Byte ID des Paketes (0x0115). Das nächste Byte ist ein bisschen schwierig. Die ersten 3 Bit sind Flags. Dann kommt der Fragment-Offset. Hier ist das erste Byte 0x40, das ist binär 01000000. Das erste Bit muss 0 sein, das zweite ist das Dont Fragment (DF) Bit, und das dritte ist das More Fragments (MF) bit. Der Rest, also 5 Bit plus 8 Bit des nächsten Byte, geben den Fragment Offset, also die Anzahl der 64 Bit Stücke, die schon durch sind (bezogen auf das zersägte Paket). Hier ist das Paket nicht fragmentiert, also alles 0. Das nächste Byte ist 0x40, die "Time to Live", also die Anzahl der Hops, die das Paket passieren darf, bevor es "discarded" wird (0x40 ist 64 dec). Dann kommt 0x06, das ist die Protokoll-Nummer, die im Anschluss kommt. 0x06 ist 6, und das ist TCP - siehe /etc/protocols. 0xa04e ist die Checksumme des IP-Headers. Und dann kommen die beiden IP-Adressen - die Quelle zuerst: 0xc0 ist 192, 0xa8 ist 168, 0x8c ist 140. 0x05 und 0x02 ist klar.... Es sind keine Options gesetzt, also geht es mit dem TCP-Header weiter.
ETH: 00000020 ....0017 e445bf6b 51530c41 c0b5a012 ETH: 00000030 7d78fd32 0000.... ........ ........0x0017 ist der Source Port (das ist 23, der Telnet-Port). 0xe445 ist der Destination Port (58437). Danach kommt die 32-bittige Sequenznummer: bf6b5153. Und danach die genausolange Acknoledgement-Nummer: 0c41c0b5. Danach finden wir 0xa, das ist die Länge des TCP-Headers, hier in diesem Fall sind das 10 Byte. Normal wären 5, es gibt also Extentions in diesem Header. Jetzt wird es schwierig, denn die nächsten 6 Bit sind reserviert. Danach kommen die 6 Bits, die die Flags angeben. Es ist also: 0x012 in Binär: 000000010010. Die ersten 6 fallen weg. Dann kommen die Flags in folgender Reihenfolge: Urgent, Acknowledge, Push, Reset, Synchronize, Fin. Es ist also ACK und SYN gesetzt. Die nächsten 16 Bit (2 Byte) sind die Grösse des TCP-Windows in Byte - hier 0x7d78 (32120). Dann 16 Bit TCP-Checksumme 0xfd32 und der Urgent-Pointer, also die Stelle im Datenstrom, wo die dringenden Daten losgehen. Hier gibt es sowas nicht, also 0x0000. Jetzt haben wir oben an der TCP-Header-Länge gesehen, das es noch Erweiterungen gibt, und zwar 5 32-bit Wörter:
ETH: 00000030 ........ ....0204 05b40101 080a000d ETH: 00000040 77fe39fb c2da0103 0300Die TCP-Optionen werden folgendermassen verkoded:
Ipreport ist so nett, das ganze "Human readable" umzusetzen:
ETH: [ 00:a0:0c:12:1b:a1 -> 08:00:5a:f8:b5:b6 ] type 800 (IP)Source und Destination MAC-Adresse und das benutzte Protokoll.
IP: < SRC = 192.168.140.5 > () IP: < DST = 192.168.140.2 > ()Die beiden IP-Adressen. Wenn man Namensauflösung macht, dann erscheinen in den Klammern die Hostnamen.
IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=60, ip_id=277, ip_off=0DFDie Version des IP-Protokolles: IPv4, gefolgt von der Länge des Headers (20 Byte), kein spezieller Type of Service, die gesamte Länge des IP Paketes ist 60 Byte. Die ID ist 277 und das Paket ist nicht fragmentiert.
IP: ip_ttl=64, ip_sum=a04e, ip_p = 6 (TCP)Das Paket darf über 64 Router weitergereicht werden, dann muss des verworfen werden. Die Checksumme des IP-Headers und dann die Nummer des Protokolls: 6 für TCP.
TCP: < source port=23(telnet), destination port=58437 >Die Ports von Quelle und Ziel.
TCP: th_seq=bf6b5153, th_ack=c41c0b5Zuerst die Sequenznummer, also die fortlaufenden Nummer des ersten Bytes Daten in diesem Paket. Danach die Acknowldge-Number. Das ist die Nummer des letzten von der anderen Seite erhaltenen Bytes Daten plus 1. Also die Nummer des nächsten erwarteten Bytes. Alle Header etc. Zählen nicht zu den Daten!
TCP: th_off=10, flagsHier der Offset des TCP-Headers. Normalerweise ist der Header 5*32-bit Wörter lang (20 Byte). Hier hat er noch Erweiterungen, ist also insgesamt 40 Byte lang.
TCP: th_win=32120, th_sum=fd32, th_urp=0Das TCP-Window. Es ist 32120 Byte gross und ist als eine Art Kredit zu verstehen, den diese Maschine der anderen gibt: Du darfst soviele Daten schicken, ohne auf eine Antwort (Acknowledgement) von mir warten zu müssen. Dann eine Checksumme und der Urgent-Pointer: wo fängt im Datenstrom die wichtige Information an? (Wird kaum benutzt...)
TCP: 00000000 020405b4 0101080a 000d77fe 39fbc2da |..........w.9...| TCP: 00000010 01030300 |.... |Tja, und hier die Extentions. IP-Trace auf dieser Maschine (AIX 4.3.2, ML02) ist nicht in der Lage, die Options richtig zu übersetzen....
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL