ٹرانسپورٹ تہہ
| آئٹم | قدر |
|---|---|
| ٹرانسپورٹ | TCP (مستقل کنکشن) |
| ڈیفالٹ پورٹ | 5225 |
| ساکٹ اختیارات | TCP_NODELAY فعال — چھوٹے پیکٹس Nagle کی تاخیر کے بغیر فوراً بھیجے جاتے ہیں |
| TLS | اختیاری — اگر سرور پر سرٹیفکیٹ ترتیب دیا گیا ہو تو پوری اسٹریم یک طرفہ TLS (سرور کی تصدیق) میں لپیٹ دی جاتی ہے |
| انکوڈنگ | فکسڈ چوڑائی کے بائنری فیلڈز + UTF-8 کلیدیں۔ اعداد big-endian (network order) میں ہیں |
| فریم کا اختتام | ایک \n بائٹ۔ \r کی کوئی ہینڈلنگ نہیں |
| خالی فریم | صرف \n (op کی جگہ \n) کو keep-alive سمجھ کر خاموشی سے نظر انداز کیا جاتا ہے |
| زیادہ سے زیادہ frame سائز | 192 bytes — op سمیت، \n کے بغیر (حد پار → E line_too_long، پھر connection بند) |
| Pipelining | اجازت ہے — جوابات درخواستوں سے مختلف ترتیب میں آ سکتے ہیں |
| بے کار (idle) ٹائم آؤٹ | کوئی نہیں — سرور کسی خاموش کنکشن کو بند نہیں کرتا |
| 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 — وہ بائٹ ترتیب جس میں عدد کا سب سے اہم بائٹ پہلے لکھا جاتا ہے۔ یہ نیٹ ورک پروٹوکولز کا معیار ہے، اس لیے اسے network order بھی کہا جاتا ہے۔
- Pipelining — پچھلے جواب کا انتظار کیے بغیر اگلی درخواست بھیجنا۔ اس طرح round-trip تاخیر ایک دوسرے پر چڑھ جاتی ہے جس سے تھرو پٹ بڑھ جاتا ہے۔
- Keep-alive — یہ بتانے کے لیے وقفے وقفے سے بھیجا جانے والا بے معنی سگنل کہ کنکشن زندہ ہے۔ یہاں، ایک خالی فریم (
\n) یہی کردار ادا کرتا ہے۔