TCP/IP Header - Wireshark

Hallo alle,

ich weiß jetzt nicht genau ob ich des Thema jetzt hier oder eher Richtung Programmierung richtig ist.
Ich versuche zurzeit mich ein bisschen in XMPP/Jabber einzuarbeiten um Testweise mit dem GWT einen kleinen Client zu schreiben. Da ich mich durch die RFC`s schon recht weit durchgekämpft habe wollte ich einfach mal testweise die Kommunikation zwischen XMPP-Server (chat.facebook.com) und XMPP-Client (Pidgin) mitlesen.

Hat mit Wireshark auch ganz gut geklappt den -Tag und die Einigung auf TLS () konnte icha uch gut mitlesen, danach ists halt verschlüsselt - aber mehr wollte ich auch zuerst gar nicht.
Ich bin bloß auf ein paar Saceh gestoßen die ich gar nicht verstanden habe. Ich hatte mich so oder so schon gefragt wie ich am besten die XML-Knoten versende, ich wars halt gewohnt einfach bis zum nächsten Zeilenumbruch zu lesen, hätte mich aber auch damit anfreunden können einfach Zeichenweise einzulesen und die als Steuerzeichen zu verwenden. Bloß scheint des jetzt so dass Facebook und Pidgin die ganzen Knoten als eins Senden. Und dass über dem Eigentlich xml noch 40-50 Bytes header kommen, wo auch die Länge drinsteht.

Frame 17: 320 bytes on wire (2560 bits), 320 bytes captured (2560 bits)

dann noch

Ethernet II, Src: Avm_d0:25:3d (00:04:0e:d0:25:3d), Dst: QuantaCo_3d:c8:9d (e8:9a:8f:3d:c8:9d)

und

Internet Protocol Version 4, Src: 69.171.227.26 (69.171.227.26), Dst: 192.168.178.48 (192.168.178.48)

und

Transmission Control Protocol, Src Port: xmpp-client (5222), Dst Port: 8210 (8210), Seq: 1, Ack: 109, Len: 266

und dann erst der XML-Code.

Was genau bedeutet des alles genau? Des Datum , Empfänger und Sender ip und die Länge kann ich auch rauslesen mehr aber nicht

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt dann auch jeder Buchstabe so nen riesen Header?

Kann ich des auch iwie zusammenfassen.?

Wäre froh über nen paar Hinweise oder Erklärungen?
Danke.

Hi, Paket ist Paket, egal wie viel drin ist. Und wenn in einem nur ein Byte steht. Dann geht alles andere mit heraus.

Hi
das was du dort siehst ist TCP/IP, Whireshark ist ja ein Werkzeug für Netzwerk Techniker / Administratoren um zb Fehler im IP Stack oder in der Datenkommunikation zu finden.

Was du dort siehst ist :

Frame 17: 320 bytes on wire (2560 bits), 320 bytes captured (2560 bits)

Der Frame, wie gross das er im Transport mit 2560 Bit/sec geflossen ist wieviel davon empfangen / abgefangen wurde

Dann:
Ethernet II, Src: Avm_d0:25:3d (00:04:0e:d0:25:3d), Dst: QuantaCo_3d:c8:9d (e8:9a:8f:3d:c8:9d)

Das ist die dem Protokoll unterliegende Schicht in dem Fall Ethernet 2 (Es gibt auch andere) du siehst die Quelle als Mac Adresse (an dieser Stelle gibt es noch kein Protokoll also auch keine IP Adresse) und das Ziel als Mac Adresse

Weiter mit:
Internet Protocol Version 4, Src: 69.171.227.26 (69.171.227.26), Dst: 192.168.178.48 (192.168.178.48)

Hier beginnt der IP teil von TCP/IP die Version 4 ist die derzeit genutzte auf der ganzen Welt (an IP V 6 wird gerade gearbeitet einige Provider setzen es auch bereits ein) hier ist jetzt auch bereits eine Adresse in numerischer Form zu sehen beginnend mit Quelle endet mit Ziel.

Zum Schluss:
Transmission Control Protocol, Src Port: xmpp-client (5222), Dst Port: 8210 (8210), Seq: 1, Ack: 109, Len: 266

Das ist der TCP (Transmission Control Protokoll) teil von TCP/IP hier steht der Quell Port (Jede Server Applikation sendet und empfängt auf einem der über 64000 TCP Ports zb http ist port 80 ) in deinem Fall ist die Quelle der xmpp-client der auf Port 5222 dem Ziel auf Port 8210 ein sogenanntes Ack gesendet hat.

Alles das gehört zum sogenannten Header des Paketes ohne diese Angaben wüsste der sendende nicht wohin und der empfangende bekäme auch nichts.
Der Teil welche für dich interessant ist steht in den Daten, jedes der gecapturten Pakete folgt logisch auf das nächste das ist der transport Stream die Pakete haben Sequenz Nummern und sollten auch aufsteigend nacheinander kommen.

Normalerweise würde dein Programm irgendwo seine Einstellungen einlesen dort steht bei Jabber ja Dinge wie wer ist der Server / User
das Password und ganz wichtig der Port, nicht jeder Jabber Server arbeitet auch auf dem gleichen Port.

Beim Aufbau der Verbindung wird dein Client über TCP/IP den Server kontaktieren vorausgehend wirst du im Whireshark Datenstrom noch Dinge sehen wie Anfragen nach wer ist jabber.xxx.de usw diese Anfragen gehen alle Automatisch das macht der TCP Stack des Betriebssystems der ist es auch der etwas mit dem Header anfangen kann.

Ich würde dir empfehlen wenn du das Thema vertiefen möchtest dir mal die ISO/OSI Referenz an zu sehen:

http://de.wikipedia.org/wiki/OSI-Modell

Sieh dir die Stellen an unter Anwendungs Schicht das wird dir weiter helfen.

MfG

Andre

Oops, so leid es mir tut, aber da kann ich Dir zur Zeit nicht weiterhelfen.

Hallo alle,

ich weiß jetzt nicht genau ob ich des Thema jetzt hier oder
eher Richtung Programmierung richtig ist.
Ich versuche zurzeit mich ein bisschen in XMPP/Jabber
einzuarbeiten um Testweise mit dem GWT einen kleinen Client zu

Hallo,

im Detail kenne ich mich damit auch nicht aus. Aber Deine Vermutung ist richtig, wenn Du jeden Buchstaben einzeln verschickst, dann bekommt jeder einen Header. Richtig: Das ist eine gewaltiger Overhead und die neuen Internet Protokolle sind in dieser Beziehung sehr schlecht und uneffizient :frowning:

Da musste mal den nächsten fragen, damit kenn ich mich nicht aus. Nich mach zwar Netzwerk, aber nicht auf Programmierungsebene.

LG

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

Ja, natürlich. genau genommen handelt es sich um 3 Header. Den für Ethernet, den für IP und den füt TCP!

GG

Hallo,
bin leider bzgl. des Protokolls zwischen deinem Client und XMPP-Server überfragt.
Aber so ungefähr, wie du es darstellst, sieht jedes TCP/IP-Päckchen aus. Und wenn du Bytes einzeln sendest, kriegst du auch jedesmal den Overhead. Hilft das weiter?

Was genau bedeutet des alles genau? Des Datum , Empfänger und
Sender ip und die Länge kann ich auch rauslesen mehr aber

Korrekt so.

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

Ich glaube ja, was sonst kann man sich noch wünschen!
Wireshark ist gut aber sehr umfangreich. Du hast doch schon viel Kenntnisse davon.

Ich schreibe die Antwort direkt bei den Headern rein.

Gruß

CharlyP

Hallo alle,

ich weiß jetzt nicht genau ob ich des Thema jetzt hier oder
eher Richtung Programmierung richtig ist.
Ich versuche zurzeit mich ein bisschen in XMPP/Jabber
einzuarbeiten um Testweise mit dem GWT einen kleinen Client zu
schreiben. Da ich mich durch die RFC`s schon recht weit
durchgekämpft habe wollte ich einfach mal testweise die
Kommunikation zwischen XMPP-Server (chat.facebook.com) und
XMPP-Client (Pidgin) mitlesen.

Hat mit Wireshark auch ganz gut geklappt den -Tag und
die Einigung auf TLS () konnte icha uch gut
mitlesen, danach ists halt verschlüsselt - aber mehr wollte
ich auch zuerst gar nicht.
Ich bin bloß auf ein paar Saceh gestoßen die ich gar nicht
verstanden habe. Ich hatte mich so oder so schon gefragt wie
ich am besten die XML-Knoten versende, ich wars halt gewohnt
einfach bis zum nächsten Zeilenumbruch zu lesen, hätte mich
aber auch damit anfreunden können einfach Zeichenweise
einzulesen und die als Steuerzeichen zu verwenden.
Bloß scheint des jetzt so dass Facebook und Pidgin die ganzen
Knoten als eins Senden. Und dass über dem Eigentlich xml noch
40-50 Bytes header kommen, wo auch die Länge drinsteht.

Frame 17: 320 bytes on wire (2560 bits), 320 bytes captured
(2560 bits)
****** Nachricht von Whireshark, beschreibt den gesamten Frame
dann noch

****** äußere Rahmen des Frames, mit den Hardwareadressen mit den Netzkarten Herstellern = insgesamt 18 Byte, am Ende des Frames stehen auch noch 4 Bytes Prüffeld

Ethernet II, Src: Avm_d0:25:3d (00:04:0e:d0:25:3d), Dst:
QuantaCo_3d:c8:9d (e8:9a:8f:3d:c8:9d)

und
********* IP-Header 20 Byte
Internet Protocol Version 4, Src: 69.171.227.26
(69.171.227.26), Dst: 192.168.178.48 (192.168.178.48)

und
TCP Header 20 Byte, Portadressen, Quittungszähler etc.
Transmission Control Protocol, Src Port: xmpp-client (5222),
Dst Port: 8210 (8210), Seq: 1, Ack: 109, Len: 266

und dann erst der XML-Code.

Was genau bedeutet des alles genau? Des Datum , Empfänger und
Sender ip und die Länge kann ich auch rauslesen mehr aber
nicht

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

******** ja, sogar noch schlimmer, jedes Paket muss mindestens 64 Byte lang sein, sonst wird der Datenbereich mit Füllbytes aufgefüllt.

Kann ich des auch iwie zusammenfassen.? Nein, es gibt ab einer Geschwindigkeit von 1 Gbit/s. eine andere Paketgröße, aber zum Nachtel von kurzen Paketen.

Wäre froh über nen paar Hinweise oder Erklärungen?
Danke.

Hallo,

für Grundlagenwissen über die Kommunikation in Rechnernetzen ist dieser Artikel ein guter Einstiegspunkt:
http://de.wikipedia.org/wiki/OSI-Modell

Das XML-Dokument, das Sie übertragen wollen, ist die Nutzlast der Nachricht, die wird in ein TCP-Paket gesteckt, das wiederum in ein IP-Paket, das wiederum in ein Ethernet-Paket (alias „Frame“). Die Pakete gehören zu verschiedenen Schichten des OSI-Modells (siehe Link). Die verschiedenen Header, die Sie mit Wireshark sehen, sind so eine Art Adressaufkleber auf den jeweiligen Paketen. Und wenn Sie jeden Buchstaben einzeln senden, dann wird tatsächlich jeder einzelne auf diese Weise mehrfach verpackt und auf die Reise durchs Netz geschickt.

Als Anwendungsprogrammierer bauen Sie diese Pakete nicht selbst zusammen. Sie rufen eine Bibliotheksfunktion auf und übergeben die Nutzlast (das XML-Dokument) als Parameter. Das GWT, das Betriebssystem und schließlich der Treiber des Netzwerkadapters kümmern sich um die Verpackung. Wie das konkret mit dem GWT geht, weiß ich nicht.

Als Anwendungsprogrammierer sollten Sie auch nicht XML-Dokumente „zu Fuß“ schreiben bzw. parsen (indem Sie Zeilenumbrüche oder spitze Klammern interpretieren). Auch dafür gibt es fertige Bibliotheken. Vielleicht hilft Ihnen das beim Einstieg:
http://code.google.com/intl/de-DE/webtoolkit/doc/lat…

Viel Spaß noch beim Tüfteln!
Tom

Was genau bedeutet des alles genau? Des Datum , Empfänger und

siehe z.B. hier: http://einstein.informatik.uni-oldenburg.de/rechnern…
bzw für etwas mehr Details: http://www.itwissen.info/definition/lexikon/TCP-Head…

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

Wenn Deine Telegramm aus nur einem Byte (Zeichen) besteht, dann ist trotzdem der TCP-Header jedesmal mit auf der Leitung.

Der TCP-Header enthält die gesamte Adressierungs-Information. Aber damit mußt Du Dich im Programm nicht rumschlagen. Die Header-Info wird vom TCP-Stack verarbeitet und die Anwendung bekommt nur den Datenteil z.B. bei einem „receive“.

Ebenso bei einem TCP send mußt Du Dich um den Header nicht kümmern, das macht der TCP-Stack.

Gruß Klaus

Hallo thedafix,

war auf Dienstreise,versuche so gut es geht deine Fragen zu beantworten, Die höheren Protokolle die du
erwähnst kenne ich nicht aber egal.

Hallo alle,

ich weiß jetzt nicht genau ob ich des Thema jetzt hier oder
eher Richtung Programmierung richtig ist.
Ich versuche zurzeit mich ein bisschen in XMPP/Jabber
einzuarbeiten um Testweise mit dem GWT einen kleinen Client zu
schreiben. Da ich mich durch die RFC`s schon recht weit
durchgekämpft habe wollte ich einfach mal testweise die
Kommunikation zwischen XMPP-Server (chat.facebook.com) und
XMPP-Client (Pidgin) mitlesen.

Hat mit Wireshark auch ganz gut geklappt den -Tag und
die Einigung auf TLS () konnte icha uch gut
mitlesen, danach ists halt verschlüsselt - aber mehr wollte
ich auch zuerst gar nicht.
Ich bin bloß auf ein paar Saceh gestoßen die ich gar nicht
verstanden habe. Ich hatte mich so oder so schon gefragt wie
ich am besten die XML-Knoten versende, ich wars halt gewohnt
einfach bis zum nächsten Zeilenumbruch zu lesen, hätte mich
aber auch damit anfreunden können einfach Zeichenweise
einzulesen und die als Steuerzeichen zu verwenden.
Bloß scheint des jetzt so dass Facebook und Pidgin die ganzen
Knoten als eins Senden. Und dass über dem Eigentlich xml noch
40-50 Bytes header kommen, wo auch die Länge drinsteht.

Frame 17: 320 bytes on wire (2560 bits), 320 bytes captured
(2560 bits)

>Eine Zussamenfassung des Rahmens, freundlicherweise >erzeugt von Wireshark.Nicht so wichtig

dann noch

Ethernet II, Src: Avm_d0:25:3d (00:04:0e:d0:25:3d), Dst:
QuantaCo_3d:c8:9d (e8:9a:8f:3d:c8:9d)

> Das unterste Protokll einer jeglichen >Datenübertragung. Werkelt normalerweise ohne zu >murren
>unerkannt vor sich hin. Ohne Ethernet ginge gar >nichts.
>Hier wird mit den MAC Adressen gearbeitet. Diese 6Byte
>Adressen, MAC Adresse genannt. Sind idr fest von der Hardware vorgegeben, die ersten drei Bytes stehen für den Hersteller der Netzwerkkarte. Wireshark dekodiert das. So wird dann im lokalen LAN (WLAN) adressiert.

und

Internet Protocol Version 4, Src: 69.171.227.26
(69.171.227.26), Dst: 192.168.178.48 (192.168.178.48)

und

6:Transmission Control Protocol, Src Port: xmpp-client (5222),

Dst Port: 8210 (8210), Seq: 1, Ack: 109, Len: 26

und dann erst der XML-Code.

Was genau bedeutet des alles genau? Des Datum , Empfänger und
Sender ip und die Länge kann ich auch rauslesen mehr aber
nicht

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

Kann ich des auch iwie zusammenfassen.?

Wäre froh über nen paar Hinweise oder Erklärungen?
Danke

Leider zickt mein Firefox hier rum.
69.171.227.26 Ethernet
Die nächste Puppe –> IP
Die nächste Puppe –> TCP
Die nächste Puppe –> die höheren Protoklle

Wenn ich also jeden Buchstaben/Byte einzeln schicke, kriegt
dann auch jeder Buchstabe so nen riesen Header?

Ja, aber nicht nur das, Ethernet fäng erst ab 64 Byte an zu arbeiten. In diesem Fall würden 63 Leerbytes hinzugefügt (Padding)

Kann ich des auch iwie zusammenfassen.

Wenn ich mal ein Telnet betrachte.
Ein Zeichen eingeben ENTER die ganzen Protokolle
Telnet, TCP, IP, Ethernet werden automatisch erzeugt.
Mehrere Zeichen eingeben ENTER, geht dann genau so.

Ich hoffe das meine Antwort geholfen hat.

Gruß

Armin

Um das XML ordenltich auszulesen, verwende am besten einen XML-Parser. Dann ist egalt, ob das Zeug zeilenweise oder alles in einer Zeile kommt.
Für den TCP/IP-Header ist die Länge der Nachricht relevant. Wenn Du ein Zeichen schickst, kommt ein entsprechend großer Header drum herum. Der bleibt so lange, wie das Paket noch in eine MTU passt, dann wird das paket in mehrere aufgesplittet und jeder erhält wieder so einen Header.

Gruß
Markus