Socket send : Reihenfolge der Daten
-
Hi !
Sorry, für den blöden Titel, mir ist nix anderes eingefallen...
Also, es geht mal wieder um (Linux) Sockets. In Beejs Netzwerktutorial habe ich gelesen, dass die Daten die send() verschickt evtl. aufgesplittet werden, und vom Client in anderer Reihenfolge bzw. in Stückchen empfangen werden.
Leider steht dort nicht, wie oft send meine Datenpakete aufstückelt, und wie groß die Wahrscheinlichkeit ist, dass die Daten korrekt ankommen.Also:
Sind die Aufstückelungen von send so penetrant, dass ich bei recv checken *muss* ob alles OK ist? Danke für Antwort
-
Das Problem betrifft doch AFAIK nur TCP, da kümmert sich aber das Protokoll um die Aufteilung der Packete (siehe TCP Frame). Bei UDP ist die Packetgröße glaub ich egal. Du musst wohl nur mit Packetfiltern und IDS Rechnen, die bei zu großen Packeten vielleicht einen Angriff "erkennen"
-
Hi !
Es geht mir tatsächlich um TCP, und die Pakete sollen nur wenige Kilobyte (~10kb) groß sein.
Muss ich da auf die Reihenfolge achten?
-
nö, TCP kümmert sich um alles von alleine AFAIK
-
Um Pakete oder Reihenfolgen mußt du dich bei TCP nicht kümmern, das Protokoll gibt dir als Applikation die Illusion, mit einem perfekten Bytestrom zu arbeiten. (Das heißt natürlich im Umkehrschluss, dass von deinen gesendeten Paketen beim Empfang strukturell nicht mehr viel übrig ist. Du sendest beispielsweise 2 Pakete: "hello" und "world". Es könnte jetzt sein, dass "helloworld" empfangen wird. Es kann auch sein, dass "he", "ellow", "orld" empfangen wird.)
-
Hi !
Danke, genau so etwas wollte ich hören
Wie groß ist denn die Wahrscheinlichekeit nun dass die Pakete nicht in einem Stück ankommen?
-
Hi,
wenn die Packete < 1500Byte ist die Wahrscheinlichkeit, dass die Daten am
Stueck kommen sehr gross.Packete > 1500Byte gibt es im Internet nicht und muessen fragmentiert werden.
Aber wie schon gesagt wurde, darum musst du dich nicht kuemmern, TCP kuemmert
sich darum, dass die Daten wieder korrekt zusammengesetzt werdenmfg
v R
-
Um oben erwähntem Problem zu entgehen, implementiert man ein öööh Layer 5 (? Gemäss OSI/ISO oder?) protokoll...
Hierzu sei folgender Beitrag erwähnt: (etwas runter scrollen)
http://www.c-plusplus.net/forum/topic,6636.html-junix
-
Hi,
Stevens geht auf dieses Problem auch ein, allerdings ist es nicht noetig,
ein Protokoll zu implementieren. Bin aber grad auf der Arbeit, kann daher
jetzt nicht nachschauen.Ich schau daheim nochmal nach, wie es Stevens geloest hat. Ich glaub er
hat fuer send() bzw. recv() en Wrapper implementiert. Ich schau aber
nochmal nach.mfg
v R