ট্রান্সপোর্ট লেয়ার
| বিষয় | মান |
|---|---|
| ট্রান্সপোর্ট | TCP (স্থায়ী সংযোগ, persistent) |
| ডিফল্ট পোর্ট | 5225 |
| সকেট অপশন | TCP_NODELAY সক্রিয় — ছোট প্যাকেট জমিয়ে না রেখে Nagle-এর বিলম্ব ছাড়াই তাৎক্ষণিক পাঠায় |
| TLS | ঐচ্ছিক — সার্ভারে সার্টিফিকেট কনফিগার করা থাকলে পুরো স্ট্রিম এক-মুখী TLS (সার্ভার প্রমাণীকরণ) দিয়ে মোড়ানো হয় |
| এনকোডিং | ফিক্সড-উইদথ বাইনারি ফিল্ড + UTF-8 কী। ইন্টিজার বিগ-এন্ডিয়ান (network order) |
| ফ্রেম টার্মিনেটর | একটি \n বাইট। \r হ্যান্ডলিং নেই |
| খালি ফ্রেম | শুধু \n (op-এর জায়গায় \n) এলে কিপ-অ্যালাইভ হিসেবে নীরবে উপেক্ষা করা হয় |
| সর্বোচ্চ 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:১ বাইট ][ 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) — আগের অনুরোধের সাড়ার জন্য অপেক্ষা না করে পরবর্তী অনুরোধ পাঠানো। এভাবে রাউন্ড-ট্রিপ লেটেন্সি ওভারল্যাপ হয়ে থ্রুপুট বাড়ে।
- কিপ-অ্যালাইভ (keep-alive) — সংযোগ এখনো জীবিত জানাতে পর্যায়ক্রমে পাঠানো অর্থহীন সংকেত। এখানে একটি খালি ফ্রেম (
\n) এই ভূমিকা পালন করে।