Wie geht man mit UDP um?
-
Hi
Bei Performancekritischen Sachen nimmt man UDP, aber wie macht man das überhaupt?
Dass die Pakete nicht in der richtigen Reihenfolge ankommen ist ja noch vertretbar, aber wie geht man damit um, dass die möglicherweise gar nicht, oder doppelt ankommen?
Und wie stehts mit Sicherheit, weil da kann ja jeder alles mögliche senden(Vor allem wenn es ein Open-Source Programm ist?)
Und wenn man das alles selbstimplementiert, ist der Geschwindigkeitsvorteil gegenüber TCP nicht schon wieder dahin?
-
Und wie stehts mit Sicherheit, weil da kann ja jeder alles mögliche senden(Vor allem wenn es ein Open-Source Programm ist?)
Das hat aber nichts mit UDP oder nicht zu tun.
-
Und wenn man das alles selbstimplementiert, ist der Geschwindigkeitsvorteil gegenüber TCP nicht schon wieder dahin?
Hab ich mich auch schon gefragt.
Könnte auch eher sein, das UDP noch andere Vorteile als die nachgesagt Geschwindigkeit hat.
Z.B. Multicasting.
Ich könnte mir Vorstellen, dass es sinnvoll ist UDP dort einzusetzten wo Geschwindigkeit erforderlich ist, es jedoch nichts macht wenn Frames vorloren gehen (z.B. Webradio).
-
Naja, man verwendet ja UDP z.B. auch für Spiele, wegen des Geschwindigkeitsvorteils und da ist es schon ein großer Unterschied ob es beim anderen ankommt, dass der Panzer nun kaputt ist.
Die einzige Möglichkeit die mir da einfällt wäre eine Rückmeldung seitens des Servers, aber das würde doch unheimlich viel Geschwindigkeit fressen, oder nicht?
-
werde heute abend mal im tanenbaum nachlesen...
-
JustAnotherNoob schrieb:
Und wenn man das alles selbstimplementiert, ist der Geschwindigkeitsvorteil gegenüber TCP nicht schon wieder dahin?
Du kannst ja wesentlich einfachere Maßnahmen ergreifen. So dürfte ja zB ein einfacher Zähler reichen, damit man veraltete/doppelte Pakete rauswerfen kann.
Für wichtige Informationen kann man ja noch eine TCP-Verbindung offen haben.
-
Soweit ich weiß gibt es dafür Priority Systeme. Je nach Priorität wird TCp oder UDP benutzt. Bei UDP wird dann je nach priorität entschieden, ob der server eine Antwort senden muss doer nicht.
Das ganze erfodert dann natürlich ein etwas ausgereifertes Protokoll, aber das dürfte auch nicht das Problem sein.
-
Wäre es auch eine gute Idee den Counter auch für das fehlen von Paketen verantwortlich zu machen, also regelmäßig ein Referenzpaket zu senden(weil, wenn sonst lange Zeit gar kein Paket kommt würde ja nix passieren) und wenn dann eine Zahl übersprungen wurde fordert der Server das Paket erneut an?
Oder würde das zu Blockaden führen?
-
und noch: wie sieht es jetzt eigentlich mit der Sicherheit speziell in Open-Sourcesystemen aus?
-
und noch: wie sieht es jetzt eigentlich mit der Sicherheit speziell in Open-Sourcesystemen aus?
Was meinst Du mit Sicherheit?
Es macht für die Sicherheit keinen Unterschied ob TCP/IP od. UDP.
-
Ich hab auch keine Ahnung wie man bei TCP Sicherheit realisiert.
-
z.B. mit SSL
-
JustAnotherNoob schrieb:
Wäre es auch eine gute Idee den Counter auch für das fehlen von Paketen verantwortlich zu machen, also regelmäßig ein Referenzpaket zu senden(weil, wenn sonst lange Zeit gar kein Paket kommt würde ja nix passieren) und wenn dann eine Zahl übersprungen wurde fordert der Server das Paket erneut an?
Oder würde das zu Blockaden führen?Nicht erneut anfordern! Dann kannst du ja gleich TCP nehmen.
Sieh es einfach so: Bei einem Spiel werden die meisten Daten wohl versendet um Bewegungen zu übermitteln. Sagen wir mal das sind 100 Änderungen pro Sekunde. Wenn du nun 25% Ausfallquote hast, dann bekommst du immer noch 75 Änderungen mit. Das dürfte dem Benutzer nicht wirklich auffallen. Also macht es keinen Sinn diese Informationen abgesichert zu schicken. Je nach Spiel dürften selbst kleine Ruckler akzeptabel sein (auch wenn alle Pr0gam0r gleich wieder rumheulen :)).
Wenn du dagegen eine Nachricht hast, die nicht verloren gehen darf (zB Spieler X hat verloren), dann nimmst du dafür TCP.
Wie makkurona schon gesagt hast, solltest du dir vorher überlegen welche Nachrichten wichtig sind und entsprechend über TCP oder UDP schicken.
JustAnotherNoob schrieb:
und noch: wie sieht es jetzt eigentlich mit der Sicherheit speziell in Open-Sourcesystemen aus?
Naja, du kannst dich entweder auf die User verlassen oder du musst eben Zeit in Anticheating Maßnahmen investieren. Du musst also für jedes ankommende Paket bei jedem Client die Plausibilität prüfen. (Und dabei dann auch die Ausfallrate berücksichtigen).
Aber das ist unabhängig vom Transportprotokoll.