2004 RuneScape fit a multiplayer RPG into 56k dial-up
🇬🇧 English
In 2004, I played RuneScape on a 56k modem that died whenever my mother picked up the phone. A 3D world with up to a couple thousand players ran entirely in a browser. It worked because of a sustained exercise in not wasting bytes.
When clicking a tile north, every byte travels from click to server to another player's screen. Central fountain, Varrock Square. The detail comes from a decompiled 2004 RuneScape 2 client.
Constraints were strict: a 56k modem syncs at 56 kilobits per second downstream, roughly 5 KB/s, with less upstream. Broadband was available by 2000, but most UK households stuck to dial-up through the late 2000s. Java applets ran in a security sandbox, blocking raw native sockets and UDP.
Every byte travelled over a single TCP connection, in-order, with per-segment overhead. The game server advances in discrete cycles of roughly 600 milliseconds. After the login handshake, a small encryption layer is set up.
Every packet begins with an opcode byte, enciphered with a stream cipher called ISAAC. Two streams exist - one client-to-server, one reverse. Both sides need both streams.
The client generates two seed integers; the server provides the other two as part of the handshake. The server-to-client stream adds 50 to each word to keep directions separate. On the way out, one line enciphers the opcode: put Opcode(int opcode) { this.put Byte(opcode + this.outbound Cipher.value()); } On the way in, the mirror image retrieves it: current Opcode = (current Opcode - this.inbound Cipher.value()) & 0xFF; Only the opcode is encrypted, protecting against third-party parsers.
Sending a walk request triggers a breadth-first search before any networking occurs.
🇸🇦 العربية
كيف تشغل RuneScape للعديد من اللاعبين عبر خط الهاتف 56k في 2004
في عام 2004، لعبت RuneScape على جهاز اقتران 56k كان يتعطل كلما ارتقت أمي للهاتف. كان عالم ثلاثي الأبعاد يمكنه مع حتى عدة آلاف من اللاعبين يعمل بالكامل في المتصفح. كان يعمل بفضل تمرين مستمر لعدم إضاعة البايتات. عند النقر على بلسة شمالية، يسافر كل بايت من النقرة إلى الخادم ثم إلى شاشة لاعب آخر. النافذة المركزية، فاروك سكوار. تأتي التفاصيل من عميل RuneScape 2 الذي تم تفكيكه في عام 2004. كانت القيود صارمة: جهاز الاقتران 56k يتمتع بسرعة تنزيل 56 كيلوبتا في الثانية، وفقًا على 5 كيلوبايت في الثانية، مع أقل من رفع. كان اتصال النطاق الباست راقي متاحًا بحلول عام 2000، لكن معظم المستكشفات في المملكة المتحدة ظللت على الاقتران حتى أواخر الألفينات. كانت تطبيقات جافا تعمل في ساحة أمان، وتمنع الأطباق الأصلية غير المنصوصة وUDP. يسافر كل بايت عبر اتصال TCP واحد، بالترتيب، مع عبء كل فاصل. يتقدم خادم اللعبة في دورات منفصلة تقريبًا كل 600 مللي ثانية. بعد يد الصمام لتسجيل الدخول، يتم إعداد طبقة تشفير صغيرة. يبدأ كل حزمة ببايت من رمز التعمية، المشفر باستخدام تشفير تدفق يُسمى ISAAC. هناك تياران - واحد من العميل إلى الخادم، وآخر عكسي. يحتاج الطرفان إلى الاثنين. يولد العميل رقمين بذر؛ يوفر الخادم الرقمين الآخرين كجزء من اليد. يضيف تيار الخادم إلى العميل 50 إلى كل كلمة للحفاظ على الاتجاهات منفصلة. في الاتجاه الخارجي، تقوم سطر واحد بتشفير رمز التعمية: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } في الاتجاه الداخلي، يسترجع المرآة ذلك: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; تم تشفير رمز التعمية فقط، مما يحمي ضد محللي الطرف الثالث. عند إرسال طلب المشي، يتم تشغيل بحث عرضي قبل أي شيء من الأنواع المنزلجة.
كيف تعامل RuneScape مع التشفير عبر الخط الهاتفي؟
تم تشفير بايت رمز التعمية فقط باستخدام تشفير تدفق ISAAC. تحمي تياران مشتركان الاتجاهات بين العميل والخادم. يخبر رمز التعمية المستقبل كيفية قراءة باقي الحزمة، مما يجعله أرخص دفاع ممكن ضد محللي الطرف الثالث دون إضاعة النطاق الباست رأيًا على تشفير كامل للحزمة.
🇧🇩 বাংলা
কীভাবে ২০০৪-এ ৫৬k ডায়াল-আপে RuneScape ম্লটি-প্লে চালানো হয়েছিল
২০০৪-এ, আমি ৫৬k মডেমে RuneScape খেলেছি যা যখন আমার মা ফোন টেনে দিল তখন ধরা পড়ত। একটি ৩ডি বিশ্ব যা প্রায় দুই হাজার থেকে দুই হাজার খেলোয়াড় দিয়ে পরিপূর্ণভাবে ব্রাউজারে চলত। এটি কাজ করেছিল কারণ এটি একটি বাইটগুলি বর্জন করার একটি স্থায়ী অভ্যাস। যখন উত্তরের কোনো টাইলে ক্লিক করা হয়, তখন প্রত্যেক বাইট ক্লিক থেকে সার্ভার পর্যন্ত যায় আর তারপর অন্য এক খেলোয়াড়ের স্ক্রিন পর্যন্ত। মাঝের স্রোত, ভ্যারকোক স্কোয়ার। বিস্তারিত ২০০৪ রনেস্কেইপ ২ ক্লায়েন্টের একটি ডিকম্পাইল করা থেকে পাওয়া যায়। সীমাবদ্ধতাগুলি কড়া ছিল: ৫৬k মডেম সিঙ্ক করে ৫৬ কিলোবিট প্রতি সেকেন্ড ডাউনস্ট্রিমে, প্রায় ৫ কিলোবাইট/সেকেন্ড, যার মধ্যে আপস্ট্রিম কম। ২০০০-এ ব্রডব্যান্ড উপলব্ধ ছিল, কিন্তু বেশিরভাগ ইংল্যান্ডের ঘর গুলো ডায়াল-আপকে ২০০০এর শেষ পর্যন্ত রাখেছিল। জাভা অ্যাপলেটগুলি একটি নিরাপত্তা স্যান্ডবক্সে চলে, প্রকৃত নেটিভ সকেট এবং UDP ব্লক করে। প্রত্যেক বাইট একক TCP কানেকশনে যায়, ক্রমে, প্রতি সেগমেন্টের ওভারহেড সহ। গেম সার্ভার প্রায় ৬০০ মিলিসেকেন্ডের একটি ডিসক্রিট সাইক্লে এগিয়ে যায়। লগিন হ্যান্ডশেকের পরে, একটি ছোট এনক্রিপশন লেয়ার সেট হয়। প্রত্যেক প্যাকেট একটি অপারেশন কোড বাইটের সাথে শুরু হয়, ISAAC নামক একটি স্ট্রিম সাইনার দ্বারা এনক্রিপ্ট করা হয়। দুটি স্ট্রিম আছে - একটি ক্লায়েন্ট থেকে সার্ভার পর্যন্ত, একটি উল্টো। উভয় পক্ষ উভয় স্ট্রিমের প্রয়োজন রাখে। ক্লায়েন্ট দুটি সিড ইন্টিজার জেনারেট করে; সার্ভার হ্যান্ডশেকের অংশে অন্য দুটি সরবরাহ করে। সার্ভার থেকে ক্লায়েন্ট স্ট্রিম প্রতিটি শব্দে ৫০ যোগ করে যাতে দিকগুলি আলাদা থাকে। বহির্গতভাবে, এক লাইন অপারেশন কোডকে এনক্রিপ্ট করে: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } ভিতরে, মিরর ইমেজ তা রিট্রিভ করে: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; কেবল অপারেশন কোডই এনক্রিপ্ট করা হয়, তৃতীয়-পক্ষের পার্সারদের বিরুদ্ধে রক্ষা করে। একটি হ্যাচ রিকোয়েস্ট পাঠালে বর্ণময় কোষ অনুসন্ধান কোনো নেটওয়ার্কিং হবে না পর্যন্ত ট্রিগার হয়।
RuneScape কীভাবে ডায়াল-আপে এনক্রিপশন কীভাবে সামাল দিল?
কেবল অপারেশন কোড বাইটটি ISAAC স্ট্রিম সাইনার ব্যবহার করে এনক্রিপ্ট করা হয়েছিল। দুটি শেয়ার্ড স্ট্রিম ক্লায়েন্ট ও সার্ভারের দিকগুলি রক্ষা করেছিল। অপারেশন কোড রিসিভারকে প্যাকেজের বাকি অংশ কীভাবে পড়তে হবে তা বলেছিল, যা ব্যান্ডউইড্থ বর্জন করা ছাড়া তৃতীয়-পক্ষের পার্সারদের বিরুদ্ধে সবচেয়ে সস্তা রক্ষণ ছিল।
🇩🇪 Deutsch
Wie RuneScape Multiplayer über 56k-Flatrate 2004 betrieb
Im Jahr 2004 spielte ich RuneScape auf einem 56k-Modem, das jedes Mal abstürzte, wenn meine Mutter das Telefon aufhielt. Eine 3D-Welt mit bis zu einigen Tausend Spielern funktionierte vollständig im Browser. Es funktionierte dank einer durchgehenden Übung, Bytes nicht zu verschwenden.
Beim Klicken auf eine Feldkachel nach Norden reist jeder Byte vom Klick über den Server zum Bildschirm eines anderen Spielers. Zentraler Brunnen, Varrock Square. Die Details stammen aus einem decompilierten RuneScape 2-Client aus dem Jahr 2004.
Die Beschränkungen waren streng: Ein 56k-Modem synchronisiert sich mit 56 Kilobit pro Sekunde im Downstream, etwa 5 KB/s, mit weniger im Upstream. Breitband war bereits 2000 verfügbar, aber die meisten Haushalte im Vereinigten Königreich blieben bis in die 2000er Jahre auf Flatrate. Java-Applets laufen in einer Sicherheits-Sandbox, blockieren rohe native Sockets und UDP.
Jeder Byte reist über eine einzelne TCP-Verbindung, in Reihenfolge, mit Overhead pro Segment. Der Spieleserver läuft in diskreten Zyklen von etwa 600 Millisekunden weiter. Nach dem Login-Handshake wird eine kleine Verschlüsselungsschicht eingerichtet.
Jedes Paket beginnt mit einem Opcode-Byte, verschlüsselt mit einem Flusschiffer namens ISAAC. Es gibt zwei Ströme - einen vom Client zum Server, einen umgekehrt. Beide Seiten benötigen beide Ströme.
Der Client generiert zwei Seed-Integer; der Server stellt die anderen beiden als Teil des Handshakes zur Verfügung. Der Server-zu-Client-Strom fügt jedem Wort 50 hinzu, um die Richtungen getrennt zu halten. Beim Ausgang verschlüsselt eine Zeile den Opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } Beim Eingang stellt das Spiegelbild es wieder her: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Nur der Opcode wurde verschlüsselt, um Drittanbieter-Parser zu schützen.
Beim Senden einer Laufanfrage wird vor jeglichem Networking eine Breitensuche ausgelöst.
Wie behandelte RuneScape die Verschlüsselung über Flatrate?
Nur das Opcode-Byte wurde mit dem ISAAC-Flusschiffer verschlüsselt. Zwei geteilte Ströme schützten die Richtungen Client und Server. Der Opcode sagte dem Empfänger, wie er den Rest des Pakets lesen soll, wodurch er die günstigste mögliche Verteidigung gegen Drittanbieter-Parser ohne Verschwendung von Bandbreite bei vollständiger Paketverschlüsselung war.
🇪🇸 Español
Cómo RuneScape ejecutó multiplayer con modem de 56k en 2004
En 2004, jugé RuneScape con un modem de 56k que se caía cada vez que mi madre colgaba el teléfono. Un mundo 3D con hasta un par de mil jugadores funcionaba completamente en el navegador. Funcionaba gracias a un ejercicio sostenido de no desperdiciar bytes.
Al hacer clic en una casilla al norte, cada byte viaja desde el clic al servidor y luego a la pantalla de otro jugador. Fuente central, Varrock Square. Los detalles provienen de un cliente RuneScape 2 decompilado de 2004.
Las restricciones eran estrictas: un modem de 56k se sincroniza a 56 kilobits por segundo en descarga, aproximadamente 5 KB/s, con menos en subida. La banda ancha estaba disponible para 2000, pero la mayoría de los hogares del Reino Unido se quedaban con el acceso por línea directa hasta finales de los 2000. Los applets de Java se ejecutaban en una sandbox de seguridad, bloqueando sockets nativos sin procesar y UDP.
Cada byte viajaba por una sola conexión TCP, en orden, con sobrecarga por segmento. El servidor de juego avanza en ciclos discretos de aproximadamente 600 milisegundos. Después de la mano de obra de inicio de sesión, se establece una capa de encriptación pequeña.
Cada paquete comienza con un byte de opcode, cifrado con un cifrado de flujo llamado ISAAC. Existen dos flujos - uno de cliente a servidor, otro inverso. Ambas partes necesitan ambos flujos.
El cliente genera dos enteros semilla; el servidor proporciona los otros dos como parte de la mano de obra. El flujo de servidor a cliente suma 50 a cada palabra para mantener las direcciones separadas. En la salida, una línea cifra el opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } En la entrada, el espejo lo recupera: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Solo el opcode está encriptado, protegiendo contra analizadores de terceros.
Enviar una solicitud de caminata desencadena una búsqueda en anchura de campo antes de cualquier networking.
¿Cómo manejó RuneScape el cifrado en la línea directa?
Solo se encriptó el byte de opcode usando el cifrado de flujo ISAAC. Dos flujos compartidos protegían las direcciones del cliente y del servidor. El opcode le decía al receptor cómo leer el resto del paquete, siendo la defensa más económica posible contra analizadores de terceros sin desperdiciar ancho de banda en un cifrado completo del paquete.
🇫🇷 Français
Comment RuneScape a fonctionné en multiplayer sur un modem 56k en 2004
En 2004, j'ai joué à RuneScape sur un modem 56k qui plantait chaque fois que ma mère décrochait le téléphone. Un monde 3D pouvant accueillir plusieurs milliers de joueurs fonctionnait entièrement dans le navigateur. Cela fonctionnait grâce à un exercice continu d'économie d'octets.
En cliquant sur une tuile vers le nord, chaque octet voyage du clic au serveur puis à l'écran d'un autre joueur. Fontaine centrale, Place de Varrock. Les détails proviennent d'un client RuneScape 2 décompilé en 2004.
Les contraintes étaient strictes : un modem 56k synchronise à 56 kilobits par seconde en débit descendant, soit environ 5 Ko/s, avec moins en montant. Le broadband était disponible dès 2000, mais la plupart des foyers du Royaume-Uni sont restés sur le modem jusqu'au début des années 2000. Les applets Java s'exécutent dans une zone de sécurité, bloquant les sockets natifs bruts et UDP.
Chaque octet voyage sur une seule connexion TCP, dans l'ordre, avec une surcharge par segment. Le serveur de jeu progresse par cycles discrets d'environ 600 millisecondes. Après la poignée de main de connexion, une petite couche de chiffrement est mise en place.
Chaque paquet commence par un octet d'opcode, chiffré avec un chiffrement de flux appelé ISAAC. Deux flux existent - un client-serveur, un inverse. Les deux parties ont besoin des deux flux.
Le client génère deux entiers seed ; le serveur fournit les deux autres comme partie de la poignée de main. Le flux serveur-client ajoute 50 à chaque mot pour maintenir les directions séparées. En sortie, une ligne chiffre l'opcode : putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } En entrée, le miroir le récupère : currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Seul l'opcode est chiffré, protégeant contre les analyseurs tiers.
Envoyer une demande de marche déclenche une recherche en largeur avant toute networking.
Comment RuneScape a-t-il géré le chiffrement en modem 56k ?
Seul l'octet d'opcode a été chiffré en utilisant le chiffrement de flux ISAAC. Deux flux partagés ont protégé les directions client et serveur. L'opcode indiquait au récepteur comment lire le reste du paquet, constituant la défense la plus économique possible contre les analyseurs tiers sans gaspiller la bande passante sur un chiffrement complet du paquet.
🇮🇳 हिन्दी
कैसे 2004 में 56k डायल-अप पर RuneScape के साथ मल्टीप्लेयर चलाया गया
2004 में, मैंने 56k मॉडम पर RuneScape खेला जो जब मेरी माँ फ़ोन उठाती थी तो गिर जाता था। एक 3D दुनिया जिसमें अंदाज़ में दो हजार से दो हजार खिलाड़ियाँ होते हैं, पूरी तरह एक ब्राउज़र में चलती है। यह काम करने का कारण यह था कि इसमें बाइट्स बर्बाद करने के एक स्थायी अभ्यास था। जब उत्तर की एक टाइल पर क्लिक किया जाता है, तो हर बाइट क्लिक से सर्वर तक और फिर दूसरे खिलाड़ियों के स्क्रीन तक जाता है। मध्य स्रोत, Varrock Square। विवरण 2004 के RuneScape 2 क्लाइंट के एक डिकम्पाइल्ड से प्राप्त हुए हैं। प्रतिबंध सख्त थे: 56k मॉडम सिंक 56 किलोबिट्स प्रति सेकंड डाउनस्ट्रीम में, लगभग 5 KB/सेकंड, जिसमें अप स्ट्रीम कम होता है। 2000 में ब्राउडबैंड उपलब्ध था, लेकिन अधिकांश ब्रिटिश घरों ने डायल-अप को 2000 के अंत तक जारी रखा। Java अप्लेट्स एक सुरक्षा सैंडबॉक्स में चलते हैं, जो र४द नेटिव सॉकेट और UDP को ब्लॉक करते हैं। हर बाइट एकमात्र TCP कनेक्शन पर यात्रा करता है, क्रम में, प्रति-सेगमेंट ओवरहेड के साथ। गेम सर्वर लगभग 600 मिलीसेकंड के एक डिस्क्रीट साइकल में आगे बढ़ता है। लॉगिन हैंडशेक के बाद, एक छोटा एन्क्रिप्शन लेयर सेट कर लिया जाता है। हर पैकेट एक ओपरेशन कोड बाइट के साथ शुरू होता है, जो ISAAC नामक एक स्ट्रीम साइनर के द्वारा एन्क्रिप्ट किया गया है। दो स्ट्रीम होते हैं - एक क्लाइंट से सर्वर तक, एक उलटा। दोनों पक्ष दोनों स्ट्रीम की आवश्यकता रखते हैं। क्लाइंट दो सीड इंटीज़र जेनरेट करता है; सर्वर हैंडशेक के दौरान अन्य दो को प्रदान करता है। सर्वर से क्लाइंट स्ट्रीम प्रत्येक शब्द में 50 जोड़ता है ताकि दिशाएँ अलग रहें। बाहर जाते समय, एक पंक्ति ओपरेशन कोड को एन्क्रिप्ट करती है: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } बाहर जाते समय, मिरर इमेज इसे रिट्रीव करती है: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; केवल ओपरेशन कोड एन्क्रिप्ट किया गया है, तीसरे पक्ष के पार्सर के खिलाफ सुरक्षा प्रदान करता है। एक वॉक रिक्वेस्ट भेजने पर किसी भी नेटवर्किंग के बाद तक एक ब्रेडथ-फ़र्स्ट सर्च ट्रिगर होता है।
RuneScape ने डायल-अप पर एन्क्रिप्शन कैसे संभाला?
केवल ओपरेशन कोड बाइट को ISAAC स्ट्रीम साइनर का उपयोग करके एन्क्रिप्ट किया गया था। दो साझा स्ट्रीम्स ने क्लाइंट और सर्वर की दिशाओं को सुरक्षित रखा। ओपरेशन कोड रिसीवर को डेटा पैकेज़ के बाकी भाग को कैसे पढ़ना है, उसे बताता है, जिससे पूरे पैकेज़ को एन्क्रिप्ट करने में बैंडविड्थ बर्बाद करिए बिना, तीसरे पक्ष के पार्सर के खिलाफ सबसे सस्ता संरक्षण प्रदान करता है।
🇮🇩 Bahasa Indonesia
Bagaimana RuneScape Menjalankan Multiplayer di 56k Dial-Up pada 2004
Pada 2004, saya bermain RuneScape dengan modem 56k yang mati setiap kali ibu saya mengangkat telepon. Dunia 3D dengan hingga beberapa ribu pemain berjalan sepenuhnya di browser. Ini berfungsi karena latihan berkelanjutan untuk tidak menghabiskan byte.
Saat mengklik selatan, setiap byte melintasi dari klik ke server ke layar pemain lain. Pompa tengah, Varrock Square. Detailnya berasal dari klien RuneScape 2 yang didekompilasi pada 2004.
Batasannya ketat: modem 56k sinkronisasi pada 56 kilobit per detik downstream, sekitar 5 KB/s, dengan lebih sedikit upstream. Broadband tersedia sejak 2000, tetapi kebanyakan rumah di Inggris masih memakai dial-up hingga akhir 2000-an. Applet Java berjalan di sandbox keamanan, yang memblokir socket native mentukan dan UDP.
Setiap byte melintasi melalui satu koneksi TCP, urut, dengan overhead per segmen. Server game bergerak dalam siklus diskret sekitar 600 milidetik. Setelah handshake login, lapisan enkripsi kecil ditetapkan.
Setiap paket dimulai dengan byte opcode, dienkripsi dengan cipher aliran yang disebut ISAAC. Dua aliran ada - satu klien ke server, satu terbalik. Kedua sisi membutuhkan kedua aliran itu.
Klien menghasilkan dua integer benih; server menyediakan yang lainnya sebagai bagian dari handshake. Aliran server ke klien menambahkan 50 pada setiap kata untuk memisahkan arah. Di luar, satu baris mengenkripsi opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } Di dalam, cerminan mengambilnya kembali: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Hanya opcode yang dienkripsi, melindungi dari parser pihak ketiga.
Mengirimkan permintaan jalan memicu pencarian lebar sebelum networking terjadi.
🇯🇵 日本語
2004年に56kダイアルアップでRuneScapeをマルチプレイヤー対応にした方法
2004年、母が電話をかけると落ちる56kモデムでRuneScapeをプレイした。最大で数千人がプレイできる3Dワールドがブラウザ内で完全に動作した。これは、バイトを無駄にしないという継続的な訓練のおかげだった。北のタイルをクリックすると、バイトがクリックからサーバーを経由して別のプレイヤーの画面に届く。中央の fountain、Varrock Square。詳細は2004年のRuneScape 2クライアントを逆コンパイルしたものから得られた。制約は厳しかった:56kモデムはダウンストリームで56キリビット/秒に同期し、約5KB/秒、アップストリームはもっと少ない。2000年にはブロードバンドが利用可能だったが、イギリスの多くの家庭は2000年代後半までダイアルアップを継続した。Javaアプレットはセキュリティサンドボックスで動作し、ネイティブソケットとUDPをブロックする。ゲームサーバーは約600ミリ秒の離散サイクルで進行する。ログインハンドシェイク後、小さな暗号化レイヤーが設定される。各パケットは操作コードバイトで始まり、ISAACと呼ばれるストリーム暗号で暗号化される。2つのストリームが存在する——クライアントからサーバーへのもの、逆方向のもの。両方の側は両方のストリームが必要である。クライアントは2つのシード整数を生成する。サーバーはハンドシェイクの一部として他の2つを提供する。サーバーからクライアントへのストリームは、各単語に50を加算して方向を分離する。出力時、一つの行が操作コードを暗号化する:putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } 入力時、ミラーがそれを取得する:currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF;操作コードのみが暗号化され、サードパーティのパーサーからの保護に役立つ。歩行リクエストを送信すると、ネットワーキングが発生する前に幅優先探索がトリガーされる。
RuneScapeはダイアルアップで暗号化をどのように処理したか?
操作コードバイトのみがISAACストリーム暗号を使用して暗号化された。2つの共有ストリームがクライアントとサーバーの方向を保護した。操作コードは受信側にパケットの残りの読み取り方法を伝え、バンドワイドを無駄にせずにサードパーティのパーサーからの最も経済的な防御となった。
🇧🇷 Português
Como o RuneScape executou multiplayer em 56k Dial-Up em 2004
Em 2004, joguei RuneScape em um modem 56k que morria sempre que minha mãe pegava o telefone. Um mundo 3D com até alguns milhares de jogadores funcionava totalmente no navegador. Funcionava graças a um exercício sustentado de não desperdiçar bytes.
Ao clicar em uma peça ao norte, cada byte viaja do clique para o servidor e depois para a tela de outro jogador. Fonte central, Varrock Square. Os detalhes vêm de um cliente RuneScape 2 decompilado de 2004.
As restrições eram rígidas: um modem 56k sincroniza a 56 kilobits por segundo na direção descendente, cerca de 5 KB/s, com menos na ascendente. A banda larga já estava disponível para 2000, mas a maioria das residências no Reino Unido ficou com dial-up até o final dos anos 2000. Applets Java rodam em uma sandbox de segurança, bloqueando sockets nativos brutos e UDP.
Cada byte viaja por uma única conexão TCP, em ordem, com overhead por segmento. O servidor de jogo avança em ciclos discretos de aproximadamente 600 milissegundos. Após a mão de obra de login, uma camada de criptografia pequena é configurada.
Cada pacote começa com um byte de opcode, cifrado com um cipher de fluxo chamado ISAAC. Dois streams existem - um cliente-para-servidor, um reverso. Ambos os lados precisam de ambos os streams.
O cliente gera dois inteiros seed; o servidor fornece os outros dois como parte da mão de obra. O stream servidor-para-cliente adiciona 50 a cada palavra para manter as direções separadas. Na saída, uma linha cifra o opcode: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } Na entrada, o espelho a recupera: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Apenas o opcode é criptografado, protegendo contra analisadores de terceiros.
Enviar uma solicitação de caminhada desencadeia uma busca em largura antes de qualquer networking ocorrer.
Como o RuneScape lidou com criptografia em dial-up?
Apenas o byte de opcode foi criptografado usando o cipher de fluxo ISAAC. Dois streams compartilhados protegeram as direções cliente e servidor. O opcode informava ao receptor como ler o resto do pacote, sendo a defesa mais barata possível contra analisadores de terceiros sem desperdiçar banda larga na criptografia completa do pacote.
🇷🇺 Русский
Как RuneScape запустил многопользовательскую игру по dial-up 56k в 2004 году
В 2004 году я играл в RuneScape на модеме 56k, который отключался каждый раз, когда моя мама поднимала телефон. Мир в трех измерениях с до нескольких тысяч игроков полностью работал в браузере. Это работало благодаря непрерывному упражнению по неизречению байтов. При щелчке по плитке на севере каждый байт путешествует от щелчка к серверу и затем к экрану другого игрока. Центральная фонтан, площадь Варрока. Детали получены из декомпилированного клиента RuneScape 2 за 2004 год. Ограничения были строги: модем 56k синхронизируется со скоростью 56 килобит в секунду назад, примерно 5 КБ/с, с меньшей скоростью вперед. Широкополосный интернет уже был доступен к 2000 году, но большинство домов в Великобритании оставались на dial-up до конца 2000-х. Java-апплеты работают в безопасном песочном царстве, блокируя сырые необработанные сокеты и UDP. Каждый байт путешествует по одному соединению TCP, по порядку, с накладными расходами на сегмент. Сервер игры движется по циклическим дискретным шагам примерно в 600 миллисекунд. После рукопожатия входа устанавливается небольшой слой шифрования. Каждый пакет начинается с байта опкода, зашифрованного с помощью потокового шифра по имени ISAAC. Существует два потока — один от клиента к серверу, другой в обратном направлении. Обе стороны нуждаются в обоих потоках. Клиент генерирует два целочисленных зерна; сервер предоставляет другие два в рамках рукопожатия. Сервер-клиентский поток добавляет 50 к каждому слову, чтобы разделить направления. На выходе одна строка шифрует опкод: putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } На входе зеркальное изображение восстанавливает его: currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF; Только опкод зашифрован, защищая от сторонних парсеров. Отправка запроса на ходьбу запускает поиск в ширину перед любым сетевым взаимодействием.
Как RuneScape обрабатывал шифрование по dial-up?
Только байт опкода был зашифрован с помощью потокового шифра ISAAC. Два разделенных потока защищали направления клиента и сервера. Опкод сообщал получателю, как прочитать остаток пакета, делая его самым дешевым возможным защитой от сторонних парсеров без расходов на полное шифрование пакета на расходах.
🇨🇳 简体中文
如何在2004年用56k拨号上网运行RuneScape多人游戏
2004年,我用56k调制解调器玩RuneScape,每次我母亲拿起电话就掉线。一个3D世界最多有几千名玩家,完全在浏览器中运行。之所以能工作,是因为这是一项持续的字节浪费练习。点击北方的某个瓦片时,每一字节都要从点击传到服务器,再传到另一名玩家的屏幕上。中央水 fountain,Varrock Square。细节来自解编译的2004年RuneScape 2客户端。约束条件严格:56k调制解调器下行速率为56千比特每秒,大约每秒5 KB,上行更少。2000年 broadband就可用了,但大多数英国家庭直到2000年代后期仍坚持使用拨号上网。Java小程序运行在安全沙箱中,阻止原始本地套接字和UDP。每一字节都通过单个TCP连接传输,按序到达,带有分段开销。游戏服务器以大约600毫秒为一个离散周期运行。登录握手后,设置一个小型加密层。每个数据包以操作码字节开头,用名为ISAAC的流密码加密。存在两个流——一个从客户端到服务器,一个反向。双方都需要这两个流。客户端生成两个种子整数;服务器在握手期间提供另外两个作为其一部分。服务器到客户端的流在每个单词上添加50,以保持方向分离。传出时,一行代码加密操作码:putOpcode(int opcode) { this.putByte(opcode + this.outboundCipher.value()); } 接收端以镜像方式检索它:currentOpcode = (currentOpcode - this.inboundCipher.value()) & 0xFF;只有操作码被加密,防止第三方解析器。发送行走请求会在任何网络通信之前触发广度优先搜索。
RuneScape如何在拨号上处理加密?
只有操作码字节使用ISAAC流密码进行加密。两个共享流保护客户端和服务器的方向。操作码告诉接收方如何读取数据包的其余部分,在不消耗带宽进行完整数据包加密的情况下,这是对抗第三方解析器的最经济防御方式。