Forum: PC-Programmierung TCP vs UDP (Dieser Betreff is > 15 Zeichen)


von Klaus (Gast)


Lesenswert?

Servus!

Ich Programmiere an einem Spiel, dass einen Multiplayermodus übers 
Internet hat. Im Moment läuft das über TCP. Die Bandbreite benötigte 
Bandbreite is relativ gering, also unkritisch. Aber es gibt immer wieder 
spürbare Verzögerungen.

UDP soll ja schneller, als TCP sein. Wie groß is dieser Unterschied in 
der Praxis? Würde ich mit UDP eine spürbar geringere Latenz bei der 
Übertragung übers Internet haben?

Gruß,
Klaus

von Fluffy (Gast)


Lesenswert?

Di wichtigste Frage ist, ob du es dir leisten kannst ein Packet zu 
verlieren. Dann ist die Frage ob TCP oder UDP schon beantwortet.

Bezueglich Geschwindigkeiten... was spricht dagegen das mal zu messen ?

von (prx) A. K. (prx)


Lesenswert?

Klaus wrote:

> UDP soll ja schneller, als TCP sein. Wie groß is dieser Unterschied in
> der Praxis? Würde ich mit UDP eine spürbar geringere Latenz bei der
> Übertragung übers Internet haben?

Nur wenn du jedesmal eine neue TCP-Verbindung aufbaust. Bei einer 
bestehenden TCP-Verbindung und passender Parametrisierung (NODELAY 
Option) wird die Latenz primär von der DSL-Strecke bestimmt - jedenfalls 
ohne Fastpath - und dem Rest vom Internet. Ob TCP oder UDP ist da nicht 
wesentlich.

Ohne die NODELAY Option kann es allerdings zu Verzögerungen kommen, weil 
der Network Stack u.U. versucht, genug Daten für eine volle MTU 
einzusammeln.

PS: Eine saubere Leitung vorausgesetzt.

von Nico (Gast)


Lesenswert?

UDP ist nicht schneller. Der Vorteil von UDP ist aber das im Protokol 
nicht verlangt wird das alle Pakete ankommen. Und auch in der selben 
Reihenfolge ankommen müssen.

Verlorene Pakete bei TCP:

Sender - Pkt4 - Pkt3 - Pkt2 - Pkt1 - Empfänger
      ----------IP Strecke-----------

Stellen wir uns mal vor jetzt passiert folgendes:
Pkt1 kommt beim Empfänger an, alles toll
Jetzt kommt aber Pkt3 statt Pkt2, was passiert? Der Empfänger sendet dem 
Sender einen Retransmission Request, der Empfänger muss jetzt ab Pkt 2 
alles nochmal senden obwohl vlt. schon 20 Packets auf den Leitungen sind 
und beim Sender ankommen.

Bei UDP fallen verlorene Packets nicht auf (zumindest nicht auf 
Protokollebene). Natürlich muss die darüberliegende Software dann aber 
mit sowas klarkommen.

Also besonders wenn es auf Latenzen ankommt ist UDP meist die bessere 
Wahl, man muss halt dann in der darüberliegenden Schicht dafür sorgen 
das Informationen interpoliert werden können. Und WICHTIGE Sachen dann 
auch doch wirklich ankommen.

Die alte UT Engine hatte da ein paar sehr interessante Informationen zu.

von Klaus (Gast)


Lesenswert?

Ein Packetverlust darf bei mir nicht sein. Dass müsste ich dann selber 
sicherstellen, dass das Packet neu übertragen wird.

Und bis das ordentlich implementiert ist, bräuchte ich ne Weile ;) 
Desshalb wollte ich erstmal nach Erfahrungswerten fragen.

Über die Theorie von UDP und TCP is ja genügend im Netz zu finden. Aber 
wie groß die Effekte in der Praxis sind, hab ich noch nichts drüber 
gefunden.

von Nico (Gast)


Lesenswert?

> Und auch in der selben Reihenfolge ankommen müssen.

Soll natürlich "Und auch nicht in der ...." heissen

von Klaus (Gast)


Lesenswert?

die nodelay Option kannte ich noch nicht. Vielleicht is das genau, dass 
was ich suche.

von (prx) A. K. (prx)


Lesenswert?

Der vollständige Name ist TCP_NODELAY.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.