Protokoll
MCCP
Kompression des Datenstroms. Billig, weit verbreitet und das Protokoll, das den lehrreichsten Fehler in der Geschichte dieses Projekts hervorgebracht hat.
Gemessene Verbreitung
216 von 886 eingetragenen Spielen — 24.4%
Die Spiele, die hier nicht mitgezählt sind, sind keine Spiele ohne das Protokoll. Ein Spiel zählt hier, wenn sein Server die Option in einem von uns beobachteten Handshake angeboten hat; der Rest sind Server, die sie uns nicht angeboten haben, und Server, deren Handshake wir nicht gelesen haben, und welches davon zutrifft, können wir Ihnen nicht sagen.
| Codebase | angeboten | identifiziert |
|---|---|---|
| CoffeeMUD | 31 | 32 |
| FluffOS | 24 | 28 |
| ROM | 13 | 55 |
| Evennia | 11 | 11 |
| DikuMUD | 8 | 35 |
| CircleMUD | 4 | 47 |
| MUCK | 3 | 24 |
| SMAUG | 2 | 20 |
| AresMUSH | 0 | 18 |
| CobraMUSH | 0 | 2 |
| PennMUSH | 0 | 34 |
| RhostMUSH | 0 | 40 |
| tbaMUD | 0 | 5 |
| TinyMUSH | 0 | 9 |
MCCP komprimiert den Strom vom Server zum Client mit zlib. Version 1 ist Telnet-Option 85 und
praktisch historisch; Version 2 ist Option 86 und das, was moderne Server aushandeln. Nachdem der
Server IAC SB MCCP2 IAC SE gesendet hat, gehört jedes folgende Byte zu einem einzigen durchgehenden
zlib-Strom.
Bei einem Textprotokoll ist das eine echte Ersparnis — MUD-Ausgabe lässt sich außerordentlich gut komprimieren —, und in der Diku- und der LP-Familie ist es verbreitet: Rund ein Drittel der von uns erhobenen Codebases handelt es aus.
Der Fehlerfall, und warum er hier zählt
Ein Client, der MCCP2 aushandelt und den Strom dann nicht dekomprimiert, empfängt ab der
Kompressionsmarke binären Müll. Kein Fehler, kein Verbindungsabbruch: Der Verbindungsbildschirm
kommt als Wand aus Ersatzzeichen an, und alles danach — die WHO-Antwort, jedes spätere MSSP, die
ganze Sitzung — ist verloren.
Das ist nicht hypothetisch. Unsere eigene Telnet-Bibliothek hat genau das getan. Sie handelte die Option aus, löste ihren Callback „Kompression aktiviert“ aus und dekomprimierte kein einziges Byte. Die Nutzlast ließ sich mit einem gewöhnlichen zlib-Aufruf sauber entpacken, und das machte es eindeutig, dass die Server im Recht waren und wir nicht. Dreizehn der achtunddreißig Codebases in unserer Erhebung waren betroffen, und solange das andauerte, konnten wir nicht beobachten, was diese Server nach dem Beginn der Kompression aushandelten — unsere Aufzeichnung ihrer Fähigkeiten blieb also hinter dem zurück, was sie konnten.
Es wurde upstream behoben. Ein Folgedefekt — der Inflater wird pro Lesevorgang neu erzeugt, statt für die Verbindung erhalten zu bleiben, was mitten in einem großen Verbindungsbildschirm scheitert — ist gemeldet und offen und betrifft das Ende der größten Bildschirme.
Zwei Dinge sollte ein Leser daraus mitnehmen. Ein Protokollwert auf dieser Seite ist ebenso sehr eine Messung unseres Crawlers wie eine des Hobbys, und wo wir wissen, dass er falsch war, sagen wir es. Und wenn Sie einen Client schreiben: MCCP auszuhandeln ist leicht, die Arbeit steckt darin, es richtig zu dekomprimieren.
Siehe auch
- ROM Der bekannteste Nachfahre von Merc und die Kampf-Engine, auf der ein großer Teil der Neunziger-MUDs aufgebaut wurde.
- DikuMUD Die Wurzel der Kampf-MUD-Familie. Level, Klassen, Ausrüstung und Area-Dateien — und eine Lizenz, die eine ganze Generation von Ableitungen geprägt hat.
- GMCP Das Generic Mud Communication Protocol — strukturierte JSON-Nachrichten neben dem Text und der Out-of-Band-Kanal, gegen den die meisten modernen Clients entwickeln.