EulerHobeln:Protokoll O2Mega
Einordnung | |||
---|---|---|---|
Level 2 | ÜDP | VRace | Lobby |
Level 1 | O2Mega | ||
Transport | TCP |
Das O2Mega-Protokoll realisiert eine Datenübertragung durch mehrere Tunnel zwischen zwei Rechnern über eine TCP/IP Verbindung. Maximal können 65536 Tunnel gleichzeitig genutzt werden, wobei jeder duch eine Portnummer identifiziert wird.
Das Protokoll entstand im Rahmen des EulerHobeln-Projekts.
Konzept
Über eine bestehende TCP/IP-Verbindung zwischen dem Client und dem Server werden TunnelBlöcke ausgetauscht. Diese enthalten neben den Daten auch den Empfängerport.
Es gibt im Gegensatz zu TCP/IP weder halboffenen Verbindungen noch den Auf- bzw. Abbau einer Verbindung. Jede Seite kann immer auf allen Ports senden. Einzig und allein der Empfänger kann die Daten verwerfen oder bearbeiten.
TunnelBlock
Ein TunnelBlock ist das atomare Datenpaket des O2Mega-P. Es enthält einen Header, Nutzdaten und den Footer. Der Header besteht aus fünf Bytes. Das Erste ist das Startbyte und hat immer den Wert 0xff. Als Zweites kommt der zwei Byte lange Port (niederwertigstes Byte zuerst), an den die Daten weitergeleitet werden. Nun folgt Len. Es gibt die Länge in zwei Bytes (niederwertigstes Byte zuerst) der nachfolgenden Nutzdaten an. Nach den Nutzdaten endet der Block mit dem FooterByte 0x00.
TunnelBlock | ||||||
0 | 1 | 2 | 3 | 4 | 5 .. | L+5 |
Header | Data | Footer | ||||
Start | Port | Length (L) | Stop | |||
0xff | LSB | MSB | LSB | MSB | 0x00 |
Bespiel
Ein Beispiel eines IP-Datenblocks mit drei TunnelBlocks
+--+--+--+--+--+--------+--+--+--+--+--+--+-------------+--+--+--+--+--+--+---------------------+--+ |ff|00|00|08|00|MOINMOIN|00|ff|00|00|0d|00|NICKCHNG R2d2|00|ff|00|00|15|00|GAMEJOIN DaReals-Game|00| +--+--+--+--+--+--------+--+--+--+--+--+--+-------------+--+--+--+--+--+--+---------------------+--+
Analyse
Es stellt sich die Frage, welche Anteile der physikalischen Übertragung (Bitstream durchs LAN) auf die Nutzdaten des O2Megaprotokolls entfallen.
Wird z.B nur ein TunnelBlock mit 8 Bytes Nutzdaten versendet, machen diese Daten 3,4% der gesammten physikalischen Übertragung aus. ;) Bei 224 Bytes Nutzdaten machen sie hingegen schon 50% aus.
Quellen
Realisierung
Die Realisierung findet auf OOP-Ebene statt und arbeitet mit Threads und Kritischen Bereichen (synchronized).
Verteiler
Der Verteiler ist der erste Layer, der direckt auf das TCP/IP aufsetzt. Seine Aufgaben bestehen darin, eingehende TunnelBlocks weiterzuleiten und Ausgehende zu versenden.
Er kann eingehende Daten auch verwerfen, wenn er kein Tor hat, das diesen Port reserviert hat.