এই পর্বে যা শিখবেন
- চার রকম delay-এর সঠিক সংজ্ঞা, সূত্র আর কোনটি কিসের ওপর নির্ভর করে
- Transmission বনাম propagation-এর ক্লাসিক বিভ্রান্তি — টোল প্লাজার উদাহরণে
- Queuing delay কেন traffic intensity ১-এর কাছে বিস্ফোরিত হয়, আর packet loss কোথা থেকে আসে
- End-to-end delay, RTT, ping, throughput, bottleneck, jitter আর bandwidth-delay product-এর পূর্ণ অঙ্ক
- Mbps বনাম MB/s আর 106 বনাম 220-এর ফাঁদ — পরীক্ষা আর ইন্টারভিউর প্রিয় প্রশ্ন
১ · নেটওয়ার্ক “ধীর” — আসলে কোন সময়টা?
“নেট আজ খুব স্লো” — এই বাক্যটি আমরা প্রতিদিন বলি। কিন্তু একজন নেটওয়ার্ক প্রকৌশলীর কাছে “স্লো” শব্দটি অস্পষ্ট। ভিডিও কলে কথা দেরিতে পৌঁছাচ্ছে? বড় ফাইল নামতে অনেক সময় লাগছে? গেমে গুলি ছোড়ার পর আধা সেকেন্ড পরে প্রতিক্রিয়া আসছে? তিনটি সমস্যার কারণ আলাদা, সমাধানও আলাদা। এই পর্বে আমরা “গতি” শব্দটিকে কয়েকটি মাপা যায় এমন সংখ্যায় ভাঙব।
পর্ব ০৪-এ দেখেছেন, ইন্টারনেটে ডেটা যায় ছোট ছোট packet-এ ভাগ হয়ে, আর প্রতিটি router পুরো packet হাতে পেয়ে তারপর সামনে পাঠায় — একে বলে store-and-forward. প্রতিটি router-এ packet-টি কিছুক্ষণ আটকে থাকে। কেন আটকে থাকে, আর কতক্ষণ — এটাই এই পর্বের মূল প্রশ্ন।
একটি কুরিয়ার পার্সেলের যাত্রা ভাবুন। ঢাকার অফিসে পার্সেল পৌঁছালে (১) একজন কর্মী লেবেল পড়ে ঠিক করেন কোন ট্রাকে যাবে — processing; (২) আগে আসা পার্সেলগুলো তোলা পর্যন্ত লাইনে অপেক্ষা — queuing; (৩) পার্সেলটি গেট দিয়ে ট্রাকে তোলা — বড় চালান হলে বেশি সময় — transmission; (৪) ট্রাক ঢাকা থেকে চট্টগ্রাম যাওয়া — দূরত্ব আর রাস্তার গতির ওপর নির্ভর — propagation. প্রতিটি অফিসে এই চারটি সময় যোগ হয়, আর পথে যত অফিস, তত বার।
নেটওয়ার্কের “গতি” নিয়ে কথা বললে আসলে দুই ধরনের প্রশ্ন থাকে, আর দুটি গুলিয়ে ফেলাই সবচেয়ে বড় ভুল:
কত দেরিতে পৌঁছায়? — Delay
একটি packet (বা একটি bit) এক প্রান্ত থেকে অন্য প্রান্তে যেতে কত সময় লাগে। একক: সেকেন্ড, ms (মিলিসেকেন্ড), µs (মাইক্রোসেকেন্ড)। ভিডিও কল, গেম, ওয়েবপেজ খোলার অনুভূতি ঠিক করে এটি।
latency, RTT, jitterসেকেন্ডে কতটা আসে? — Throughput
প্রতি সেকেন্ডে কত bit আসলে প্রাপকের কাছে পৌঁছাচ্ছে। একক: bit প্রতি সেকেন্ড (bps, Mbps, Gbps). বড় ফাইল নামানো, ৪K ভিডিও দেখা — এগুলোর গতি ঠিক করে এটি।
bandwidth, throughput, goodputএকটি চওড়া কিন্তু লম্বা হাইওয়ের কথা ভাবুন — অনেক লেন (বেশি throughput), কিন্তু ঢাকা থেকে কক্সবাজার যেতে তবু অনেক ঘণ্টা (বেশি delay). আবার মহল্লার সরু গলি — দূরত্ব কম (কম delay), কিন্তু একবারে একটি রিকশাই যায় (কম throughput). দুটি সংখ্যা স্বাধীন — একটি ভালো হলেই অন্যটি ভালো হয় না।
২ · চার রকম delay — সংজ্ঞা আর সূত্র
একটি router-এ (বা যেকোনো node-এ) একটি packet ঢোকা থেকে পরের router-এ পৌঁছানো পর্যন্ত মোট সময়কে বলে nodal delay:
(ক) Processing delay — dproc
Processing delay হলো router-এর packet-টি “পড়ে সিদ্ধান্ত নেওয়ার” সময়: header পরীক্ষা, bit-এ ভুল আছে কি না দেখা, forwarding table-এ খুঁজে ঠিক করা কোন output link-এ যাবে (পর্ব ১৫-এ router-এর ভেতর দেখবেন)। আধুনিক hardware router-এ এটি সাধারণত মাইক্রোসেকেন্ড বা তারও কম। সাধারণত অঙ্কে একে খুব ছোট ধরা হয় বা প্রশ্নেই সংখ্যাটি দেওয়া থাকে।
(খ) Queuing delay — dqueue
Queuing delay হলো output link খালি হওয়ার অপেক্ষা। Link-এ যদি আগে থেকে অন্য packet যাচ্ছে বা অপেক্ষায় থাকে, নতুন packet-টিকে লাইনে (buffer-এ) দাঁড়াতে হয়। সামনে কেউ না থাকলে এটি শূন্য; ভিড় থাকলে অনেক বেশি। চারটি delay-এর মধ্যে শুধু এটিই packet থেকে packet-এ বদলায় — তাই একে গড় বা সম্ভাব্যতা দিয়ে মাপতে হয় (অংশ ৪)।
(গ) Transmission delay — dtrans = L/R
Transmission delay হলো packet-এর সব bit link-এ ঠেলে দিতে যে সময় লাগে। Packet-এর দৈর্ঘ্য L bit আর link-এর transmission rate R bit/সেকেন্ড হলে:
এখানে দূরত্বের কোনো ভূমিকা নেই! Link এক মিটার হোক বা এক হাজার কিলোমিটার, ১০ Mbps link-এ ১,৫০০ byte পাঠাতে লাগবে একই সময়। খেয়াল রাখুন, L সাধারণত byte-এ দেওয়া থাকে আর R bit-এ — তাই প্রথমেই ৮ দিয়ে গুণ করা জরুরি।
(ঘ) Propagation delay — dprop = d/s
Propagation delay হলো একটি bit link-এর এক মাথা থেকে অন্য মাথায় যেতে যে সময় লাগে। দূরত্ব d মিটার আর মাধ্যমে সংকেতের গতি s মিটার/সেকেন্ড হলে:
এখানে packet-এর আকার বা link-এর rate-এর কোনো ভূমিকা নেই। সংকেতের গতি মাধ্যমের ওপর নির্ভর করে: শূন্যে বা বাতাসে আলো/বেতার তরঙ্গ প্রায় ৩ × ১০৮ m/s; কাচের fiber-এ আলো চলে মোটামুটি দুই-তৃতীয়াংশ গতিতে, প্রায় ২ × ১০৮ m/s; তামার তারেও কাছাকাছি (তারের ধরনভেদে ০.৬–০.৮ গুণ)। এই পর্বের সব অঙ্কে ধরে নিচ্ছি: তামা আর fiber-এ s = ২ × ১০৮ m/s, বেতার/উপগ্রহে s = ৩ × ১০৮ m/s — পরীক্ষার খাতাতেও এই অনুমানটি স্পষ্ট লিখে দেবেন।
L/R নির্ভর করে packet আর link-এর rate-এর ওপর; d/s নির্ভর করে দূরত্ব আর মাধ্যমের ওপর। Rate বাড়ালে (১ Gbps থেকে ১০ Gbps) transmission delay কমে, কিন্তু propagation delay একটুও বদলায় না — আলোর গতি টাকা দিয়ে কেনা যায় না।
প্রথম অঙ্ক — ১,৫০০ byte, ১০০ Mbps, ২,০০০ km
প্রশ্ন: ১,৫০০ byte-এর একটি packet ১০০ Mbps-এর একটি fiber link দিয়ে ২,০০০ km দূরে যাবে। Transmission আর propagation delay কত? কোনটি বড়?
- L = ১,৫০০ × ৮ = ১২,০০০ bit; R = ১০০ × ১০৬ bit/s
- dtrans = ১২,০০০ / ১০৮ = ১.২ × ১০−৪ s = ১২০ µs
- dprop = (২,০০০ × ১০৩) / (২ × ১০৮) = ০.০১ s = ১০ ms
- অনুপাত: ১০ ms ÷ ১২০ µs ≈ ৮৩ গুণ — দূরপাল্লার link-এ propagation-ই প্রধান।
এবার এই সংখ্যাগুলো দিয়েই একটি packet-কে একটি router পার হতে দেখুন। ধরা যাক processing ২০ µs, আর packet-টি পৌঁছে দেখল সামনে আরও ২টি একই আকারের packet অপেক্ষায় আছে।
- পৌঁছাল
input portt = 0 - Processing
20 usheader, table - Queue
2 x 120 usলাইনে অপেক্ষা - Transmission
L/R = 120 usতারে ঠেলা - Propagation
d/s = 10 ms২,০০০ km
| d_proc | |
| d_queue | |
| d_trans | |
| d_prop | |
| মোট |
- Packet router-এ পৌঁছাল। ১,৫০০ byte = ১২,০০০ bit-এর packet-টির শেষ bit-টিও input port-এ এসে গেছে (store-and-forward: পুরোটা না এলে কাজ শুরু হয় না)। এখন থেকে ঘড়ি চালু।
- Processing — ২০ µs. Router header পড়ল, checksum দেখল, forwarding table-এ গন্তব্য খুঁজে ঠিক করল কোন output link-এ যাবে। মোট এখন ২০ µs.
- Queuing — ২৪০ µs. Output link-এ সামনে আরও ২টি packet আছে। প্রতিটির transmission-এ লাগে ১২০ µs, তাই অপেক্ষা ২ × ১২০ = ২৪০ µs. (সামনের packet-টি আধা পাঠানো হয়ে থাকলে অপেক্ষা কম হতো — বাস্তবে এই সংখ্যা প্রতি packet-এ বদলায়।) মোট ২৬০ µs.
- Transmission — L/R = ১২০ µs. এবার আমাদের পালা: ১২,০০০ bit ÷ ১০০ Mbps = ১২০ µs ধরে bit-গুলো একে একে তারে নামছে। শেষ bit তারে নামলে transmission শেষ। মোট ৩৮০ µs.
- Propagation — d/s = ১০ ms. শেষ bit-টিকেও ২,০০০ km পথ পাড়ি দিতে হবে: ২ × ১০৬ m ÷ ২ × ১০৮ m/s = ১০,০০০ µs. পরের router-এ শেষ bit পৌঁছায় মোট ১০,৩৮০ µs-এ।
- সারাংশ — ১০.৩৮ ms. মোট সময়ের প্রায় ৯৬% শুধু propagation (১০,০০০ ÷ ১০,৩৮০)। এই link-এর rate ১০ গুণ বাড়ালে transmission আর queuing কমবে, কিন্তু মোট সময় নামবে মাত্র প্রায় ১০.০৬ ms-এ। দূরপাল্লার পথে দূরত্বই রাজা।
প্রচলিত ভুল: (১) L-কে byte-এ রেখে R (bit/s) দিয়ে ভাগ করা — উত্তর ৮ গুণ কম আসে। (২) km-কে m-এ না বদলানো — উত্তর ১,০০০ গুণ ভুল। (৩) “Mbps”-এ M = ১০৬ না ধরে ২২০ ধরা — rate সবসময় দশমিক (অংশ ৮)। (৪) Transmission delay-তে দূরত্ব ঢুকিয়ে দেওয়া, বা propagation-এ packet-এর আকার।
৩ · Transmission বনাম propagation — পদ্মা সেতুর টোল প্লাজা
এই দুটি delay-এর পার্থক্য বোঝার সবচেয়ে বিখ্যাত উদাহরণ হলো “গাড়ির বহর আর টোল বুথ” (Kurose আর Ross-এর পাঠ্যবইয়ে বহুল ব্যবহৃত)। আমরা একে দেশি রূপ দিই — সংখ্যাগুলো কাল্পনিক, শুধু হিসাবের জন্য।
ধরুন ১০টি মাইক্রোবাসের একটি বহর পদ্মা সেতুর টোল প্লাজায় পৌঁছাল। টোল বুথে প্রতিটি গাড়ির টাকা নিয়ে ছাড়তে লাগে ১২ সেকেন্ড (ধরে নেওয়া সংখ্যা)। বহরের নিয়ম: সবাই একসাথে চলবে — পুরো বহর বুথ পার না হওয়া পর্যন্ত কেউ এগোবে না। পরের টোল প্লাজা ধরা যাক ১০০ km দূরে, আর গাড়িগুলো চলে ঘণ্টায় ১০০ km বেগে।
- বহরকে বুথ থেকে বের করতে = ১০ × ১২ s = ১২০ s = ২ মিনিট → এটাই transmission delay (গাড়ি = bit, বহর = packet, বুথের গতি = R).
- শেষ গাড়ির ১০০ km যেতে = ১ ঘণ্টা = ৬০ মিনিট → এটাই propagation delay (রাস্তার দৈর্ঘ্য = d, গাড়ির গতি = s).
- পরের প্লাজায় পুরো বহর পৌঁছাতে মোট ৬২ মিনিট।
টোল বুথে নতুন লেন খুললে (R বাড়ালে) ২ মিনিট কমে আসে। কিন্তু রাস্তার ১ ঘণ্টা কমাতে হলে গাড়িকেই দ্রুত চালাতে হবে, অথবা রাস্তা ছোট করতে হবে।
এবার উল্টো পরিস্থিতিটি ভাবুন, যা প্রথমবার শুনলে অবাক লাগে: ধরুন গাড়ি চলে ঘণ্টায় ১,০০০ km (তাই ১০০ km যেতে ৬ মিনিট), আর বুথে প্রতিটি গাড়ির লাগে ১ মিনিট। প্রথম গাড়ি বুথ ছাড়ে ১ মিনিটে, পরের প্লাজায় পৌঁছায় ১ + ৬ = ৭ মিনিটে। অথচ শেষ গাড়ি প্রথম বুথ ছাড়বে ১০ মিনিটে! অর্থাৎ বহরের প্রথম অংশ গন্তব্যে পৌঁছে গেছে, যখন শেষ অংশ এখনো যাত্রাই শুরু করেনি। Packet-এর ক্ষেত্রেও ঠিক তাই ঘটে যখন dtrans > dprop — প্রথম bit ওপারে পৌঁছায়, অথচ শেষ bit এখনো প্রেরকের কাছে।
নিচের ডায়াগ্রামে একই packet (১,৫০০ byte = ১২,০০০ bit) একই rate-এর (১০ Mbps) দুটি link-এ পাঠানো হচ্ছে — একটি ২০০ m-এর অফিসের তামার তার, অন্যটি ২,০০০ km-এর fiber. দুই link-এই dtrans = ১২,০০০ ÷ ১০৭ = ১.২ ms.
| সময় t | |
| ২০০ m (তামা) | |
| ২,০০০ km (fiber) | |
| কোনটি বড়? |
- t = ০ — দুই link-এই প্রথম bit রওনা দিল। দুই link-এর rate একই, তাই bit নামানোর গতিও একই: প্রতি ০.১ µs-এ একটি bit.
- t = ১ µs. ২০০ m তারে propagation মাত্র ২০০ ÷ ২ × ১০৮ = ১ µs — প্রথম bit ইতিমধ্যে ওপারে! অথচ প্রেরক এখন পর্যন্ত মাত্র ১০টি bit পাঠিয়েছে। লম্বা link-এ প্রথম bit সবে ২০০ m গেছে।
- t = ১.২ ms — শেষ bit তারে নামল। দুই link-এই transmission শেষ। ছোট link-এ তারের ওপর একসাথে থাকতে পারে মাত্র R × dprop = ১০ bit — packet-টি তারের চেয়ে “লম্বা”। লম্বা link-এ প্রথম bit এখন ১.২ ms × ২ × ১০৮ = ২৪০ km দূরে; পুরো packet ২৪০ km জুড়ে ছড়িয়ে আছে।
- t ≈ ১.২০১ ms — ছোট link শেষ। শেষ bit আরও ১ µs-এ ওপারে পৌঁছাল। মোট ১.২০১ ms-এর প্রায় পুরোটাই transmission. লম্বা link-এ packet-টি এখনো পথে ভাসছে।
- t = ১০ ms — লম্বা link-এ প্রথম bit পৌঁছাল। ২,০০০ km ÷ ২ × ১০৮ = ১০ ms. এই link-এ একসাথে ১০৭ × ০.০১ = ১,০০,০০০ bit পথে থাকতে পারে — আমাদের ১২,০০০ bit-এর packet সেখানে ছোট্ট একটি টুকরো।
- t = ১১.২ ms — লম্বা link শেষ। শেষ bit রওনা দিয়েছিল ১.২ ms-এ, তার সাথে ১০ ms যোগ। নিয়ম: শেষ bit পৌঁছায় dtrans + dprop সময়ে — দুই link-এই সূত্র একই, শুধু কোন পদটি বড় তা আলাদা।
দ্বিতীয় অঙ্ক — ঢাকা থেকে সিঙ্গাপুর (কাল্পনিক হিসাব)
বাংলাদেশের আন্তর্জাতিক ইন্টারনেটের বড় অংশ সমুদ্রের নিচের fiber কেবল (submarine cable) দিয়ে যায় — যেমন SEA-ME-WE সিরিজের কেবল, যার landing station কক্সবাজার আর কুয়াকাটায়। কেবল সোজা পথে যায় না; উপকূল আর সাগর ঘুরে যায়, তাই ভৌগোলিক দূরত্বের চেয়ে কেবলের দৈর্ঘ্য বেশি। আসল দৈর্ঘ্য কেবলভেদে আলাদা — আমরা শুধু হিসাবের জন্য ধরে নিই ঢাকা থেকে সিঙ্গাপুরের কোনো ডেটা সেন্টার পর্যন্ত মোট fiber পথ ৪,০০০ km.
- একমুখী propagation = ৪ × ১০৬ ÷ ২ × ১০৮ = ২০ ms
- যাওয়া-আসা (propagation-এর অংশ) = ৪০ ms — এটি পদার্থবিজ্ঞানের নিচের সীমা; router-এর processing, queuing আর পথের বাঁক মিলিয়ে বাস্তব ping এর চেয়ে বেশি আসে।
- ১০ Gbps link-এ ১,৫০০ byte-এর transmission মাত্র ১.২ µs — ২০ ms-এর পাশে নগণ্য।
এজন্যই বড় প্রতিষ্ঠানগুলো জনপ্রিয় কনটেন্ট দেশের ভেতরে বা কাছাকাছি cache রাখে (পর্ব ৩৮-এ CDN), আর দেশের ভেতরের ISP-দের মধ্যে ট্রাফিক বিদেশ না ঘুরিয়ে স্থানীয় exchange-এ (যেমন BDIX) আদান-প্রদানের চেষ্টা থাকে (পর্ব ২৫)। দূরত্ব কমানোই latency কমানোর সবচেয়ে কার্যকর উপায়।
৪ · Queuing delay আর traffic intensity — রাস্তা ভরে গেলে
ঢাকার কোনো মোড়ে ট্রাফিক পুলিশ মিনিটে ৩০টি গাড়ি পার করাতে পারেন। মিনিটে ১৫টি গাড়ি এলে প্রায় কেউ দাঁড়ায় না। ২৭টি এলে মাঝে মাঝে ছোট লাইন হয়। ৩০টি বা তার বেশি এলে? লাইন শুধু লম্বাই হতে থাকে — অফিস টাইমের জ্যাম। Router-এর queue ঠিক এভাবেই আচরণ করে।
ধরা যাক প্রতিটি packet-এর দৈর্ঘ্য L bit, প্রতি সেকেন্ডে গড়ে a-টি packet আসে, আর output link-এর rate R bit/s. তাহলে প্রতি সেকেন্ডে গড়ে La bit আসছে, আর বের করা যায় R bit. এদের অনুপাতকে বলে traffic intensity:
- ρ > ১: যত bit আসছে, বের করা যায় তার চেয়ে কম। Queue সীমাহীনভাবে বাড়তে চাইবে, delay অসীমের দিকে — বাস্তবে buffer ভরে packet ফেলা শুরু হয়। নকশার প্রথম নিয়ম: ρ কখনো ১-এর বেশি হতে দেওয়া যাবে না।
- ρ ≤ ১: গড়ে চাপ সামলানো যায়, কিন্তু queue কতটা লম্বা হবে তা নির্ভর করে packet-গুলো কীভাবে আসে তার ওপর। সমান ফাঁকে এলে (প্রতি L/R সময়ে ঠিক একটি) কাউকে অপেক্ষা করতে হয় না। একসাথে দলবেঁধে (burst) এলে শেষের দিকের packet-কে অপেক্ষা করতে হয়।
- ρ ১-এর কাছাকাছি: এলোমেলোভাবে (random) আসা packet-এর ক্ষেত্রে গড় queuing delay অনুপাতহীনভাবে লাফিয়ে বাড়ে। ρ সামান্য বাড়লেই delay অনেক বাড়ে।
উদাহরণ: ১০০ Mbps link, ১,৫০০ byte-এর packet, প্রতি সেকেন্ডে ৮,০০০টি আসে। ρ = ১২,০০০ × ৮,০০০ ÷ ১০৮ = ০.৯৬ — link ৯৬% ব্যস্ত, এখানে বড় queue হওয়ার আশঙ্কা প্রবল।
গড় queuing delay বনাম traffic intensity
Average queuing delay rises sharply as La/R approaches 1 (shape of ρ/(1−ρ))
এই বক্ররেখার আকার কোথা থেকে আসে? Queuing theory-র একটি সরল মডেলে (packet এলোমেলো Poisson ধারায় আসে, সবার আকার সমান — একে বলে M/D/1 queue) গড় অপেক্ষা হয় W = ρ/(2(1−ρ)) × L/R. Packet-এর আকারও এলোমেলো হলে (M/M/1) W = ρ/(1−ρ) × L/R. দুই সূত্রেই হর-এ আছে (১ − ρ) — ρ যত ১-এর কাছে যায়, হর তত শূন্যের কাছে, আর ফল তত বিশাল। নিচের simulator একটি router queue চালিয়ে এই তত্ত্ব যাচাই করে: সব packet একই আকারের, আগমন এলোমেলো কিন্তু নির্দিষ্ট seed থেকে তৈরি, তাই প্রতিবার একই ফল।
// One router queue, fixed-size packets: service time S = L/R = 1 unit.
// Random (Poisson) arrivals from a seeded generator -> the same output every run.
function rng(seed) { // mulberry32: small, deterministic
return () => {
seed = (seed + 0x6D2B79F5) | 0;
let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
};
}
const N = 400000, BUF = 20; // packets per run, buffer size (packets)
const S_us = 120; // 1500 B at 100 Mbps = 120 us per packet
console.log("La/R avg wait(x L/R) M/D/1 theory avg wait(us) loss(buffer=20)");
for (const rho of [0.5, 0.9, 0.99]) {
const rand = rng(2026);
let work = 0, sum = 0; // unlimited buffer: work left at arrival
let workB = 0, lost = 0; // finite buffer of BUF packets
for (let i = 0; i < N; i++) {
const gap = -Math.log(1 - rand()) / rho; // exponential gap, mean 1/rho
work = Math.max(0, work - gap);
sum += work; // this packet waits 'work' units
work += 1;
workB = Math.max(0, workB - gap);
if (workB > BUF) lost++; else workB += 1; // more than BUF ahead -> drop
}
const w = sum / N, theory = rho / (2 * (1 - rho));
console.log(rho.toFixed(2).padEnd(6) + w.toFixed(2).padStart(10) +
theory.toFixed(2).padStart(15) + (w * S_us).toFixed(0).padStart(14) +
((100 * lost / N).toFixed(3) + "%").padStart(14));
}আউটপুট (নির্ধারিত seed — প্রতিবার একই):
La/R avg wait(x L/R) M/D/1 theory avg wait(us) loss(buffer=20)
0.50 0.50 0.50 60 0.000%
0.90 4.53 4.50 544 0.154%
0.99 51.39 49.50 6167 1.982%
কীভাবে কাজ করে: work হলো একটি packet পৌঁছানোর মুহূর্তে link-এর সামনে জমে থাকা কাজ (কত L/R সময়ের সমান)। দুই আগমনের মাঝের ফাঁক (gap) পেরোলে সেই কাজ কমে, নতুন packet ঠিক work সময় অপেক্ষা করে, তারপর নিজের ১ একক যোগ করে — queuing theory-তে এটি Lindley-র সমীকরণ নামে পরিচিত। দ্বিতীয় হিসাব workB একই আগমন দেখে, কিন্তু সামনে ২০টির বেশি packet-এর কাজ জমে থাকলে নতুনটিকে ফেলে দেয়।
ফল পড়া: ρ = ০.৫-এ গড় অপেক্ষা মাত্র অর্ধেক packet-সময় (১০০ Mbps-এ ৬০ µs), কোনো loss নেই। ০.৯-এ অপেক্ষা ৯ গুণ (৫৪৪ µs), আর ২০-packet buffer-এ প্রায় ০.১৫% packet হারায়। ০.৯৯-এ অপেক্ষা ১০০ গুণের বেশি — ৬ ms-এর বেশি, ঢাকা–সিঙ্গাপুরের একমুখী propagation-এর (২০ ms) প্রায় এক-তৃতীয়াংশ — আর প্রায় ২% packet হারায়। Simulation-এর গড় তত্ত্বের (০.৫০, ৪.৫০, ৪৯.৫০) সাথে মেলে; ০.৯৯-এ সামান্য বেশি (৫১.৩৯), কারণ ১-এর কাছে queue খুব ধীরে স্থির হয় আর গড় দীর্ঘ জ্যামের ওপর নির্ভর করে — চার লাখ packet-এও কিছুটা এলোমেলোভাব থেকে যায়। rng(2026)-এর seed বদলে চালালে ০.৯৯-এর সংখ্যা সবচেয়ে বেশি নড়বে।
Packet loss — buffer ভরে গেলে
বাস্তবের router-এর buffer অসীম নয়। Queue ভরা অবস্থায় নতুন packet এলে router সেটিকে ফেলে দেয় (সবচেয়ে সরল নীতি “drop-tail” — লাইনের শেষে জায়গা না থাকলে বাদ)। প্রেরকের কাছে এটি packet loss. তখন কী হবে, তা নির্ভর করে ওপরের স্তরের protocol-এর ওপর: TCP হারানো packet আবার পাঠায় (পর্ব ৩০) আর পাঠানোর গতি কমিয়ে দেয় (পর্ব ৩২); UDP-তে চলা ভিডিও কলে সেই মুহূর্তের ছবি বা শব্দ হারিয়ে যায়। Packet loss তাই নেটওয়ার্কের পারফরম্যান্সের তৃতীয় মাপকাঠি — delay আর throughput-এর পাশে।
বড় buffer মানেই ভালো নয়। Loss কমাতে buffer বড় করলে ρ ১-এর কাছে থাকার সময় queue অনেক লম্বা হয় — packet হারায় না, কিন্তু শত শত ms দেরিতে পৌঁছায়। একে বলে bufferbloat; বাড়ির Wi-Fi router-এ বড় upload চলার সময় ভিডিও কল আটকে যাওয়ার একটি পরিচিত কারণ এটি (ভাবনার প্রশ্ন ৩)।
৫ · End-to-end delay, RTT আর ping
এক router-এর হিসাব জানা হলো। কিন্তু আপনার packet ঢাকা থেকে সিঙ্গাপুর যেতে সাধারণত ১০–২০টি router পার হয়। ধরা যাক উৎস আর গন্তব্যের মাঝে N − ১টি router, অর্থাৎ মোট N-টি link; নেটওয়ার্ক ফাঁকা (queuing নেই), আর সব link একই রকম। তাহলে end-to-end delay:
Link-গুলো ভিন্ন হলে প্রতিটির নিজের dtrans আর dprop আলাদা করে যোগ করতে হয়। উদাহরণ: ৩টি link (মাঝে ২টি router), প্রতিটি ১০ Mbps আর ১,০০০ km, processing ০.১ ms, packet ১,৫০০ byte. প্রতি link-এ dtrans = ১.২ ms, dprop = ৫ ms, তাই dend-end = ৩ × (০.১ + ১.২ + ৫) = ১৮.৯ ms.
পর্ব ০৪-এর store-and-forward সূত্রের সাথে মিলিয়ে নিন: P-টি packet পরপর পাঠালে (propagation আর processing বাদ দিয়ে) শেষ packet পৌঁছায় (N + P − ১) × L/R সময়ে। উপরের ৩টি link-এ ৪টি packet: (৩ + ৪ − ১) × ১.২ = ৭.২ ms. কারণ প্রথম packet-এর পাইপলাইন ভরে গেলে প্রতি L/R সময়ে একটি করে packet বেরোয় — packet switching-এর এই “পাইপলাইন”-ই বড় বার্তাকে টুকরো করার সুবিধা।
RTT — যাওয়া আর ফিরে আসা
অনেক কাজে একমুখী delay-এর চেয়ে গুরুত্বপূর্ণ হলো RTT (round-trip time): একটি ছোট বার্তা পাঠিয়ে উত্তর ফিরে আসা পর্যন্ত সময়। ওয়েবপেজ খোলার সময় প্রতিটি প্রশ্ন-উত্তর (DNS, TCP handshake, TLS, HTTP request) কমপক্ষে একটি RTT খায়। পথ দুই দিকে একই হলে RTT ≈ ২ × একমুখী delay, কিন্তু ইন্টারনেটে যাওয়া আর আসার পথ আলাদা হতেই পারে, আর queue দুই দিকে আলাদা — তাই RTT মাপাই নির্ভরযোগ্য, অনুমান নয়।
RTT মাপার সবচেয়ে পরিচিত টুল ping. এটি গন্তব্যে একটি ICMP Echo Request পাঠায়, গন্তব্য ICMP Echo Reply ফেরত দেয়, আর ping দুই মুহূর্তের পার্থক্য দেখায় (ICMP-এর বিস্তারিত পর্ব ২০-এ)। নিজের কম্পিউটারের loopback ঠিকানায় (127.0.0.1) ping করলে packet কোনো তারেই নামে না — kernel-এর ভেতরেই ঘুরে আসে। ফলে সেখানে কোনো propagation বা link-এর transmission নেই; যা থাকে তা কেবল সফটওয়্যারের processing.
# Round-trip time to our own machine (loopback). No outside network needed.
if command -v ping >/dev/null; then
ping -c 3 127.0.0.1 2>&1 || echo "ping exists but could not run here (needs raw/ICMP socket permission)"
else
echo "ping: not installed in this container"
fi
echo "--- loopback interface, from /sys and /proc ---"
echo "lo state: $(cat /sys/class/net/lo/operstate 2>/dev/null || echo unknown), mtu: $(cat /sys/class/net/lo/mtu 2>/dev/null || echo ?)"
awk '/lo:/ {sub(/.*lo:/, ""); print "lo received " $1 " bytes, " $2 " packets; sent " $9 " bytes, " $10 " packets"}' /proc/net/devএই পাতার পরীক্ষার পরিবেশে (একটি container) একটি আসল রানের আউটপুট:
ping: not installed in this container
--- loopback interface, from /sys and /proc ---
lo state: unknown, mtu: 65536
lo received 0 bytes, 0 packets; sent 0 bytes, 0 packets
সৎ স্বীকারোক্তি: এই container-এ ping টুলটিই নেই, তাই script তার fallback পথে গেছে — command -v দিয়ে আগে যাচাই করার কারণেই কোনো error ছাড়া চলেছে। বাকি দুই লাইন kernel-এর ফাইল থেকে পড়া। lo state: unknown দেখে ভয় পাবেন না: loopback-এর কোনো আসল তার নেই, তাই Linux সাধারণ কম্পিউটারেও এর operstate “unknown” দেখায়। MTU (একটি frame-এ সর্বোচ্চ কত byte) ৬৫,৫৩৬ — Linux-এ loopback-এর ডিফল্ট, Ethernet-এর ১,৫০০-এর চেয়ে অনেক বড়, কারণ এখানে কোনো physical সীমা নেই। আর packet গোনা শূন্য, কারণ container-এর নিজস্ব নেটওয়ার্ক namespace-এ এখন পর্যন্ত কেউ loopback ব্যবহার করেনি। আসল ping-এর আউটপুট দেখতে নিচের উদাহরণটি দেখুন, আর RTT নিজে মাপতে তার পরের C প্রোগ্রামটি।
একটি সাধারণ Linux কম্পিউটারে (যেখানে ping চালানোর অনুমতি আছে) একই কমান্ডের আউটপুট দেখতে এমন — উদাহরণ, আপনার সংখ্যা আলাদা হবে:
$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.057 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2043ms
rtt min/avg/max/mdev = 0.045/0.054/0.060/0.006 msশেষ লাইনটি পড়তে শিখুন: সর্বনিম্ন, গড়, সর্বোচ্চ RTT আর mdev (RTT কতটা ছড়ানো — jitter-এর একটি মোটামুটি মাপ)। time 2043ms মানে পুরো পরীক্ষায় লেগেছে প্রায় ২ সেকেন্ড, কারণ ping প্রতি সেকেন্ডে একটি করে পাঠায় — এটি RTT নয়। Windows-এ কমান্ডটি ping -n 3 127.0.0.1 (Linux/macOS-এ -c, Windows-এ -n), আর loopback-এ সাধারণত time<1ms দেখায়। Linux-এ সাধারণ ব্যবহারকারী ping চালাতে পারেন বিশেষ অনুমতি (capability) বা kernel-এর “ping socket” সেটিং-এর কারণে; container-এ এগুলো প্রায়ই বন্ধ থাকে।
ping না চললেও loopback-এর RTT নিজেই মাপা যায়। নিচের C প্রোগ্রামে দুটি UDP socket 127.0.0.1-এ বসানো: A থেকে B-তে ৬৪ byte-এর একটি datagram, B সেটি ফেরত পাঠায় A-তে — এক হাজার বার, প্রতিবার ঘড়ি ধরে (socket প্রোগ্রামিং বিস্তারিত পর্ব ৪২-এ)।
#include <stdio.h>
#include <time.h>
#include <arpa/inet.h>
#include <sys/socket.h>
static double now_us(void) {
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
return t.tv_sec * 1e6 + t.tv_nsec / 1e3;
}
int main(void) {
struct sockaddr_in a = {0}, b = {0};
socklen_t len = sizeof b;
int A = socket(AF_INET, SOCK_DGRAM, 0), B = socket(AF_INET, SOCK_DGRAM, 0);
a.sin_family = b.sin_family = AF_INET;
a.sin_addr.s_addr = b.sin_addr.s_addr = htonl(INADDR_LOOPBACK); /* 127.0.0.1 */
bind(A, (struct sockaddr *)&a, sizeof a); /* port 0 = kernel picks one */
bind(B, (struct sockaddr *)&b, sizeof b);
getsockname(A, (struct sockaddr *)&a, &len);
getsockname(B, (struct sockaddr *)&b, &len);
char msg[64] = "ping", buf[64];
const int N = 1000; double min = 1e9, max = 0, sum = 0;
for (int i = 0; i < N; i++) {
double t0 = now_us();
sendto(A, msg, sizeof msg, 0, (struct sockaddr *)&b, sizeof b); /* A -> B */
recv(B, buf, sizeof buf, 0);
sendto(B, buf, sizeof buf, 0, (struct sockaddr *)&a, sizeof a); /* B -> A */
recv(A, buf, sizeof buf, 0);
double rtt = now_us() - t0;
sum += rtt; if (rtt < min) min = rtt; if (rtt > max) max = rtt;
}
printf("%d UDP round trips on 127.0.0.1, 64-byte datagram\n", N);
printf("min %.1f us, avg %.1f us, max %.1f us\n", min, sum / N, max);
return 0;
}একটি আসল রানের আউটপুট:
1000 UDP round trips on 127.0.0.1, 64-byte datagram
min 11.4 us, avg 14.9 us, max 162.8 us
সংখ্যাগুলোর অর্থ: loopback-এ এক round trip-এ গড়ে প্রায় ১৫ µs — এর সবটাই processing: দুবার sendto আর দুবার recv system call, kernel-এর UDP/IP স্তর পার হওয়া, আর user space আর kernel-এর মধ্যে ডেটা কপি। কোনো তার নেই, তাই propagation শূন্য; queue ফাঁকা, তাই queuing প্রায় শূন্য। সর্বনিম্ন (১১.৪ µs) আর সর্বোচ্চ (১৬২.৮ µs)-এর বিশাল ফারাক হলো jitter-এর ছোট্ট নমুনা — হাজার বারের মধ্যে কোনো এক সময়ে OS অন্য কাজে CPU দিয়েছে, বা cache খালি ছিল। প্রতিবার চালালে সংখ্যা বদলাবে — যন্ত্র, ভার আর ভার্চুয়ালাইজেশনভেদে; কিন্তু গড় কয়েক থেকে কয়েক দশ µs-এ থাকবে, আর সর্বোচ্চটি সবসময় গড়ের চেয়ে অনেক বড় হবে। তুলনা করুন: অংশ ৩-এর ঢাকা–সিঙ্গাপুর হিসাবে শুধু propagation-এর RTT ৪০ ms — এই loopback RTT-এর আড়াই হাজার গুণেরও বেশি। আর bind-এ port 0 দেওয়ায় kernel নিজে একটি খালি port বেছে দিয়েছে, যা getsockname দিয়ে জেনে নেওয়া হয়েছে।
৬ · Throughput আর bottleneck link
Delay বলে “কত দেরিতে”, throughput বলে “কত পরিমাণে”। সার্ভার থেকে আপনার কম্পিউটারে একটি ফাইল আসছে — কোনো এক মুহূর্তে যে হারে bit পৌঁছাচ্ছে, তা instantaneous throughput (ডাউনলোড ম্যানেজারে যে লাফানো সংখ্যাটি দেখেন)। F bit-এর পুরো ফাইল নামতে T সেকেন্ড লাগলে average throughput = F/T. ৬০ MB-এর একটি ভিডিও ২০ সেকেন্ডে নামলে গড় throughput = ৬০ × ৮ ÷ ২০ = ২৪ Mbps.
পথে যদি অনেকগুলো link থাকে, throughput ঠিক করে সবচেয়ে ধীর link-টি — একে বলে bottleneck link. পানির পাইপের কথা ভাবুন: মোটা পাইপের মাঝখানে এক টুকরো সরু পাইপ থাকলে পুরো লাইনের প্রবাহ সেই সরু অংশের সমান। সার্ভারের link Rs আর আপনার link Rc হলে throughput = min(Rs, Rc).
কিন্তু মাঝখানের ইন্টারনেট “core”-ও তো অন্যদের সাথে ভাগ করা। ধরা যাক মাঝের একটি link-এর rate R, আর সেখান দিয়ে একসাথে n-টি ডাউনলোড চলছে, প্রত্যেকে মোটামুটি সমান ভাগ পায়। তাহলে আপনার ভাগ R/n, আর:
উদাহরণ: Rs = ২ Mbps, Rc = ১ Mbps, মাঝের link R = ৫ Mbps যা ১০টি ডাউনলোড ভাগ করছে। min(২, ১, ০.৫) = ০.৫ Mbps — এখানে আপনার বাড়ির link নয়, ভাগ করা core-ই bottleneck. সাধারণত ইন্টারনেটের core link-গুলো খুব মোটা, তাই bottleneck বেশিরভাগ সময় শেষ প্রান্তে (access network) থাকে — কিন্তু সবসময় নয়, যেমন সন্ধ্যার ভিড়ে কোনো ISP-র আন্তর্জাতিক link ভরে গেলে।
- সার্ভার link
Rs = 100 Mbpsনিজে একা - Core link
1 Gbps / 20২০টি flow ভাগ করে - বাড়ির link
Rc = 30 Mbpsaccess network
| Rs | |
| R/n | |
| Rc | |
| throughput | |
| bottleneck |
- সার্ভারের link — ১০০ Mbps. শুধু এই link থাকলে আপনি সর্বোচ্চ ১০০ Mbps পেতেন। কিন্তু পথ এখনো শেষ হয়নি — throughput এর বেশি হতে পারে না, কম হতে পারে।
- Core link — ১ Gbps, কিন্তু ২০ জনে ভাগ। একসাথে ২০টি ডাউনলোড চললে আপনার ন্যায্য ভাগ ১,০০০ ÷ ২০ = ৫০ Mbps. এখন পর্যন্ত সর্বোচ্চ সম্ভাব্য throughput ৫০ Mbps.
- বাড়ির link — ৩০ Mbps. তিনটি সংখ্যা: ১০০, ৫০, ৩০. সবচেয়ে ছোটটি ৩০ — আপনার বাড়ির link-ই bottleneck.
- ফল — ৩০ Mbps. ৬০ MB-এর ফাইল নামতে লাগবে ৬০ × ৮ ÷ ৩০ = ১৬ সেকেন্ড (header-এর খরচ বাদ দিয়ে)। সার্ভার যত শক্তিশালীই হোক, এর চেয়ে দ্রুত হবে না।
- বাড়ির link ১০০ Mbps-এ upgrade করলে? এখন min(১০০, ৫০, ১০০) = ৫০ Mbps — bottleneck সরে গেল core-এ। ফাইল নামবে ৬০ × ৮ ÷ ৫০ = ৯.৬ সেকেন্ডে, ১০০ Mbps-এর হিসাবে ৪.৮ সেকেন্ডে নয়। এজন্যই প্ল্যান বাড়ালেও সন্ধ্যায় গতি সমান বাড়ে না।
৭ · Bandwidth, throughput, latency, jitter — চারটি আলাদা জিনিস
দৈনন্দিন কথায় এই শব্দগুলো গুলিয়ে যায়, কিন্তু চাকরির পরীক্ষা আর ইন্টারভিউতে পার্থক্যটিই জানতে চাওয়া হয়। মোবাইল ডেটার উদাহরণ দিয়ে দেখি (সংখ্যাগুলো উদাহরণমাত্র — অপারেটর, এলাকা আর সময়ভেদে অনেক বদলায়):
| শব্দ | অর্থ | একক | মোবাইলে উদাহরণ |
|---|---|---|---|
| Bandwidth | Link-এর সর্বোচ্চ সম্ভাব্য rate — “পাইপ কত মোটা” (physical layer-এ এর আরেকটি অর্থ Hz-এ frequency-র পরিসর, পর্ব ০৭) | bps | ৪G/৫G cell যে সর্বোচ্চ rate সমর্থন করে |
| Throughput | আসলে যে হারে ডেটা পৌঁছাচ্ছে — bottleneck, ভিড়, loss সব মিলিয়ে | bps | Speed test-এ দেখা “২৫ Mbps download” |
| Latency | একটি packet পৌঁছাতে সময় (প্রায়ই RTT হিসেবে মাপা) | ms | Speed test-এর “ping ৪০ ms”; টাওয়ারের কাছে আর ভিড় কম থাকলে কম |
| Jitter | Packet থেকে packet-এ delay কতটা ওঠানামা করে | ms | চলন্ত বাসে ভিডিও কলে কথা কেটে কেটে আসা — delay কখনো ৩০, কখনো ১৫০ ms |
কোন কাজে কোনটি গুরুত্বপূর্ণ? বড় ফাইল নামাতে throughput; অনলাইন গেম আর শেয়ার বাজারের অর্ডারে latency; ভিডিও/ভয়েস কলে latency আর jitter দুটোই। Jitter-এর মূল কারণ queuing delay-এর ওঠানামা (অংশ ৪) — আর মোবাইলে বেতার চ্যানেলের অবস্থা বদলানো, handover (পর্ব ৫১)। ভিডিও কলের অ্যাপ প্রাপকের দিকে একটি ছোট “jitter buffer” রাখে: packet কিছুক্ষণ জমিয়ে সমান তালে বাজায়। ফলে কাটা-কাটা ভাব কমে, কিন্তু latency সামান্য বাড়ে — আবারও একটি trade-off.
“Speed test-এ ৫০ Mbps, তবু পেজ খুলতে দেরি” — কেন? একটি ওয়েবপেজ ছোট ছোট অনেক ফাইল, আর প্রতিটির আগে কয়েকটি RTT-র প্রশ্ন-উত্তর (DNS, TCP, TLS). ১০০ ms RTT-তে ৪টি round trip = ০.৪ s, bandwidth যত বেশিই হোক। ছোট ডেটার ক্ষেত্রে latency, বড় ডেটার ক্ষেত্রে throughput — এই নিয়মটি মনে রাখুন (ভাবনার প্রশ্ন ৫)।
৮ · Bandwidth-delay product আর এককের ফাঁদ
অংশ ৩-এর stepper-এ দেখেছেন, লম্বা link-এ একসাথে ১,০০,০০০ bit “পথে ভাসছে”। এই সংখ্যাটির নাম আছে: bandwidth-delay product (BDP).
যুক্তি (খাতায় যেভাবে লিখবেন): প্রেরক প্রতি সেকেন্ডে R bit তারে নামায়। একটি bit তারে নামার মুহূর্ত থেকে ওপারে পৌঁছাতে dprop সময় লাগে, তাই কোনো এক মুহূর্তে তারের ওপর থাকে ঠিক সেই bit-গুলো, যেগুলো শেষ dprop সময়ে পাঠানো হয়েছে — অর্থাৎ R × dprop bit. এখন ধরুন প্রেরক নিশ্চিত হতে চায় প্রতিটি bit পৌঁছেছে (প্রাপক “পেয়েছি” বার্তা, অর্থাৎ ACK, ফেরত পাঠায়)। প্রথম bit পাঠানো থেকে তার ACK ফিরে আসা পর্যন্ত লাগে এক RTT. এই সময় জুড়ে link পুরো গতিতে ব্যস্ত রাখতে হলে প্রেরককে ACK ছাড়াই R × RTT bit পাঠিয়ে রাখার অনুমতি থাকতে হবে। কম অনুমতি (W bit) থাকলে প্রতি RTT-তে সর্বোচ্চ W bit যায়, তাই:
উদাহরণ: ১০০ Mbps link, RTT ৪০ ms (ঢাকা–সিঙ্গাপুরের কাল্পনিক হিসাবের মতো)। BDP = ১০৮ × ০.০৪ = ৪ × ১০৬ bit = ৫,০০,০০০ byte (৫০০ KB). প্রেরক যদি ACK ছাড়া সর্বোচ্চ ৬৪ KB (৬৫,৫৩৫ byte) পাঠাতে পারে, throughput ≤ ৬৫,৫৩৫ × ৮ ÷ ০.০৪ ≈ ১৩.১ Mbps — ১০০ Mbps-এর link থাকা সত্ত্বেও! এই “ACK ছাড়া কতটা পাঠানো যায়” সীমাটিই TCP-র window. পর্ব ২৯–৩১-এ TCP-র সংযোগ, নির্ভরযোগ্যতা আর sliding window-এ ঠিক এই হিসাব ফিরে আসবে, আর পর্ব ৫৬-এ বাস্তব tuning.
নিচের calculator চারটি delay, RTT আর BDP একসাথে হিসাব করে — তিনটি পরিস্থিতিতে: অফিসের LAN, দেশ বা মহাদেশজুড়ে fiber, আর geostationary উপগ্রহ। Geostationary উপগ্রহ বিষুবরেখার প্রায় ৩৫,৭৮৬ km ওপরে থাকে; একমুখী যাত্রা মানে মাটি → উপগ্রহ → মাটি, অর্থাৎ অন্তত ২ × ৩৫,৭৮৬ km (ব্যবহারকারী ঠিক নিচে থাকলে; অন্য জায়গায় পথ আরও লম্বা)।
// One packet, one link: the four delays, RTT and the bandwidth-delay product.
// Assumption: the reply has the same size and sees the same delays (RTT = 2 x one-way).
function fmt(sec) { // seconds -> readable unit
if (sec >= 1) return sec.toFixed(3) + " s";
if (sec >= 1e-3) return (sec * 1e3).toFixed(3) + " ms";
return (sec * 1e6).toFixed(3) + " us";
}
function bytes(b) { return b >= 1e6 ? (b / 1e6).toFixed(2) + " MB" : (b / 1e3).toFixed(2) + " KB"; }
function link(name, L_bytes, R_bps, d_m, s_mps, proc_s, queue_s) {
const L = L_bytes * 8; // packet length in bits
const trans = L / R_bps; // L / R
const prop = d_m / s_mps; // d / s
const total = proc_s + queue_s + trans + prop;
const rtt = 2 * total;
console.log(`== ${name}: L=${L_bytes} B, R=${R_bps / 1e6} Mbps, d=${d_m / 1e3} km`);
console.log(` processing ${fmt(proc_s)}`);
console.log(` queuing ${fmt(queue_s)}`);
console.log(` transmission ${fmt(trans)} (L/R)`);
console.log(` propagation ${fmt(prop)} (d/s)`);
console.log(` one-way ${fmt(total)} RTT ~ ${fmt(rtt)}`);
console.log(` bits on the wire (R x prop) = ${(R_bps * prop).toFixed(0)}`);
console.log(` BDP (R x RTT) = ${(R_bps * rtt).toExponential(3)} bits = ${bytes(R_bps * rtt / 8)}`);
}
link("LAN, copper", 1500, 1e9, 100, 2e8, 5e-6, 0);
link("Cross-country fiber", 1500, 10e9, 4000e3, 2e8, 5e-6, 100e-6);
// Geostationary: ground -> satellite -> ground = 2 x 35,786 km, radio at ~3e8 m/s
link("GEO satellite", 1500, 50e6, 2 * 35786e3, 3e8, 5e-6, 1e-3);আউটপুট:
== LAN, copper: L=1500 B, R=1000 Mbps, d=0.1 km
processing 5.000 us
queuing 0.000 us
transmission 12.000 us (L/R)
propagation 0.500 us (d/s)
one-way 17.500 us RTT ~ 35.000 us
bits on the wire (R x prop) = 500
BDP (R x RTT) = 3.500e+4 bits = 4.38 KB
== Cross-country fiber: L=1500 B, R=10000 Mbps, d=4000 km
processing 5.000 us
queuing 100.000 us
transmission 1.200 us (L/R)
propagation 20.000 ms (d/s)
one-way 20.106 ms RTT ~ 40.212 ms
bits on the wire (R x prop) = 200000000
BDP (R x RTT) = 4.021e+8 bits = 50.27 MB
== GEO satellite: L=1500 B, R=50 Mbps, d=71572 km
processing 5.000 us
queuing 1.000 ms
transmission 240.000 us (L/R)
propagation 238.573 ms (d/s)
one-way 239.818 ms RTT ~ 479.637 ms
bits on the wire (R x prop) = 11928667
BDP (R x RTT) = 2.398e+7 bits = 3.00 MB
LAN: ১০০ m তারে propagation মাত্র ০.৫ µs; ১ Gbps-এও transmission (১২ µs) বড়, তার পরে processing (৫ µs). BDP মাত্র ৪.৩৮ KB — LAN-এ “পথে ভাসমান” ডেটা খুব কম। Fiber: উল্টো ছবি — ১০ Gbps-এ transmission ১.২ µs, কিন্তু propagation ২০ ms; মোট একমুখী ২০.১০৬ ms-এর প্রায় সবটাই দূরত্ব। BDP ৫০.২৭ MB — এই পথ পূর্ণ গতিতে ব্যবহার করতে প্রেরককে ACK ছাড়াই প্রায় ৫০ MB পাঠিয়ে রাখার অনুমতি দিতে হবে। উপগ্রহ: শুধু propagation-ই ২৩৮.৫৭৩ ms একমুখী, RTT ≈ ০.৪৮ s (৪৭৯.৬৩৭ ms) — আর এটি সর্বনিম্ন; ব্যবহারকারী উপগ্রহের ঠিক নিচে না থাকলে, বা ground station দূরে থাকলে, আরও বেশি। ৫০ Mbps-এর মাঝারি rate-এও BDP ৩ MB, কারণ RTT বিশাল।
এখানে MB মানে ১০৬ byte (bytes() ফাংশন ১০৬ দিয়ে ভাগ করে)। নিজের প্রশ্ন বসাতে শেষের link(...) লাইনগুলো বদলান — যেমন অংশ ২-এর অঙ্ক: link("Q1", 1500, 100e6, 2000e3, 2e8, 0, 0) দিলে transmission ১২০ µs আর propagation ১০ ms পাবেন।
এককের ফাঁদ — Mbps বনাম MB/s, ১০৬ বনাম ২২০
নেটওয়ার্কের সবচেয়ে বেশি ভুল হয় অঙ্কে নয়, এককে। তিনটি নিয়ম মুখস্থ রাখুন:
- ছোট b = bit, বড় B = byte. ১ byte = ৮ bit. ISP-র প্ল্যান আর link-এর rate bit-এ (Mbps); ব্রাউজার আর ডাউনলোড ম্যানেজারের গতি সাধারণত byte-এ (MB/s). ১০০ Mbps ÷ ৮ = ১২.৫ MB/s.
- Rate-এ সবসময় দশমিক: ১ Mbps = ১০৬ bit/s, ১ Gbps = ১০৯ bit/s — কখনো ২২০ নয়।
- ফাইল আর মেমরির আকারে দুই রীতি: MB = ১০৬ byte (দশমিক, SI), আর MiB = ২২০ = ১০,৪৮,৫৭৬ byte (binary, IEC). Windows-এর File Explorer binary হিসাব করে কিন্তু লেখে “MB”; হার্ডডিস্ক বিক্রেতা আর macOS দশমিক হিসাব করে। প্রশ্নে কোনটি, স্পষ্ট না থাকলে নিজের অনুমান লিখে দিন।
| প্রশ্ন | হিসাব | উত্তর |
|---|---|---|
| ১০০ Mbps কত MB/s? | ১০০ × ১০৬ ÷ ৮ ÷ ১০৬ | ১২.৫ MB/s (≈ ১১.৯২ MiB/s) |
| ১ GB (১০৯ byte) ফাইল, ১০০ Mbps | ৮ × ১০৯ ÷ ১০৮ | ৮০ s |
| ১ GiB (২৩০ byte) ফাইল, ১০০ Mbps | ৮ × ২৩০ ÷ ১০৮ | ≈ ৮৫.৯ s |
| “৫০ Mbps” প্ল্যানে ব্রাউজারে সর্বোচ্চ কত দেখাবে? | ৫০ ÷ ৮ | ≈ ৬.২৫ MB/s, header-এর খরচে আরও একটু কম |
আরও গভীরে: Linux-এ প্রতিটি TCP সংযোগের kernel-এর মাপা RTT, তার ওঠানামা (rttvar) আর congestion window দেখা যায় ss -ti কমান্ডে (পর্ব ০৬)। দীর্ঘ, দ্রুত পথে ৬৪ KB-এর window-সীমা ভাঙতে RFC 1323 (এখন RFC 7323) “window scaling” আনে, যা window-কে প্রায় ১ GB পর্যন্ত বাড়াতে দেয়; Linux নিজে receive buffer আকার মানিয়ে নেয় (autotuning). আর router-এর queue লম্বা হয়ে latency বাড়া ঠেকাতে CoDel (RFC 8289) আর FQ-CoDel (RFC 8290)-এর মতো active queue management অ্যালগরিদম buffer ভরার আগেই বেছে বেছে packet ফেলে, যাতে প্রেরক আগে থেকেই গতি কমায়।
পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:
- Transmission আর propagation delay-এর পার্থক্য? — Transmission = L/R, packet-এর সব bit তারে নামাতে সময় (দূরত্ব-নিরপেক্ষ); propagation = d/s, একটি bit ওপারে যেতে সময় (packet-আকার-নিরপেক্ষ)।
- Traffic intensity ১-এর বেশি হলে কী হয়? — Queue সীমাহীনভাবে বাড়তে চায়; বাস্তবে buffer ভরে packet loss আর বিশাল delay.
- Throughput কীভাবে নির্ধারিত হয়? — পথের bottleneck link দিয়ে: min(Rs, Rc, R/n).
- Bandwidth-delay product কী, কেন দরকার? — R × RTT, পথে একসাথে কত ডেটা থাকে; link পূর্ণ ব্যবহারে প্রেরকের window অন্তত এতটা হতে হয়।
- ১০০ Mbps-এ ১ GB ফাইল কত সময়ে? — ৮ × ১০৯ ÷ ১০৮ = ৮০ সেকেন্ড (header-এর খরচ বাদে)।
৯ · AI-এর যুগে delay আর throughput-এর অঙ্ক
“১৫০০ byte, ১০ Mbps, ৫০০০ km — total delay কত?” AI-কে জিজ্ঞেস করলে মুহূর্তে উত্তর পাবেন, সুন্দর ধাপসহ। কিন্তু নেটওয়ার্কের অঙ্কে AI-এর ভুলগুলো খুব চেনা ধরনের — আর ভুলটা প্রায়ই এককে, যা আত্মবিশ্বাসী ভাষার নিচে চাপা পড়ে।
| AI-এর ভুল | কেন ভুল | কীভাবে ধরবেন |
|---|---|---|
| Byte-কে bit-এ না বদলে L/R | উত্তর ৮ গুণ কম | প্রথম লাইনে L-এর একক bit কি না দেখুন |
| Mbps-এ ২২০ ব্যবহার, বা Mbps আর MB/s গুলিয়ে ফেলা | Rate সবসময় ১০৬; b আর B আলাদা | অংশ ৮-এর টেবিলের সাথে মেলান |
| s-এর মান না বলে ধরে নেওয়া (কখনো ৩ × ১০৮, কখনো ২ × ১০৮) | উত্তর দেড় গুণ আলাদা হয়ে যায় | অনুমানটি স্পষ্ট লিখতে বলুন |
| N-টি link আর N-টি router গুলিয়ে ফেলা | এক hop বেশি বা কম যোগ হয় | ছবি এঁকে link গুনুন |
| “Bandwidth বাড়ালেই latency কমে” | Propagation দূরত্বের ব্যাপার, rate-এর নয় | d/s আর L/R আলাদা করে হিসাব করুন |
পুরোনো কমান্ড (netstat, ifconfig) বা Windows-এর ping -n আর Linux-এর -c গুলিয়ে ফেলা | আধুনিক Linux-এ ss, ip; OS-ভেদে flag আলাদা | man ping, ping /? দেখুন |
| বানানো RFC নম্বর বা ভুল উদ্ধৃতি | ভাষার মডেল বিশ্বাসযোগ্য শোনানো নম্বর বানাতে পারে | rfc-editor.org-এ নম্বরটি খুলে শিরোনাম মেলান |
AI-কে delay-এর অঙ্ক দিলে অনুমান আর যাচাইয়ের শর্তসহ দিন:
AI-এর উত্তর মানার আগে — চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১Bandwidth তো প্রতি দশকে বহু গুণ বেড়েছে — latency কেন সেভাবে কমেনি? কিছু প্রতিষ্ঠান কয়েক মিলিসেকেন্ড বাঁচাতে কেন কোটি কোটি টাকা খরচ করে?
Bandwidth বাড়ানো মানে R বাড়ানো — আরও উন্নত laser, এক fiber-এ অনেক রঙের আলো (wavelength-division multiplexing, পর্ব ০৮), আরও দ্রুত electronics. এতে transmission delay L/R কমে, আর একসাথে অনেক বেশি ডেটা পাঠানো যায়। কিন্তু দূরপাল্লার পথে মোট delay-এর প্রধান অংশ propagation — d/s. এখানে s হলো মাধ্যমে আলোর গতি, যা পদার্থবিজ্ঞান ঠিক করে দেয়। Fiber-এ আলো শূন্যের গতির মোটামুটি দুই-তৃতীয়াংশে চলে, আর এই সংখ্যা কোনো প্রযুক্তি দিয়ে খুব বেশি বাড়ানো যায় না। তাই latency কমানোর পথ মাত্র তিনটি: দূরত্ব কমানো, দ্রুততর মাধ্যম ব্যবহার, আর queuing/processing কমানো।
আর্থিক বাজারের উচ্চগতির ট্রেডিং (high-frequency trading) এর সবচেয়ে নাটকীয় উদাহরণ। যুক্তরাষ্ট্রের শিকাগো আর নিউ ইয়র্কের এক্সচেঞ্জের মধ্যে ২০১০ সালের দিকে একটি প্রতিষ্ঠান (Spread Networks) পাহাড় কেটে প্রায় সোজা পথে নতুন fiber বসায়, শুধু পুরোনো পথের চেয়ে কয়েক মিলিসেকেন্ড কম RTT পাওয়ার জন্য। কয়েক বছরের মধ্যে অন্যরা microwave টাওয়ারের শিকল বসায় — বাতাসে বেতার তরঙ্গ fiber-এর চেয়ে দ্রুত চলে (প্রায় ৩ × ১০৮ বনাম ২ × ১০৮ m/s), আর টাওয়ার থেকে টাওয়ারে প্রায় সরলরেখায় যাওয়া যায়। বিনিময়ে bandwidth কম, আর বৃষ্টিতে সংকেত দুর্বল হয়। যেখানে কয়েক মাইক্রোসেকেন্ড আগে দাম জানতে পারলে লাভ, সেখানে এই trade-off গ্রহণযোগ্য।
সাধারণ ব্যবহারকারীর জন্যও একই যুক্তি কাজ করে। একটি ওয়েবপেজ খুলতে অনেকগুলো RTT লাগে, তাই সার্ভার দূরে থাকলে ১ Gbps-এর সংযোগও পেজ দ্রুত খোলাতে পারে না। এজন্যই CDN আর edge server (পর্ব ৩৮) কনটেন্টকে ব্যবহারকারীর কাছে নিয়ে আসে — দূরত্ব কমানোই সবচেয়ে কার্যকর latency অপটিমাইজেশন। নতুন protocol-ও (TLS 1.3, QUIC — পর্ব ৩৩, ৪৮) মূলত RTT-এর সংখ্যা কমানোর চেষ্টা।
মূল উপলব্ধি: Bandwidth হলো প্রকৌশলের সমস্যা, টাকা আর প্রযুক্তি দিয়ে বাড়ানো যায়; latency-র একটি অংশ পদার্থবিজ্ঞানের সমস্যা, আলোর গতি দিয়ে বাঁধা। দূরপাল্লার পথে latency কমাতে হলে দূরত্ব কমান বা round trip-এর সংখ্যা কমান।
প্র ০২Geostationary উপগ্রহের ইন্টারনেটে গেম খেলা বা ভিডিও কল কঠিন কেন? নিচু কক্ষপথের (LEO) উপগ্রহ-বহর কীভাবে এটি বদলায়, আর তার দাম কী?
Geostationary উপগ্রহ বিষুবরেখার প্রায় ৩৫,৭৮৬ km ওপরে পৃথিবীর ঘূর্ণনের সাথে তাল মিলিয়ে ঘোরে, তাই মাটি থেকে সবসময় একই জায়গায় দেখায়। Antenna একবার তাক করলেই চলে, আর মাত্র তিনটি উপগ্রহে প্রায় পুরো পৃথিবী ঢাকা যায় — টেলিভিশন সম্প্রচারের জন্য চমৎকার। বাংলাদেশের প্রথম যোগাযোগ উপগ্রহ বঙ্গবন্ধু স্যাটেলাইট-১ (২০১৮ সালে উৎক্ষেপণ) এমনই একটি geostationary উপগ্রহ, যার প্রধান ব্যবহার টিভি সম্প্রচার আর দূরবর্তী এলাকার যোগাযোগ।
কিন্তু ইন্টারনেটের জন্য সমস্যা হলো দূরত্ব। আপনার request যায় মাটি → উপগ্রহ → ground station, উত্তর ফেরে একই পথে — মোট অন্তত ৪ × ৩৫,৭৮৬ km. আলোর গতিতেও এতে লাগে প্রায় ০.৪৮ সেকেন্ড, আর বাস্তবে processing ও মাটির নেটওয়ার্ক যোগ হয়ে RTT প্রায়ই ০.৬ সেকেন্ডের কাছাকাছি বা বেশি। ভিডিও কলে আপনি কথা শেষ করার প্রায় আধা সেকেন্ড পর অন্যজন শুনবেন — দুজনে একসাথে কথা বলে ফেলা স্বাভাবিক হয়ে যায়। গেমে প্রতিটি ক্লিকের ফল দেখতে আধা সেকেন্ড দেরি খেলাটাকেই অসম্ভব করে। আর অংশ ৮-এর হিসাব অনুযায়ী বিশাল RTT মানে বিশাল BDP — TCP-কে খুব বড় window লাগে, নইলে বেশি bandwidth থাকলেও throughput কম; অনেক উপগ্রহ-ইন্টারনেট সেবা এজন্য বিশেষ “performance-enhancing proxy” ব্যবহার করে।
নিচু কক্ষপথের উপগ্রহ (LEO), যেমন Starlink-এর অনেক উপগ্রহ প্রায় ৫৫০ km উচ্চতায়, দূরত্ব প্রায় ৬৫ ভাগের এক ভাগে নামিয়ে আনে। তখন শুধু উপগ্রহ-পথের propagation-এর RTT হয় মাত্র কয়েক ms (৪ × ৫৫০ km ÷ ৩ × ১০৮ ≈ ৭.৩ ms), আর বাস্তব RTT কয়েক দশ ms-এ নামে। দাম? এত নিচে একেকটি উপগ্রহ পৃথিবীর অল্প অংশ দেখে আর দ্রুত আকাশ পার হয়ে যায়; তাই হাজার হাজার উপগ্রহ লাগে, ব্যবহারকারীর সংযোগ অল্প সময় পরপর (মিনিটের মধ্যেই, প্রায়ই আরও ঘন ঘন) এক উপগ্রহ থেকে আরেকটিতে সরাতে হয় (handover), আর তাতে jitter বাড়ে। মহাকাশের আবর্জনা আর জ্যোতির্বিজ্ঞানের পর্যবেক্ষণে বাধা নিয়েও বিতর্ক আছে।
মূল উপলব্ধি: Propagation delay = d/s — s বদলানো যায় না, তাই d বদলানোই একমাত্র উপায়। প্রতিটি নকশা-সিদ্ধান্ত (উঁচু কক্ষপথ, কম উপগ্রহ বনাম নিচু কক্ষপথ, অনেক উপগ্রহ) আসলে delay, খরচ আর জটিলতার মধ্যে একটি দাম-দর।
প্র ০৩Router-এর buffer বড় করলে packet loss কমে — তাহলে যত বড় সম্ভব buffer দেওয়াই কি ভালো? “Bufferbloat” কী শিখিয়েছে?
প্রথম দৃষ্টিতে যুক্তিটি ঠিক মনে হয়: বড় buffer মানে ভিড়ের সময় বেশি packet জমিয়ে রাখা যায়, কম packet ফেলতে হয়। মেমরিও সস্তা হয়ে গেছে, তাই বহু বছর ধরে বাড়ির router, cable modem আর মোবাইল নেটওয়ার্কের যন্ত্রে বিশাল buffer দেওয়া হতো। ফলাফল হলো একটি অদ্ভুত সমস্যা, যার নাম ২০১০ সালের দিকে Jim Gettys জনপ্রিয় করেন: bufferbloat.
সমস্যাটি বুঝতে অংশ ৪-এর বক্ররেখাটি মনে করুন, আর TCP-র আচরণ (পর্ব ৩২): TCP তার পাঠানোর গতি বাড়াতেই থাকে যতক্ষণ না loss হয়। Buffer যত বড়, loss তত দেরিতে আসে — অর্থাৎ TCP bottleneck-এর buffer পুরো ভরে ফেলে তারপর থামে। ২ সেকেন্ডের ডেটা ধরার মতো buffer হলে, সেটি ভরে থাকা অবস্থায় প্রতিটি নতুন packet-কে ২ সেকেন্ড লাইনে দাঁড়াতে হয়। একজন বড় ফাইল upload করছেন, আর একই Wi-Fi-তে আরেকজনের ভিডিও কল আটকে যাচ্ছে, গেমে ping কয়েক ms থেকে কয়েকশো ms-এ উঠে যাচ্ছে — অথচ কোনো packet হারাচ্ছে না! Loss-এর বদলে latency দিয়ে দাম দেওয়া হচ্ছে, আর TCP-র কাছে ভিড়ের সংকেত (loss) দেরিতে পৌঁছানোয় সে ঠিক সময়ে গতি কমাতেও পারছে না।
সমাধান “ছোট buffer” নয়, বরং “বুদ্ধিমান queue”. CoDel (Kathleen Nichols আর Van Jacobson-এর নকশা) দেখে packet-গুলো queue-তে কতক্ষণ বসে আছে; এই সময় নির্দিষ্ট সীমার বেশি হয়ে টিকে থাকলে ইচ্ছে করে কিছু packet ফেলে দেয়, যাতে প্রেরক আগেভাগে গতি কমায়। FQ-CoDel আবার প্রতিটি flow-কে আলাদা লাইনে রাখে, যাতে বড় upload-এর পেছনে ছোট ভিডিও কলের packet আটকে না থাকে। এগুলো এখন Linux-এ আছে আর অনেক আধুনিক router-এর firmware-এ ব্যবহৃত হয়। আরও আধুনিক ধারণা ECN (Explicit Congestion Notification): packet না ফেলে header-এ “ভিড় হচ্ছে” চিহ্ন দেওয়া।
মূল উপলব্ধি: Loss আর delay একটি দাঁড়িপাল্লার দুই দিক। Buffer queue-কে শোষণ করে burst সামলানোর জন্য, স্থায়ী জ্যাম জমিয়ে রাখার জন্য নয়। ভালো নেটওয়ার্ক নকশা queue-কে ছোট রাখে, আর ভিড়ের খবর প্রেরকের কাছে দ্রুত পৌঁছায়।
প্র ০৪“১০০ Mbps-এর প্ল্যান নিয়েছি, অথচ ডাউনলোড দেখায় ১১ MB/s — ISP ঠকাচ্ছে?” পুরো হিসাবটি কীভাবে করবেন?
প্রথমে এককের রূপান্তর: ১০০ Mbps = ১০০ × ১০৬ bit/s ÷ ৮ = ১২.৫ × ১০৬ byte/s = ১২.৫ MB/s. অর্থাৎ নিখুঁত অবস্থাতেও ১০০ “MB/s” কখনো সম্ভব ছিল না — ৮ গুণের পার্থক্যটি bit আর byte-এর। বহু অভিযোগের উৎস শুধু এই ছোট b আর বড় B.
দ্বিতীয়ত header-এর খরচ। Ethernet-এ ১,৫০০ byte-এর IP packet পাঠাতে তারে আসলে যায় আরও ৩৮ byte: ১৪ byte Ethernet header, ৪ byte FCS (error check), ৮ byte preamble আর frame-এর মাঝে ১২ byte-এর বাধ্যতামূলক ফাঁক। আর ১,৫০০ byte-এর ভেতরে ৪০ byte যায় IP আর TCP header-এ (option ছাড়া)। তাই আপনার আসল ডেটা (payload) ১,৪৬০ byte প্রতি ১,৫৩৮ byte-এ — প্রায় ৯৪.৯%. ফলে ১০০ Mbps-এর link-এ সর্বোচ্চ goodput (অ্যাপের কাছে পৌঁছানো দরকারি ডেটার হার) ≈ ৯৪.৯ Mbps ≈ ১১.৮৭ MB/s.
তৃতীয়ত ২২০-এর ফাঁদ। অনেক ডাউনলোড ম্যানেজার আর Windows “MB” লিখে আসলে MiB (১০,৪৮,৫৭৬ byte) দেখায়। ১১.৮৭ × ১০৬ ÷ ১০,৪৮,৫৭৬ ≈ ১১.৩২ — অর্থাৎ পর্দায় “১১.৩ MB/s” দেখাই সম্পূর্ণ স্বাভাবিক, ISP প্রতিশ্রুতি পুরোপুরি রাখলেও!
এরপর আসে অংশ ৬-এর bottleneck: সার্ভার নিজে কত দ্রুত পাঠায়, মাঝের আন্তর্জাতিক link-এ সন্ধ্যার ভিড় (R/n), বাড়ির Wi-Fi (প্রায়ই তারের চেয়ে ধীর), আর অংশ ৮-এর window-সীমা (দূরের সার্ভার হলে W/RTT). সঠিক পরীক্ষা হলো তারে যুক্ত কম্পিউটার থেকে, কাছের সার্ভারে, ভিন্ন সময়ে কয়েকবার speed test — আর ফলাফল bit-এ মেলানো। তারপরও বারবার প্রতিশ্রুতির অনেক নিচে থাকলে ISP-কে প্রমাণসহ জানানোর অধিকার আপনার আছে।
মূল উপলব্ধি: “গতি কম” অভিযোগের আগে তিনটি রূপান্তর করুন — bit থেকে byte, header-এর খরচ, আর MB বনাম MiB. তারপর bottleneck খুঁজুন। সংখ্যা বুঝলে অনেক “রহস্য” সাধারণ পাটিগণিত হয়ে যায়।
প্র ০৫“It's the latency, stupid” — ওয়েবপেজ খোলার গতিতে bandwidth-এর চেয়ে latency বেশি গুরুত্বপূর্ণ কেন? এই চিন্তা protocol-এর নকশা কীভাবে বদলেছে?
১৯৯৬ সালে Stuart Cheshire “It's the Latency, Stupid” শিরোনামে একটি প্রবন্ধ লেখেন। তাঁর মূল যুক্তি: bandwidth টাকা দিয়ে কেনা যায় — আরও লাইন, আরও মোটা link; কিন্তু latency একবার খারাপ হলে টাকা দিয়ে ঠিক করা কঠিন, কারণ এর একটি অংশ আলোর গতি দিয়ে বাঁধা। আর ছোট আদান-প্রদানের ক্ষেত্রে মোট সময়ে বেশিরভাগই অপেক্ষা, ডেটা পাঠানো নয়।
একটি হিসাব দেখুন। ধরুন একটি ১০০ KB-এর ফাইল চাইবেন, RTT ১০০ ms. নতুন সংযোগ খুলতে DNS প্রশ্ন (১ RTT), TCP handshake (১ RTT), পুরোনো TLS handshake (২ RTT), তারপর HTTP request-response (১ RTT) — মোট প্রায় ৫ RTT = ০.৫ s. শুধু ১০০ KB পাঠাতে ১০ Mbps-এ লাগে ০.০৮ s, ১০০ Mbps-এ ০.০০৮ s. Bandwidth দশ গুণ বাড়িয়ে আপনি বাঁচালেন মাত্র ৭২ ms, অথচ RTT অর্ধেক করলে বাঁচত ২৫০ ms. তার ওপর TCP শুরুতে ধীরে গতি বাড়ায় (slow start, পর্ব ৩২), তাই ছোট ফাইল পুরো bandwidth ব্যবহার করার আগেই শেষ হয়ে যায়। Google-এর প্রকৌশলী Mike Belshe ২০১০ সালের দিকে পরিমাপ করে দেখান, কয়েক Mbps-এর পর bandwidth বাড়ালে পেজ লোডের সময় খুব সামান্য কমে, কিন্তু RTT কমালে প্রায় সমানুপাতিক হারে কমে।
এই উপলব্ধি পরের দুই দশকের protocol নকশাকে চালিয়েছে। HTTP/2 এক সংযোগে অনেক request চালায়, যাতে নতুন handshake না লাগে (পর্ব ৩৭)। TLS 1.3 handshake-কে এক RTT-তে নামিয়েছে, আর আগের সংযোগে ফিরে এলে শূন্য RTT-তেও ডেটা পাঠানোর সুযোগ আছে (পর্ব ৪৮)। QUIC transport আর encryption-এর handshake একসাথে করে (পর্ব ৩৩)। CDN সার্ভারকে কাছে আনে। ব্রাউজার আগেভাগে DNS আর সংযোগ খুলে রাখে। প্রতিটিরই লক্ষ্য একটি: round trip কমানো, বা যে round trip থাকছে তার দৈর্ঘ্য কমানো।
মূল উপলব্ধি: মোট সময় ≈ (round trip-এর সংখ্যা × RTT) + (ডেটার আকার ÷ throughput). ছোট ডেটায় প্রথম পদটি রাজত্ব করে, বড় ডেটায় দ্বিতীয়টি। কোন পদটি বড়, তা না জেনে “গতি বাড়ানো” অর্থহীন।
অনুশীলন
খাতা-কলম আর ক্যালকুলেটর নিন — প্রতিটি সংখ্যার একক লিখে লিখে হিসাব করুন।
-
হাতে হিসাব (store-and-forward): ১,০০০ byte-এর একটি packet উৎস থেকে গন্তব্যে যাবে ৩টি link দিয়ে। প্রতিটি link ২ Mbps, দৈর্ঘ্য ৫,০০০ km, s = ২ × ১০৮ m/s. Processing আর queuing শূন্য। প্রতি link-এর transmission আর propagation delay কত? মোট end-to-end delay কত?
L = ১,০০০ × ৮ = ৮,০০০ bit. dtrans = ৮,০০০ ÷ (২ × ১০৬) = ০.০০৪ s = ৪ ms. dprop = (৫ × ১০৬ m) ÷ (২ × ১০৮ m/s) = ০.০২৫ s = ২৫ ms. Store-and-forward-এ প্রতি link-এ পুরো packet নতুন করে পাঠাতে হয়, তাই মোট = ৩ × (৪ + ২৫) = ৮৭ ms. খেয়াল করুন, propagation-ই প্রধান; rate দ্বিগুণ করলে মোট কমবে মাত্র ৬ ms (৮১ ms).
-
আউটপুট অনুমান করুন: অংশ ৮-এর calculator-এ শেষে এই লাইনটি যোগ করলে
BDPলাইনে কী ছাপা হবে?link("Long fat pipe", 1500, 1e9, 10000e3, 2e8, 0, 0);(১ Gbps, ১০,০০০ km, processing আর queuing শূন্য)dtrans = ১২,০০০ ÷ ১০৯ = ১২ µs; dprop = ১০৭ ÷ (২ × ১০৮) = ৫০ ms. একমুখী = ৫০.০১২ ms, RTT = ১০০.০২৪ ms. BDP = ১০৯ × ০.১০০০২৪ = ১.০০০২৪ × ১০৮ bit, তাই লাইনটি হবে
BDP (R x RTT) = 1.000e+8 bits = 12.50 MB. অর্থাৎ এই পথ পূর্ণ ব্যবহার করতে প্রেরকের window প্রায় ১২.৫ MB লাগবে — ৬৪ KB-এর প্রায় ১৯০ গুণ। এমন “লম্বা আর মোটা” পথের জন্যই TCP-তে window scaling এসেছে। -
Bottleneck খুঁজুন: সার্ভারের link Rs = ১০ Mbps, আপনার link Rc = ২০ Mbps, মাঝের core link R = ৬০ Mbps যেখানে একসাথে ১০টি ডাউনলোড চলছে (সমান ভাগ)। আপনার throughput কত, bottleneck কোনটি? ৩০ MB-এর ফাইল নামতে কত সময়?
R/n = ৬০ ÷ ১০ = ৬ Mbps. Throughput = min(১০, ২০, ৬) = ৬ Mbps; bottleneck ভাগ করা core link. সময় = ৩০ × ৮ ÷ ৬ = ৪০ সেকেন্ড (header বাদে, MB = ১০৬ byte ধরে)। আপনার ২০ Mbps-এর প্ল্যান এখানে কাজেই লাগছে না; বাকি ৯টি ডাউনলোড শেষ হলে R/n বেড়ে ৬০ হবে, তখন bottleneck হবে সার্ভারের ১০ Mbps.
-
এককের ফাঁদ: ২০ Mbps-এর সংযোগে একটি “৫০০ MB” ফাইল নামাতে কত সময়? যদি ফাইলটি আসলে ৫০০ MiB হয়? দুটি উত্তরের পার্থক্য কত শতাংশ?
৫০০ MB = ৫ × ১০৮ byte = ৪ × ১০৯ bit; ÷ ২ × ১০৭ bit/s = ২০০ সেকেন্ড. ৫০০ MiB = ৫০০ × ১০,৪৮,৫৭৬ = ৫২,৪২,৮৮,০০০ byte; × ৮ ÷ ২ × ১০৭ ≈ ২০৯.৭ সেকেন্ড. পার্থক্য প্রায় ৪.৯% — ২২০ ÷ ১০৬ = ১.০৪৮৫৭৬ থেকেই আসে। GiB-তে এই পার্থক্য হয় প্রায় ৭.৪% (২৩০ ÷ ১০৯)। পরীক্ষায় কোন রীতি ব্যবহার করছেন, প্রথম লাইনেই লিখে দিন।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি packet একটি router-এ পৌঁছানো থেকে পরের router-এ পৌঁছানো পর্যন্ত — ঘটনাগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- পুরো packet input port-এ এসে পৌঁছায় (store-and-forward)
- Processing — header পরীক্ষা আর forwarding table দেখে output link ঠিক করা
- Queuing — output link খালি হওয়ার অপেক্ষা
- Transmission — সব bit link-এ ঠেলে দেওয়া (L/R)
- Propagation — শেষ bit পরের router-এ পৌঁছানো (d/s)
একটি link-এর transmission delay কোন দুটি জিনিসের ওপর নির্ভর করে?
- Link-এর দূরত্ব আর মাধ্যমে সংকেতের গতি
- Packet-এর দৈর্ঘ্য আর link-এর transmission rate
- Queue-তে অপেক্ষমাণ packet-এর সংখ্যা আর buffer-এর আকার
- Router-এর CPU-র গতি আর forwarding table-এর আকার
১,৫০০ byte-এর একটি packet ১০ Mbps-এর link-এ পাঠাতে transmission delay কত?
- ০.১৫ ms
- ১২ ms
- ১.২ ms
- ১২০ µs
একটি router-এর output link ১০০ Mbps, প্রতিটি packet ১,৫০০ byte, প্রতি সেকেন্ডে গড়ে ৯,০০০টি packet আসে। Traffic intensity আর তার অর্থ কী?
- ১.০৮ — queue বাড়তেই থাকবে, শেষে packet loss
- ০.১৩৫ — link প্রায় খালি
- ০.৯ — ছোট queue, কোনো loss নেই
- ১.০৮ — router দ্রুত চলবে, delay শূন্য
সার্ভারের link ৫ Mbps, ব্যবহারকারীর link ২ Mbps, আর মাঝের একটি core link ১২ Mbps যা ৪টি ডাউনলোড সমানভাবে ভাগ করছে। ব্যবহারকারীর throughput কত?
- ১২ Mbps
- ১৯ Mbps
- ৩ Mbps
- ২ Mbps
একটি link-এর rate ১০০ Mbps আর RTT ৪০ ms. Bandwidth-delay product কত, আর প্রেরক ACK ছাড়া সর্বোচ্চ ৬৪ KB পাঠাতে পারলে throughput-এর ঊর্ধ্বসীমা প্রায় কত?
- ৪ MB; ১০০ Mbps পুরোটাই পাওয়া যাবে
- ৫০০ KB; প্রায় ১৩ Mbps
- ৫ MB; প্রায় ১.৩ Mbps
- ১০০ Mb; ৬৪ Mbps
একটি ISP-র প্ল্যান “৫০ Mbps”. নিখুঁত অবস্থায় (header-এর খরচ বাদে) ব্রাউজারে সর্বোচ্চ ডাউনলোড গতি কত দেখানোর কথা?
- ৫০ MB/s
- ৪০০ MB/s
- ৬.২৫ MB/s
- ৪৭.৭ MB/s
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Nodal delay = processing + queuing + transmission (L/R) + propagation (d/s); N-টি link-এ end-to-end ≈ N × (dproc + L/R + d/s).
- L/R packet আর rate-এর ওপর, d/s দূরত্ব আর মাধ্যমের ওপর নির্ভর করে; দূরপাল্লায় propagation, ধীর ছোট link-এ transmission প্রধান।
- Traffic intensity La/R ১-এর কাছে গেলে queuing delay বিস্ফোরিত হয়; ১-এর বেশি হলে buffer ভরে packet loss.
- Throughput = min(Rs, Rc, R/n) — bottleneck link ঠিক করে; latency, jitter আর bandwidth আলাদা মাপকাঠি।
- BDP = R × RTT, throughput ≤ W/RTT; আর সবসময় এককের হিসাব: b বনাম B, ১০৬ বনাম ২২০.
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০৬ · Linux-এ নেটওয়ার্ক দেখা — ip, ping, ss, curl আর /proc/netপরবর্তী পর্বRTT, interface আর সংযোগ নিজের কম্পিউটারে মেপে দেখা।
- পর্ব ০৪ · Circuit switching আর packet switchingআগের পর্বStore-and-forward আর N·L/R — এই পর্বের ভিত্তি।
- কম্পিউটার নেটওয়ার্ক · কোর্স হোম৬২টি পর্বপুরো কোর্সের রোডম্যাপ — কোন পর্ব কখন।
- ইন্টারনেট কীভাবে কাজ করেসহজ শুরুকম্পিউটার ফান্ডামেন্টালস কোর্সে ইন্টারনেটের প্রাথমিক ছবি।
- অপারেটিং সিস্টেম · I/O সিস্টেমপাশের ট্র্যাকNetwork card থেকে kernel পর্যন্ত — packet কম্পিউটারের ভেতরে কীভাবে চলে।