ट्रांसपोर्ट लेयर
| आइटम | मान |
|---|---|
| ट्रांसपोर्ट | TCP (स्थायी कनेक्शन) |
| डिफ़ॉल्ट पोर्ट | 5225 |
| सॉकेट विकल्प | TCP_NODELAY सक्षम — छोटे पैकेट तुरंत भेजता है, Nagle की मिलाने वाली देरी के बिना |
| TLS | वैकल्पिक — यदि सर्वर पर सर्टिफ़िकेट कॉन्फ़िगर है, तो पूरी स्ट्रीम एकतरफ़ा TLS (सर्वर प्रमाणीकरण) में लपेटी जाती है |
| एन्कोडिंग | फ़िक्स्ड-चौड़ाई बाइनरी फ़ील्ड + UTF-8 कुंजियाँ। पूर्णांक बिग-एंडियन (नेटवर्क ऑर्डर) हैं |
| फ़्रेम टर्मिनेटर | एक \n बाइट। कोई \r हैंडलिंग नहीं |
| खाली फ़्रेम | एक अकेला \n (op स्थान पर \n) चुपचाप keep-alive के रूप में अनदेखा किया जाता है |
| अधिकतम frame आकार | 192 bytes — op सहित, \n छोड़कर (सीमा पार → E line_too_long, फिर connection बंद) |
| पाइपलाइनिंग | अनुमत — प्रतिक्रियाएँ अनुरोधों से भिन्न क्रम में आ सकती हैं |
| आइडल टाइमआउट | कोई नहीं — सर्वर कभी भी शांत कनेक्शन को बंद नहीं करता |
| Frame progress समय | पहले op byte से fixed header और LF तक अधिकतम 5 सेकंड; partial send connection को अनंत समय नहीं रोक सकता |
कनेक्शन स्थापना क्रम
- TCP कनेक्ट
- यदि सर्वर पर TLS सक्षम है तो TLS हैंडशेक — प्लेनटेक्स्ट में TLS सर्वर से कनेक्ट करने पर इस चरण में कनेक्शन कट जाता है
- प्रमाणीकरण हैंडशेक, एक बार
- उसके बाद से लॉक प्रोटोकॉल फ़्रेम आदान-प्रदान
फ़्रेमिंग नियम
हर संदेश एक फ़्रेम = एक लाइन है।
[ op: 1 बाइट ][ op-विशिष्ट फ़िक्स्ड हेडर ][ परिवर्तनशील बॉडी ] \nप्राप्तकर्ता को op देखना होता है और फ़िक्स्ड हेडर को उसकी बाइट संख्या के आधार पर पहले पढ़ना होता है, उसके बाद ही \n की खोज करनी होती है। ऐसा इसलिए क्योंकि फ़िक्स्ड हेडर बाइनरी है और इसमें एक मान के रूप में 0x0A (\n) हो सकता है (जैसे lease=10 → 0A)। \n की खोज केवल अनुगामी key/टेक्स्ट खंड पर ही लागू होती है।
| दिशा | op | फ़िक्स्ड हेडर |
|---|---|---|
| क्लाइंट → सर्वर | A | 10 bytes (wait:u8 + lease:u8 + owner:u64 BE) |
| क्लाइंट → सर्वर | R | 8 bytes (token:u64 BE) |
| सर्वर → क्लाइंट | A | 16 bytes (token:u64 BE + owner:u64 BE) |
| सर्वर → क्लाइंट | T · B | 8 bytes (owner:u64 BE) |
| सर्वर → क्लाइंट | R · N | 8 bytes (token:u64 BE) |
| सर्वर → क्लाइंट | M · L · E | 0 bytes (address/reason UTF-8 text) |
Frame 192 bytes से बड़ा या malformed हो तो server संभव हो E flush करके connection बंद करता है। Client भी malformed, oversized, unknown op या uncorrelatable E को connection-fatal मानता है। इस session में एक byte भी भेजे गए acquire को auto-retry नहीं किया जाता और final response बिना वह Indeterminate है।
शब्दावली
- फ़्रेम (frame) — एक निरंतर बाइट स्ट्रीम (TCP) को "एक संदेश" के रूप में विभाजित करने की इकाई। इस प्रोटोकॉल में,
\nसे समाप्त होने वाली एक लाइन एक फ़्रेम है। - बिग-एंडियन (big-endian) — बाइट क्रम जो किसी पूर्णांक का सबसे महत्वपूर्ण बाइट पहले लिखता है। यह नेटवर्क प्रोटोकॉल का मानक है, इसलिए इसे नेटवर्क ऑर्डर भी कहा जाता है।
- पाइपलाइनिंग (pipelining) — पिछली प्रतिक्रिया की प्रतीक्षा किए बिना अगला अनुरोध भेजना। इस तरह राउंड-ट्रिप विलंबता को ओवरलैप करने से थ्रूपुट बढ़ता है।
- keep-alive — यह बताने के लिए समय-समय पर भेजा जाने वाला निरर्थक संकेत कि कनेक्शन अभी भी जीवित है। यहाँ, एक खाली फ़्रेम (
\n) यह भूमिका निभाता है।