2.1 Die Maxpackets

Einer der elementarsten Teile der Netsettsing, sind die Maxpackets.

Die Maxpackets, als CoD Befehl cl_maxpackets, werden im Allgemeinen wie folgend beschrieben: “..Der Configbefehl cl_maxpackets bestimmt die Anzahl der maximal vom Client verschickten Gameworldupdates pro Sekunde..”. Da dies eine doch sehr oberflächliche Beschreibung ist, werden wir uns in diesem Artikel etwas tiefergehend mit den cl_maxpackets beschäftigen.

Auch wenn die Entwickler immer meinten sie hätten für Call of Duty 2 – und auch für CoD4 – eine neue Enginge entwickelt, basiert diese wohl doch, zumindest zu 95%, auf der Quake3 Engine. Somit sollten wohl auch alle Fakten bezüglich der Quake3 Engine auch auf die Call of Duty 2 Engine zutreffen. Da viele CoD2′ler auch CoD1′ler waren, beschäftigen sich die meisten mit der Maxpacketfrage schon seit mehr als 3 Jahren, oder sogar länger – eben bedingt durch den Bezug auf die Quakeengine.

Direkt zu Beginn ein kleiner Ausschnitt von dem, was der Leadcoder von SID einmal im IRC gesagt hat:

<TwentySeven> well packets at a divisor of your fps
<TwentySeven> 30 is good
<TwentySeven> every “frame” the client generates a command
<TwentySeven> a command is just a list of what buttons you have held down
<TwentySeven> and your viewangles
<TwentySeven> tiny packet like 20 bytes
<TwentySeven> now whatever your maxpackets is
<TwentySeven> is how many of those to send per packet
<TwentySeven> so cl_maxpackets 42 at 125fps
<TwentySeven> is ~ 3 commands per packet
<thnom> So why is it locked now ?
<TwentySeven> because
<TwentySeven> sending 125 packets per second is okay for 1v1 cpma
<TwentySeven> or q3
<TwentySeven> but for 14 player UrT
<thnom> Oh
<TwentySeven> thats 14*125 packets per second
<TwentySeven> essentially a ddos attack

Somit wäre schonmal geklärt, warum sich der Spielraum der Maxpackets nur in dem Bereich von 10-100 dreht. Höhere Maxpackets wuerden zwar nicht gleich zu einer DDoS Attacke des Servers führen, aber zu einer hohen Serverbelastung, somit zu Lag und ausserdem zu wesentlich mehr Traffic.

Das Q3 System habe ich bislang immer so verstanden, dass sowieso nur alle 50ms (bei sv_fps 20 – welches bei CoD2 leider nicht anders geht, ausser mit dem neusten PAM Mod) ein neuer Frame serverseitig berechnet wird und dann an die Clients verteilt wird. Es ist also vollkommen egal, ob von einem Player in den 50ms etwa 6,25 (cl_maxpackets 125/20) oder 1,5 (cl_maxpackets 30/20) Pakete ankommen, die werden sowieso nur in eine Queue gestellt und nacheinander später, wenn wieder ein Server frame generiert wird, weitergereicht und abgearbeitet.

Der zusammenhang von com_maxfps und cl_maxpacket scheint sehr vielen nicht ganz klar zu sein. Vielleicht hilft folgendes einigen bei ihren Connection-Einstellungen. Grundsätlich kann der Client pro Frame maximal ein Paket an den Server schicken.

com_maxfps 100 + cl_maxpacket 100 = 100 verschickte pakete
com_maxfps 76 + cl_maxpacket 100 = 76 verschickte pakete
com_maxfps 76 + cl_maxpacket 76 = 76 verschickte pakete

Natürlich verursachen zu niedrige Maxpackets, wie zum Beispiel 30, einen Kuenstlichen Lag, deshalb ist es gut, dass in den meisten Liegen die Maxpackets auf 60-100 beschränkt sind. Aber nicht nur für die Mitspieler sind zu niedrige Maxpackets fatal, auch für einen selber, denn wenn die Maxpackets falsch eingestellt sind, schickt der Client die generierten Commands mit Verzögerung – da nur jeden 2., 3. oder 4. Frame – an den Server. (Dazu mehr in einem anderen Teil von GameGuide)

Zum Beispiel:
com_maxfps 76 + cl_maxpacket 60 = 38 verschickte pakete

Für 76 FPS gibt es nur die Möglichkeit 76 Maxpackets einzustellen, da in den meisten Turnieren und Co. mindestens 60 Maxpackets gefordert sind. Stellt man nun aber 60 Maxpackets ein, nimmt die Enginge den nächst niedrigeren Wert, also 38 Maxpackets. Dies kommt – wie gesagt – dadurch, dass die Engine als Maxpackets-Divisior nur ganze Zahlen nehmen kann.

Wir sollten nun die Frage klären, welche Maxpackets wir in diesem Bereich waehlen sollten. Wie der Leadcoder schon sagte: “Ein teiler der FPS ist eine gute Wahl”. Wie wir aber auch wissen, es macht keinen alzugroßen Unterschied ob wir 2 Packete oder 6 Packete pro Frame verschicken. Manchmal ist weniger auch mehr, vor allem im Internet, so können wir Lag vermeiden. Der Teiler muss ein Integer-Wert sein. Ein Integer-Wert ist eine ganze Zahl, also 1,2,3..10 etc., nicht 1.2 oder 4.5. Dies beruht auf dem Quellcode der Quake-Engine. Warum dies so ist wird in einem anderen Teil der Serie erklärt.

Meine Empfehlungen:
FPS: 76 / Maxpackets: 76
FPS: 125 / Maxpackets: 63
FPS: 333 / Maxpackets: 84, bzw. 100

76,125,333 sind FPS-Werte bei denen der Strafejump funktioniert.

FPS: 250 / Maxpackets: 84
FPS: 100 / Maxpackets: 100
FPS: 60 / Maxpackets: 60

Ich habe versucht diesen Artikel möglichst niedrig im Niveau zu halten, damit er für jeden verständlich ist. Ich bin absichtlich nicht näher auf Übertragungsprotokolle etc. eingegangen. Sollte hierbei bedarf sein, nutz bitte die Kommentarfunktion.

Als Abschluss: Da sich der Befehl cl_packetdup auch auf die Maxpackets bezieht, folgend noch ein kleiner Hinweis:

<TwentySeven> “CL_packetdup is a multiplier, not a “number of packets to send” so CL_packetdup 0 and 1, both mean only one copy is sent. cl_packetdup 2 means two copies.

Comments
2 Responses to “2.1 Die Maxpackets”
  1. THETRUST@THEXCUT.DE sagt:

    das is doch ganz alter kaffee ;)

    is das heute immernoch nicht allen bekannt? schrecklich!

Trackbacks
Check out what others are saying...
  1. [...] erlaubt der deutsche Bereich der ESL sogar nur 125 FPS? Welche tiefergehende Wirkung haben die Maxpackets im Zusammenhang mit den [...]



Leave A Comment