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
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 ?
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.
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.
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.
> Und auch in der selben Reihenfolge ankommen müssen.
Soll natürlich "Und auch nicht in der ...." heissen
die nodelay Option kannte ich noch nicht. Vielleicht is das genau, dass was ich suche.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.