UDP-Mythen: was stimmt, was nicht?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Mau

Betreff: UDP-Mythen: was stimmt, was nicht?

BeitragFr, Aug 25, 2006 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem ich hier alle möglichen Threads zu UDP durchgerackert habe, habe ich bemerkt, das dazu anscheinend viele Mythen existieren, die jeder anders beantwortet. Das ist ziemlich verwirrend und ich frage mich, ob das mal jemand, der sich mit diesem Thema wirklich auskennt, eindeutig beantworten könnte:

1. Zerstückelte Pakete?
Oft liest man hier von der Gefahr, das einzelne UDP-Pakete nur unvollständig ankommen können und man deshalb eine CRC-Checksummenprüfung etc. einbauen müsste. Andere wiederrum meinen, das zwar Pakete verloren gehen (oder die Reihenfolge durcheinander kommt), aber WENN ein Paket ankommt, ist dies auf jeden Fall komplett. Ja, was stimmt denn nun?

2. Senden per Bank?
Was genau ist ein UDP-Paket? Folgendes Beispiel:
Code: [AUSKLAPPEN]

WriteByte Stream, 1
WriteString Stream, "Blah!"
SendUDPMsg Stream, ip, port

Ist das nun ein Paket oder sind es zwei, die nacheinander geschickt werden? Kann man also sicher sein, das alle Daten (WENN sie ankommen) auch vollständig ankommen?

Einige hier meinen, das Blitz daraus zwei Pakete macht, also einer der obigen Werte nicht ankommen könnte. Deshalb sollte man entweder nur einen einzigen String versenden oder gleich eine Bank.

Aber wie kann man unter Blitz (nicht BlitzMax) eine Bank versenden?
Alles muss, nichts kann!
  • Zuletzt bearbeitet von Mau am Fr, Aug 25, 2006 12:38, insgesamt einmal bearbeitet
 

$tankY

BeitragFr, Aug 25, 2006 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Bei UDP kann es passieren, dass Daten verloren gehen, bei TCP hingegen wird geprüft, ob alles angekommen ist und ob es in der richtigen Reihenfolge ist. Dies übernimmt jedoch Blitz.

2. Ich denke -bin mir nicht sicher-, dass Blitz die Pakete sinvoll zerkleinert und diese auch in gleicher Reihenfolge ankommen.

Vertex

BeitragFr, Aug 25, 2006 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
1. user posted image
Es ist etwas schwer zu erklähren... UDP setzt auf IP auf, genauso, wie TCP (das sind sogenannte Layer im ISO OSI Modell)
Ein UDP Packet enthält, wie oben zu sehen, eine CRC Prüfsumme. Wird ein Packet nicht korrekt empfangen, stimmt die Prüfsumme nicht mehr überein und das Packet wird verworfen.

Packete werden zerstückelt, das ist auch bei TCP der Fall, da dies das Internet Protokoll(eben IP) regelt. IP kümmert sich auch wieder um die Zusammensetzung der sogenannten Fragmente, da ein Fragmentoffset mit gesendet wird.

2. Nein, das ist ein Packet bei UDP wohlgemerkt. Bei TCP sieht es in Blitz anders aus.

Also, Blitz hat intern einen Puffer, in dem er die Daten solange sammelt, bis sie mit SendUDPMsg versendet werden. Das hat den Vorteil, dass du nicht wegen einem WriteByte ein Packet versenden musst, das vllt. 150 Byte an Protkolloverhead hat.

Bei TCP ist das bei Blitz anders. Nachrichten werden SOFORT als Packet versendet und auch SOFORT empfangen. Das ist sehr ineffizient, so, dass ein künstlicher Buffer über eine Bank möglich ist. Ich habe es in meinen Netzwerkmodul für BlitzMax wie bei UDP geregelt. Da gibt es auch TCPStream.SendMsg().

Ein Bank kann durch WriteBytes versendet werden und mit ReadBytes empfangen. Diese gehören ja auch zu den Streambefehlen und bei Blitz sind Dateien, TCP und UDP numal Streams(ein sehr geniales Konzept).

mfg olli
 

Mau

BeitragFr, Aug 25, 2006 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex: Danke dir für die gute Erklärung. Da die Prüfsumme bei UDP ja (laut Wikipedia) nur optional ist, war ich nicht sicher, ob Blitz die auch benutzt. Also kann ich ganz sicher sein, das ein Paket komplett ankommt, WENN es ankommt, oder?

Warum quälen sich hier dann viele mit eigener CRC-Überprüfung? Ist doch dann völlig umsonst Rolling Eyes

Und die zweite Frage ist ja dann auch beantwortet: ich kann also mehrere WriteBytes, WriteInts, etc. zusammenhängen, aber erst wenn ich sie abschicke, werden alle Daten in einem einzigen Paket abgeschickt, nicht etwa in mehreren. Das ist also das gleiche, als würde ich eine Bank versenden, nur das Blitz das eben intern regelt. Habe ich hoffentlich so richtig verstanden.
Alles muss, nichts kann!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group