সরাসরি পর্বে যান
পর্ব ০৪ · ৬২-এর মধ্যে · মডিউল ১

Circuit switching আর packet switching — ডেটা কীভাবে যায়

Circuit Switching vs Packet Switching — Store-and-Forward, Statistical Multiplexing, Datagrams and Virtual Circuits

Taught in Bangla, this lesson compares circuit switching with message and packet switching, shows how FDM and TDM share a circuit, works out store-and-forward delay and the best packet size between pipelining and header cost, uses statistical multiplexing numericals to show why packet switching serves more users, contrasts datagram networks with virtual circuits, and closes with queues, packet loss and a full comparison table.

এই পর্বে যা শিখবেন

  • Circuit switching-এর তিন ধাপ আর FDM ও TDM দিয়ে একটি তার ভাগ করার নিয়ম — সাথে পূর্ণ সমাধান করা অঙ্ক
  • Message switching থেকে packet switching-এ আসার ইতিহাস আর কারণ
  • Store-and-forward delay-এর সূত্র প্রমাণসহ, আর packet ছোট করলে কেন সময় কমে (আবার বেশি ছোট করলে কেন বাড়ে)
  • Binomial সম্ভাবনা দিয়ে statistical multiplexing-এর ক্লাসিক “১০ জন বনাম ৩৫ জন” হিসাব
  • Datagram বনাম virtual circuit, আর দুই পদ্ধতির সুবিধা-অসুবিধার পূর্ণ তুলনা

১ · একটি প্রশ্ন: ডেটা যাবে কোন পথে, কীভাবে?

পর্ব ০২-এ দেখেছেন, ইন্টারনেট আসলে অসংখ্য link আর router-এর জাল। ঢাকা থেকে আপনার পাঠানো একটি ছবি চট্টগ্রামের বন্ধুর ফোনে যেতে হয়তো দশ-বারোটি router পার হয়। প্রশ্ন হলো — এই পথটা কে ঠিক করে, আর পথের link-গুলো একসাথে হাজার হাজার মানুষ কীভাবে ব্যবহার করে?

নেটওয়ার্কের ভাষায় এই কাজটির নাম switching — এক link থেকে আসা ডেটাকে ঠিক পরের link-এ পাঠিয়ে দেওয়া। এর দুটি মৌলিক দর্শন আছে। পুরো পর্বটা এই দুইয়ের তুলনা।

ঢাকা থেকে রাজশাহী যাবেন। প্রথম উপায়: একটি মাইক্রোবাস পুরো দিনের জন্য ভাড়া করলেন। গাড়িটি শুধু আপনার — পথে আপনি চা খেতে নামলেও গাড়ি দাঁড়িয়ে থাকবে, আর কেউ উঠতে পারবে না। জায়গা নিশ্চিত, কিন্তু খালি সিটের টাকাও দিচ্ছেন। এটি circuit switching. দ্বিতীয় উপায়: পাবলিক বাসে উঠলেন। সিট সবাই ভাগ করে নেয়, ভাড়া কম, বাস কখনো খালি যায় না। কিন্তু ঈদের আগে কাউন্টারে লম্বা লাইন, এমনকি টিকিট না-ও পেতে পারেন। এটি packet switching.

ডেটা পাঠানোর তিনটি পদ্ধতি

Three ways to move data through a network

  1. Circuitsetup → data → teardownপথ আগে বুকিং
  2. Messageপুরো বার্তা জমা → পাঠানোটেলিগ্রাফ যুগ
  3. Packetছোট টুকরো, ঠিকানাসহআজকের ইন্টারনেট
ছবি ৪.১ — বাঁ থেকে ডানে: সম্পদ আগে সংরক্ষণ করা থেকে প্রয়োজনমতো ভাগ করে নেওয়ার দিকে যাত্রা।
মূল ধারণা

যেকোনো নেটওয়ার্কের সম্পদ — link-এর bandwidth, router-এর মেমরি — সীমিত। Circuit switching সম্পদ আগেই সংরক্ষণ করে (reservation), তাই নিশ্চয়তা দেয় কিন্তু অপচয় করে। Packet switching সম্পদ চাহিদামতো দেয় (on demand), তাই দক্ষ কিন্তু নিশ্চয়তা দেয় না — ভিড়ে অপেক্ষা আর হারানোর ঝুঁকি থাকে।

২ · Circuit switching — টেলিফোনের পথ

Circuit switching বুঝতে পুরোনো ল্যান্ডফোনের কথা ভাবুন। ১৮৭০-এর দশকে টেলিফোন আবিষ্কারের পর প্রথম দিকের এক্সচেঞ্জে একজন অপারেটর বসতেন একটি বড় বোর্ডের সামনে। আপনি ফোন তুললে তিনি জিজ্ঞেস করতেন কাকে চান, তারপর একটি তার (cord) টেনে আপনার লাইন আর প্রাপকের লাইন জুড়ে দিতেন। কথা শেষ হলে তার খুলে ফেলতেন। পরে স্বয়ংক্রিয় এক্সচেঞ্জ এই কাজ যন্ত্র দিয়ে করতে শুরু করে — ১৮৯০-এর দশকে Almon Strowger-এর স্বয়ংক্রিয় switch এর প্রথম দিকের সফল উদাহরণ হিসেবে পরিচিত।

পুরো বিশ্বের এই টেলিফোন ব্যবস্থাকে বলা হয় PSTN (Public Switched Telephone Network). বাংলাদেশে একসময় T&T-র (এখনকার BTCL) ল্যান্ডফোন এই ধরনের নেটওয়ার্কের ওপর চলত। এর মূল নিয়ম তিনটি ধাপে:

  1. Setup (সংযোগ স্থাপন): নম্বর ডায়াল করলে একটি সংকেত-বার্তা (signalling) পথের প্রতিটি switch-এ যায়। প্রতিটি switch পরের link-এ আপনার জন্য একটি অংশ — একটি “চ্যানেল” — সংরক্ষণ করে।
  2. Transfer (ডেটা পাঠানো): সংযোগ তৈরি হলে কথা (বা ডেটা) একটি স্থির হারে বয়ে চলে। প্রতিটি switch আগে থেকেই জানে আপনার চ্যানেলের বিট কোন দিকে যাবে — নতুন করে কিছু ভাবতে হয় না।
  3. Teardown (সংযোগ ছেড়ে দেওয়া): ফোন রাখলে আরেকটি বার্তা গিয়ে সব switch-কে জানায় যে চ্যানেলগুলো এখন মুক্ত।

নিচের ডায়াগ্রামে একটি ফাইল পাঠানোর circuit দেখুন। পথে দুটি switch (S1, S2), তাই link তিনটি। প্রতিটি link-কে ২৪টি ভাগে (slot) ভাগ করা — এর মানে পরের অংশে বুঝবেন।

1A  -- SETUP(dest=B) --> S12S1 reserves slot 9 on S1-S2, forwards SETUP3S2 reserves slot 2 on S2-B,  B says ACCEPT4CONNECT travels back B -> S2 -> S1 -> A5DATA: 640000 bits at 64 kbps (slot only)6A  -- RELEASE --> all slots freed
পথের অবস্থা
ধাপ
সময়
A–S1 link
S1–S2 link
S2–B link
S1-এর টেবিল
  1. Setup শুরু। A একটি SETUP বার্তা পাঠায় — “B-র সাথে সংযোগ চাই।” A আর S1-এর মাঝের link-এ A-র জন্য slot 5 ঠিক হয়। খেয়াল করুন, এখনো একটি বিটও আসল ডেটা যায়নি।
  2. S1 পরের link বুকিং করে। S1 নিজের টেবিলে লিখে রাখে: “ভেতরে slot 5-এ যা আসবে, বাইরে S1–S2 link-এর slot 9-এ পাঠাব।” তারপর SETUP এগিয়ে দেয়। প্রতিটি link-এ slot নম্বর আলাদা হতে পারে — switch শুধু ম্যাপটা মনে রাখে।
  3. S2 শেষ link বুকিং করে, B রাজি। S2–B link-এ slot 2 সংরক্ষিত। B সংযোগ গ্রহণ করে। পুরো পথে এখন একটি “ভার্চুয়াল তার” তৈরি, যা শুধু A আর B-র।
  4. CONNECT ফিরে আসে — setup শেষ। A জানল পথ প্রস্তুত। ধরুন পুরো setup-এ সময় লেগেছে ০.৫ সেকেন্ড। টেলিফোনে এটাই নম্বর ডায়াল করার পর রিং বাজার আগের অপেক্ষা।
  5. Transfer. এখন ৬,৪০,০০০ বিটের ফাইল স্থির ৬৪ kbps হারে বয়ে যায় — সময় ১০ সেকেন্ড। কোনো switch-এ ডেটা জমা থাকে না, সারিও নেই। কিন্তু A কিছুক্ষণ চুপ থাকলেও slot 5, 9, 2 খালি পড়ে থাকবে — অন্য কেউ সেগুলো ব্যবহার করতে পারবে না।
  6. Teardown. A একটি RELEASE পাঠায়, প্রতিটি switch টেবিল থেকে লাইন মুছে slot মুক্ত করে। মোট সময় ০.৫ + ১০ = ১০.৫ সেকেন্ড. এখন অন্য কেউ এই slot পেতে পারে।

Circuit switching-এর সবচেয়ে বড় গুণ হলো নিশ্চয়তা: একবার সংযোগ হলে আপনার হার স্থির, দেরি স্থির, আর ভিড়ের জন্য ডেটা হারানোর ভয় নেই। এজন্যই কণ্ঠস্বরের মতো নিরবচ্ছিন্ন প্রবাহের জন্য এটি প্রায় এক শতাব্দী রাজত্ব করেছে। কিন্তু সবচেয়ে বড় দুর্বলতাও এখানে: নীরবতাও জায়গা দখল করে। ফোনালাপে দুজনের যেকোনো একজন সাধারণত চুপ থাকেন, তবু চ্যানেল পুরোটা সংরক্ষিত।

৩ · FDM আর TDM — একটি তারকে অনেকে ভাগ করা

একটি link-এ অনেকগুলো circuit একসাথে চলে। প্রশ্ন হলো, একটি তারকে টুকরো করা হয় কীভাবে? দুটি প্রধান উপায় — একসাথে নাম multiplexing. (মাধ্যম আর multiplexing-এর পূর্ণ আলোচনা পর্ব ০৮-এ; এখানে শুধু circuit বোঝার জন্য যতটুকু দরকার।)

📻 FDM — frequency ভাগ

FDM-এ link-এর পুরো frequency পরিসরকে কয়েকটি সরু “ব্যান্ডে” ভাগ করা হয়। প্রতিটি circuit সবসময় নিজের ব্যান্ড পায়। FM রেডিওর মতো — ঢাকায় প্রতিটি স্টেশনের নিজস্ব frequency, সবাই একসাথে সম্প্রচার করছে।

পুরোনো টেলিফোন trunk-এ প্রতি কণ্ঠ-চ্যানেল প্রায় ৪ kHz

⏱️ TDM — সময় ভাগ

TDM-এ সময়কে frame-এ, আর প্রতিটি frame-কে কয়েকটি slot-এ ভাগ করা হয়। প্রতিটি circuit প্রতি frame-এ নিজের slot-টুকু পায়, সেই সময় পুরো link-এর হারে পাঠায়। মোড়ের ট্রাফিক পুলিশ যেমন পালা করে একেক রাস্তাকে কয়েক সেকেন্ড ছাড়েন।

ডিজিটাল টেলিফোন: T1 (২৪ চ্যানেল), E1 (৩২ slot)

FDM-এর ছোট অঙ্ক: একটি link-এর ব্যবহারযোগ্য bandwidth ১ MHz, প্রতিটি কণ্ঠ-চ্যানেলে (দুই পাশের সামান্য ফাঁকা guard band-সহ) লাগে ৪ kHz. তাহলে একসাথে চলতে পারে ১,০০০,০০০ ÷ ৪,০০০ = ২৫০টি কথোপকথন।

TDM-এর হিসাব কীভাবে আসে: ডিজিটাল টেলিফোনে কণ্ঠস্বরকে প্রতি সেকেন্ডে ৮,০০০ বার নমুনা নেওয়া হয়, প্রতিটি নমুনা ৮ বিট — অর্থাৎ একটি কণ্ঠ-চ্যানেল = ৮,০০০ × ৮ = ৬৪,০০০ bps = ৬৪ kbps. তাই প্রতি frame-এর দৈর্ঘ্য ১/৮,০০০ সেকেন্ড = ১২৫ μs, আর প্রতিটি slot একবারে ৮ বিট বহন করে। ২৪টি slot থাকলে প্রতি frame-এ ২৪ × ৮ = ১৯২ বিট, প্রতি সেকেন্ডে ১৯২ × ৮,০০০ = ১.৫৩৬ Mbps. উত্তর আমেরিকার T1 লাইনে এর সাথে প্রতি frame-এ ১টি framing বিট যোগ হয়, তাই T1-এর হার ১.৫৪৪ Mbps. বাংলাদেশসহ বেশিরভাগ দেশে প্রচলিত E1-এ ৩২টি slot, হার ২.০৪৮ Mbps.

পূর্ণ সমাধান — TDM circuit-এ ফাইল পাঠানো

প্রশ্ন: Host A থেকে B-তে ৬,৪০,০০০ বিটের একটি ফাইল যাবে circuit-switched নেটওয়ার্কে। পথের প্রতিটি link-এর হার ১.৫৩৬ Mbps, প্রতিটি link TDM-এ ২৪টি slot-এ ভাগ করা। Circuit তৈরি করতে ৫০০ ms লাগে। ফাইল পাঠাতে মোট কত সময়? (propagation উপেক্ষা করুন)

ধাপ ১ — একটি circuit-এর হার: Rcircuit = ১.৫৩৬ Mbps ÷ ২৪ = ৬৪ kbps. আপনি পুরো link পান না, পান ২৪ ভাগের এক ভাগ।

ধাপ ২ — পাঠানোর সময়: ৬,৪০,০০০ ÷ ৬৪,০০০ = ১০ সেকেন্ড.

ধাপ ৩ — মোট: ০.৫ + ১০ = ১০.৫ সেকেন্ড.

লক্ষ করার বিষয়: উত্তরটি link-এর সংখ্যার ওপর নির্ভর করে না। Circuit-এ switch কোনো বিট জমিয়ে রাখে না — একটি slot-এর বিট আসামাত্র পরের link-এর slot-এ চলে যায়। পথে ৩টি link থাকুক বা ১০টি, বিটের প্রবাহ একটাই নল দিয়ে যাচ্ছে (propagation বাদ দিলে)। Packet switching-এ ঠিক এখানেই পার্থক্য আসবে।

পরীক্ষায় সবচেয়ে বেশি ভুল হয় একক নিয়ে। নেটওয়ার্কে k, M, G মানে ১০-এর ঘাত (১ Mbps = ১০৬ bps), আর b মানে bit, B মানে byte (১ byte = ৮ bit). ফাইলের আকার byte-এ দিলে আগে ৮ দিয়ে গুণ করুন। ফাইলের আকার MiB-তে (২২০ byte) দেওয়া থাকলে সেটিও আলাদা করে খেয়াল করুন।

৪ · Message switching থেকে packet switching

Message switching এসেছে টেলিগ্রাফের যুগ থেকে। কোনো circuit বুকিং নেই — পুরো বার্তাটা (একটি টেলিগ্রাম) প্রথম কেন্দ্রে জমা হয়, সেখানে কর্মী ঠিকানা দেখে পরের কেন্দ্রে পাঠান, সেখানেও পুরোটা জমা হয়, এভাবে গন্তব্যে। পুরোনো ডাকঘরের চিঠি-ব্যবস্থাও এমন: চিঠি প্রথমে স্থানীয় ডাকঘরে, তারপর জেলা সদরের বাছাই কেন্দ্রে, তারপর গন্তব্যের ডাকঘরে। একে বলে message switching.

এর সুবিধা: link কখনো অকারণে সংরক্ষিত থাকে না, ভিড় হলে বার্তা অপেক্ষা করে কিন্তু হারায় না। অসুবিধা গুরুতর: প্রতিটি কেন্দ্রে পুরো বার্তা জমা রাখার জায়গা লাগে, আর একটি বিশাল বার্তা link দখল করে রাখলে পেছনের ছোট বার্তাগুলো আটকে যায়। সবচেয়ে বড় সমস্যা — প্রতিটি কেন্দ্রে পুরো বার্তা আসার অপেক্ষা, তাই মোট দেরি অনেক।

১৯৬০-এর দশকে দুজন গবেষক প্রায় স্বাধীনভাবে একই সমাধানে পৌঁছান। যুক্তরাষ্ট্রের RAND Corporation-এ Paul Baran এমন একটি যোগাযোগ-নেটওয়ার্কের নকশা করছিলেন যা অনেক node নষ্ট হলেও চলতে থাকবে; ১৯৬০-এর দশকের প্রথম ভাগে প্রকাশিত তাঁর প্রতিবেদনগুলোতে বার্তাকে ছোট ছোট “message block”-এ ভেঙে বিকেন্দ্রীভূত জালে পাঠানোর প্রস্তাব ছিল। যুক্তরাজ্যের National Physical Laboratory-তে Donald Davies ১৯৬৫ সালের দিকে কম্পিউটারের মধ্যে দক্ষ যোগাযোগের জন্য একই রকম ধারণা দেন, আর ছোট টুকরোর নাম দেন “packet”. এই ধারণা নিয়েই ১৯৬৯ সালে ARPANET-এর প্রথম node-গুলো চালু হয়, যা পরে ইন্টারনেটের পূর্বসূরি হয়। কে ঠিক কতটা আগে বা কতটা প্রভাব রেখেছিলেন, তা নিয়ে ইতিহাসবিদদের মধ্যে কিছু বিতর্ক আছে; Leonard Kleinrock-এর queuing তত্ত্বের কাজকেও অনেকে এর ভিত্তি মনে করেন।

Packet switching-এর মূল কৌশল সরল: একটি বড় বার্তাকে নির্দিষ্ট সর্বোচ্চ আকারের ছোট টুকরোয় ভাঙুন। প্রতিটি টুকরোর সামনে একটি header বসান — যেখানে প্রেরক, প্রাপক আর ক্রমিক নম্বরের মতো তথ্য থাকে, যেমন চিঠির খামে ঠিকানা। তারপর প্রতিটি packet স্বাধীনভাবে ছেড়ে দিন। প্রতিটি router packet পেলে header দেখে ঠিক করে কোন link-এ পাঠাবে (এই সিদ্ধান্তের ভেতরের কাজ — forwarding — পর্ব ১৫-এ)।

Packet switching-এ কোনো setup নেই, কোনো সংরক্ষণ নেই। যে link যখন খালি, তখন যার packet সামনে, সে পাঠায়। একটি link-এ একসাথে বহু ব্যবহারকারীর packet মিশে চলে। দুটি প্রশ্ন তাই উঠে আসে — এতে মোট সময় কত লাগে (অংশ ৫ আর ৬), আর কতজন একসাথে নিরাপদে ভাগ করতে পারে (অংশ ৭)।

৫ · Store-and-forward — প্রতিটি মোড়ে পুরো packet জমা

বেশিরভাগ packet switch আর router store-and-forward নিয়মে চলে: একটি packet-এর সব বিট না আসা পর্যন্ত router সেটিকে পরের link-এ পাঠানো শুরু করে না। কারণ পুরো packet না পেলে সে header-এর সাথে error-check মেলাতে পারে না, আর অনেক নকশায় পুরো packet হাতে না নিয়ে পরের link-এ পাঠানো শুরুও করা যায় না।

একটি link-এ একটি packet: L/R

ধরুন packet-এর আকার L বিট, link-এর হার R bps. প্রেরক প্রথম বিট থেকে শেষ বিট পর্যন্ত link-এ “ঠেলে দিতে” সময় নেয় L/R সেকেন্ড। একে বলে transmission delay. উদাহরণ: ১,০০০ বিটের packet, ১ Mbps link → ১,০০০ ÷ ১০৬ = ১ ms. (বিট তারের ভেতর দিয়ে অন্য প্রান্তে পৌঁছাতে যে সময় নেয় তা propagation delay, আর router-এর সারিতে অপেক্ষা queuing delay — এগুলোর পূর্ণ হিসাব পর্ব ০৫-এ। এখানে শুধু transmission ধরছি।)

N টি link-এ একটি packet: N·L/R

পথে N টি link (অর্থাৎ মাঝে N − 1 টি router). প্রথম link-এ L/R সময় পরে router-এর হাতে পুরো packet. তারপর সে পরের link-এ পাঠাতে আবার L/R. প্রতিটি link-এ একবার করে, তাই

একটি packet, N টি link: d = N · L / R

N টি link-এ P টি packet: (N + P − 1)·L/R — প্রমাণ

এবার একটির বদলে P টি packet, প্রত্যেকটি L বিট, পরপর পাঠানো হচ্ছে। দুটি পর্যবেক্ষণ থেকেই সূত্র আসে:

  1. প্রথম packet একা যাচ্ছে, তার সামনে কেউ নেই, তাই সে B-তে পৌঁছায় N·L/R সময়ে।
  2. প্রেরক প্রতি L/R সময়ে একটি packet ছাড়ে, আর পথের প্রতিটি link-এর হার সমান — তাই কোনো packet-কে আগেরটির জন্য অপেক্ষা করতে হয় না (packet k যখন কোনো router-এ পৌঁছায়, packet k − 1 ঠিক তখনই সেখান থেকে চলে গেছে)। ফলে packet-গুলো L/R ব্যবধান বজায় রেখে মিছিলের মতো চলে, আর পরের প্রতিটি packet আগেরটির ঠিক L/R পরে B-তে পৌঁছায়।

শেষ (P-তম) packet তাই পৌঁছায় N·L/R + (P − 1)·L/R সময়ে:

dP packet = (N + P − 1) · L / R

আরেকভাবে দেখুন: শেষ packet-টি প্রেরক থেকে বেরোতে পারে P·L/R সময়ে (আগের সবাইকে পাঠাতে হবে), তারপর তাকে বাকি N − 1 টি link পার হতে হয়: P·L/R + (N − 1)·L/R — একই ফল। দুই পথে একই উত্তর আসাটা নিজের হিসাব যাচাইয়ের ভালো উপায়।

এবার সবচেয়ে গুরুত্বপূর্ণ তুলনাটি দেখুন। ৩,০০০ বিটের একটি বার্তা, পথে ৩টি link, প্রতিটি ১ Mbps. একবার পুরো বার্তা হিসেবে (message switching), আরেকবার ১,০০০ বিটের ৩টি packet হিসেবে:

1message M = 3000 bits, L/R = 3 ms per link2t=3 ms : M fully stored at S13t=6 ms : M at S2,  t=9 ms : M at B4packets p1 p2 p3 = 1000 bits, L/R = 1 ms5t=1 ms : p1 at S16t=2 ms : p1 at S2, p2 at S17t=3 ms : p1 at B, p2 at S2, p3 at S18t=4 ms : p2 at B, p3 at S29t=5 ms : p3 at B  -> done
কার হাতে কী (ধাপের শেষে)
সময়
A
S1
S2
B পেয়েছে
এই মুহূর্ত থেকে ব্যস্ত link
  1. পুরো বার্তা একটানা। ৩,০০০ বিটের বার্তা M. প্রতিটি link-এ পাঠাতে লাগে ৩,০০০ ÷ ১০৬ = ৩ ms. প্রথমে A–S1 link-এ পাঠানো চলছে।
  2. t = ৩ ms: পুরো M S1-এ জমা। এতক্ষণ S1–S2 আর S2–B link অলস বসে ছিল — S1 পুরো বার্তা না পেয়ে কিছু পাঠাতে পারেনি। এখন S1 পাঠাতে শুরু করে।
  3. t = ৯ ms: B পুরো বার্তা পেল। S2-এ পৌঁছায় t = ৬ ms-এ, B-তে t = ৯ ms-এ। সূত্র: N·L/R = ৩ × ৩ = ৯ ms. পুরো সময় যেকোনো মুহূর্তে মাত্র ১টি link কাজ করেছে।
  4. একই ডেটা, ৩টি packet-এ। এবার M-কে ১,০০০ বিটের p1, p2, p3-তে ভাঙা হলো (হিসাব সহজ রাখতে header ধরছি না)। প্রতিটির L/R = ১ ms.
  5. t = ১ ms: p1 পৌঁছাল S1-এ। মাত্র ১ ms পরেই S1-এর হাতে একটি পূর্ণ packet — সে পাঠানো শুরু করতে পারে। একই সময়ে A পাঠাতে শুরু করে p2.
  6. t = ২ ms: দুটি link একসাথে ব্যস্ত ছিল। p1 পৌঁছাল S2-এ, p2 পৌঁছাল S1-এ। এই এক ms-এ A–S1 আর S1–S2 — দুটি link-ই কাজ করেছে। একেই বলে pipelining, কারখানার assembly line-এর মতো।
  7. t = ৩ ms: তিনটি link-ই একসাথে কাজ করেছে। p1 B-তে পৌঁছাল — ঠিক N·L/R = ৩ × ১ = ৩ ms-এ। p2 এখন S2-এ, p3 S1-এ।
  8. t = ৪ ms: p2 পৌঁছাল। প্রথম packet-এর ঠিক L/R = ১ ms পরে — অংশ ৫-এর প্রমাণের দ্বিতীয় পর্যবেক্ষণ।
  9. t = ৫ ms: সব শেষ। (N + P − 1)·L/R = (৩ + ৩ − ১) × ১ = ৫ ms, অথচ পুরো বার্তা হিসেবে লেগেছিল ৯ ms. ডেটা একই, link একই — শুধু টুকরো করায় link-গুলো একসাথে কাজ করতে পেরেছে।
পূর্ণ সমাধান — বার্তা ভাঙলে কত লাভ

প্রশ্ন: ৮ × ১০৬ বিটের একটি বার্তা A থেকে B-তে যাবে, পথে ২টি switch (৩টি link), প্রতিটি link ২ Mbps. propagation আর queuing উপেক্ষা করুন। (ক) Message switching-এ কত সময়? (খ) বার্তাটি ১০,০০০ বিটের packet-এ ভাঙলে কত সময়?

(ক) প্রতিটি link-এ ৮ × ১০৬ ÷ (২ × ১০৬) = ৪ সেকেন্ড। ৩টি link → ৩ × ৪ = ১২ সেকেন্ড.

(খ) packet-এর সংখ্যা P = ৮ × ১০৬ ÷ ১০৪ = ৮০০. প্রতিটির L/R = ১০৪ ÷ (২ × ১০৬) = ৫ ms. প্রথম packet B-তে পৌঁছায় ৩ × ৫ = ১৫ ms-এ; মোট (৩ + ৮০০ − ১) × ৫ ms = ৮০২ × ৫ ms = ৪.০১ সেকেন্ড. প্রায় তিন গুণ দ্রুত।

বাড়তি সুবিধা: কোনো একটি বিট ভুল হলে message switching-এ পুরো ৮ মেগাবিট আবার পাঠাতে হয়, packet-এ শুধু একটি ১০,০০০ বিটের packet. আর ছোট packet পেছনের অন্য ব্যবহারকারীকে বেশিক্ষণ আটকে রাখে না।

নিচের calculator-এ circuit আর packet দুই পদ্ধতিতেই অংশ ৩-এর সেই ৬,৪০,০০০ বিটের ফাইলটি পাঠানো হয়েছে, আর packet-এর সংখ্যা বদলে দেখা হয়েছে মোট সময় কীভাবে বদলায়। চালিয়ে দেখুন, তারপর F, N বা slots বদলে নিজের অঙ্ক যাচাই করুন:

// Circuit vs packet switching: time to move one file across N links.
// Propagation and queuing are ignored; every link has the same rate R.
const F = 640000;                // file size, bits
const R = 1.536e6;               // link rate, bits/s
const N = 3;                     // links on the path (A - S1 - S2 - B)
const slots = 24, setup = 0.5;   // TDM: 24 users share each link, 0.5 s to set up

const circuitTDM = setup + F / (R / slots);   // our circuit gets one slot = R/24
const circuitFull = setup + F / R;            // imagine the whole link were ours
console.log("circuit, 1 TDM slot (" + R / slots / 1e3 + " kbps): " + circuitTDM.toFixed(3) + " s");
console.log("circuit, full link (" + R / 1e6 + " Mbps): " + circuitFull.toFixed(3) + " s");

const packet = P => (N + P - 1) * (F / P) / R;   // P equal packets, no headers
console.log("packets P | size L (bits) | store-and-forward (s)");
for (const P of [1, 2, 4, 10, 100, 1000]) {
  console.log(String(P).padStart(9) + " | " + String(F / P).padStart(13) +
    " | " + packet(P).toFixed(4).padStart(21));
}

আউটপুট (প্রতিবার একই):

circuit, 1 TDM slot (64 kbps): 10.500 s
circuit, full link (1.536 Mbps): 0.917 s
packets P | size L (bits) | store-and-forward (s)
        1 |        640000 |                1.2500
        2 |        320000 |                0.8333
        4 |        160000 |                0.6250
       10 |         64000 |                0.5000
      100 |          6400 |                0.4250
     1000 |           640 |                0.4175

প্রথম লাইন অংশ ৩-এর হাতের উত্তর — ১০.৫ সেকেন্ড. দ্বিতীয় লাইন দেখায়, পুরো link নিজের হলে circuit-ও দ্রুত (০.৯১৭ s) — কিন্তু তখন বাকি ২৩ জন জায়গা পেতেন না। P = 1 মানে পুরো ফাইল একটি “packet”: ৩ × ০.৪১৬৭ = ১.২৫ s, কারণ store-and-forward-এ প্রতিটি link-এ পুরো ফাইল আলাদা করে পাঠাতে হয়। P বাড়ার সাথে সময় নেমে আসে ০.৪১৭৫ s-এ — প্রায় একটি link-এ ফাইল পাঠানোর সময় F/R = ০.৪১৬৭ s-এর কাছে। কারণ (N + P − 1)·(F/P)/R = F/R + (N − 1)·L/R, আর L ছোট হলে দ্বিতীয় অংশ প্রায় শূন্য। সতর্কতা: এখানে packet switching ধরে নিয়েছে পুরো link খালি, অন্য কেউ নেই। বাস্তবে অন্যদের packet-এর সাথে সারিতে দাঁড়াতে হবে — ঠিক যে কারণে অংশ ৭ আর পর্ব ০৫ দরকার।

সূত্রটি “যদি সব link-এর হার সমান হয়” — এই শর্তে প্রমাণিত। Link-এর হার আলাদা হলে প্রতিটি packet-কে প্রতিটি link-এ “আগে থেকে পৌঁছেছে কি না” আর “link খালি কি না” — দুটোই দেখতে হয়। নিচের C প্রোগ্রামটি ঠিক এই নিয়ম ধাপে ধাপে চালায়, তাই অসমান হারেও কাজ করবে (চাইলে পরে নিজে বদলে দেখতে পারেন)। আপাতত উপরের stepper-এর সংখ্যাই নেওয়া হয়েছে:

#include <stdio.h>

/* Store-and-forward: a link may start sending packet i only when
   (a) packet i has fully arrived over the previous link, and
   (b) the link has finished sending packet i-1.                   */
#define P 3                 /* packets          */
#define N 3                 /* links on the path */

int main(void) {
    const long L = 1000, R = 1000000;          /* bits, bits per second */
    const long tx = L * 1000000 / R;           /* L/R in microseconds   */
    long done[P + 1][N + 1] = {{0}};           /* done[i][j]: packet i fully sent on link j */

    printf("L/R = %ld us per packet per link\n", tx);
    for (int i = 1; i <= P; i++) {
        for (int j = 1; j <= N; j++) {
            long ready = done[i][j - 1];       /* arrived from previous link */
            long free_at = done[i - 1][j];     /* link busy until then       */
            long start = ready > free_at ? ready : free_at;
            done[i][j] = start + tx;
            printf("packet %d link %d: %4ld -> %4ld us\n", i, j, start, done[i][j]);
        }
    }
    printf("last bit reaches B at %ld us; (N+P-1)*L/R = %ld us\n",
           done[P][N], (N + P - 1) * tx);
    printf("one %ld-bit message instead: N*(P*L)/R = %ld us\n", P * L, N * P * tx);
    return 0;
}

আউটপুট:

L/R = 1000 us per packet per link
packet 1 link 1:    0 -> 1000 us
packet 1 link 2: 1000 -> 2000 us
packet 1 link 3: 2000 -> 3000 us
packet 2 link 1: 1000 -> 2000 us
packet 2 link 2: 2000 -> 3000 us
packet 2 link 3: 3000 -> 4000 us
packet 3 link 1: 2000 -> 3000 us
packet 3 link 2: 3000 -> 4000 us
packet 3 link 3: 4000 -> 5000 us
last bit reaches B at 5000 us; (N+P-1)*L/R = 5000 us
one 3000-bit message instead: N*(P*L)/R = 9000 us

প্রতিটি লাইন একটি packet একটি link-এ কখন শুরু আর কখন শেষ হলো। packet 1 শুরু করে ০, ১০০০ আর ২০০০ μs-এ — প্রতিটি router আগের link থেকে পুরো packet পাওয়ামাত্র। packet 2 link 1 শুরু ১০০০ μs-এ, কারণ তার আগে link 1 ব্যস্ত ছিল packet 1 নিয়ে। শেষ লাইনের আগের লাইন সিমুলেশন আর সূত্রকে মেলায়: ৫০০০ μs = (৩ + ৩ − ১) × ১০০০. শেষ লাইন একই ৩০০০ বিট এক বার্তায় পাঠালে কী হতো — ৯০০০ μs. done[i][j] = max(…) + tx লাইনটিই store-and-forward-এর পুরো সংজ্ঞা।

৬ · Packet কত বড় হবে — pipelining বনাম header-এর খরচ

অংশ ৫ পড়ে মনে হতে পারে, packet যত ছোট তত ভালো। কিন্তু একটি জিনিস আমরা এতক্ষণ বাদ রেখেছি: প্রতিটি packet-এর সাথে একটি header যায়। IPv4 আর TCP-র সাধারণ header মিলিয়ে প্রায় ৪০ byte (৩২০ বিট) — ডেটা ১ byte হোক বা ১,৪৬০ byte. খামের ওপর ঠিকানা লেখার খরচ চিঠি ছোট হলেও একই।

ধরুন মোট ডেটা F বিট, প্রতিটি packet-এ ডেটা (payload) p বিট আর header h বিট। তাহলে packet-এর সংখ্যা P = F/p, প্রতিটি packet-এর আকার p + h, আর মোট সময়

T(p) = (N + F/p − 1) · (p + h) / R

সর্বোত্তম p বের করা: R দিয়ে গুণ করে বিস্তার করি: T·R = (N − 1)(p + h) + F + F·h/p. p-এর সাপেক্ষে অবকলন করলে (N − 1) − F·h/p² = 0, অর্থাৎ

p* = √( F · h / (N − 1) )

দ্বিতীয় অবকলন 2F·h/p³ > 0, তাই এটি সত্যিই সর্বনিম্ন বিন্দু। সূত্রের অর্থ সহজ ভাষায়: পথ লম্বা হলে (N বড়) ছোট packet ভালো, কারণ pipelining-এর লাভ বেশি; header বড় হলে বড় packet ভালো, কারণ ছোট packet-এ খরচের ভাগ বেশি। N = 1 হলে (একটিমাত্র link) pipelining-এর কোনো লাভই নেই — তখন একটি বড় packet-ই সেরা।

// Smaller packets pipeline better, but every packet carries a header.
// T = (N + P - 1) * (p + h) / R, where p = payload per packet, P = F / p.
const F = 1e6;      // data to send, bits
const h = 320;      // header per packet, bits (40 bytes)
const N = 5;        // links on the path
const R = 1e6;      // every link: 1 Mbps

console.log("payload p | packets P | total sent (bits) | time T (ms)");
for (const p of [100, 500, 1000, 4000, 8000, 10000, 50000, 1e6]) {
  const P = F / p;
  const T = (N + P - 1) * (p + h) / R;
  console.log(String(p).padStart(9) + " | " + String(P).padStart(9) + " | " +
    String(F + P * h).padStart(17) + " | " + (T * 1e3).toFixed(1).padStart(10));
}
const best = Math.sqrt(F * h / (N - 1));  // from dT/dp = 0
console.log("best payload p* = sqrt(F*h/(N-1)) = " + best.toFixed(0) + " bits");

আউটপুট:

payload p | packets P | total sent (bits) | time T (ms)
      100 |     10000 |           4200000 |     4201.7
      500 |      2000 |           1640000 |     1643.3
     1000 |      1000 |           1320000 |     1325.3
     4000 |       250 |           1080000 |     1097.3
     8000 |       125 |           1040000 |     1073.3
    10000 |       100 |           1032000 |     1073.3
    50000 |        20 |           1006400 |     1207.7
  1000000 |         1 |           1000320 |     5001.6
best payload p* = sqrt(F*h/(N-1)) = 8944 bits

দুই প্রান্তেই সময় খারাপ। p = ১০০ বিটে প্রতিটি packet-এর ৭৬% header — মোট ৪২ লাখ বিট পাঠাতে হচ্ছে মাত্র ১০ লাখ বিট ডেটার জন্য, সময় ৪.২ সেকেন্ড। p = ১০ লাখ বিটে (একটিমাত্র packet) কোনো pipelining নেই: ৫ × ১.০০০৩২ ≈ ৫.০ সেকেন্ড। মাঝখানে ৮,০০০ আর ১০,০০০ বিটে সময় প্রায় ১.০৭৩ সেকেন্ড (দুটি ঘটনাক্রমে সমান: ১২৯ × ৮৩২০ = ১০৪ × ১০৩২০ = ১০,৭৩,২৮০), আর সূত্রের p* ≈ ৮,৯৪৪ বিট ঠিক এই দুইয়ের মাঝে। বাস্তবে packet-এর আকার শুধু এই হিসাবে ঠিক হয় না — link-এর সর্বোচ্চ সীমা (Ethernet-এ সাধারণত ১,৫০০ byte payload, যাকে MTU বলে), error-এর হার আর router-এর প্রতি-packet প্রক্রিয়াকরণ খরচও গুরুত্বপূর্ণ।

৭ · Statistical multiplexing — ১০ জন, না ৩৫ জন?

এবার পরীক্ষার সবচেয়ে ক্লাসিক প্রশ্ন। একটি অফিসের ইন্টারনেট link ১ Mbps. প্রত্যেক কর্মী যখন সক্রিয়, তখন তাঁর লাগে ১০০ kbps; কিন্তু মানুষ সারাক্ষণ ডাউনলোড করেন না — পড়েন, ভাবেন, চা খান। ধরুন প্রত্যেকে স্বাধীনভাবে মাত্র ১০% সময় সক্রিয় থাকেন। এমন চলাকে বলে bursty traffic — হঠাৎ অনেক, তারপর দীর্ঘ নীরবতা।

Circuit switching-এ: প্রত্যেককে ১০০ kbps সংরক্ষণ করে দিতে হবে, কারণ কে কখন সক্রিয় হবেন জানা নেই। ১,০০০ ÷ ১০০ = মাত্র ১০ জন. আর গড়ে এই ১০ জনের মাত্র ১ জন সক্রিয় — link-এর ৯০% সময় খালি।

Packet switching-এ: সংরক্ষণ নেই, যে সক্রিয় সে-ই link ব্যবহার করে। ৩৫ জনকে যুক্ত করলে সমস্যা হবে শুধু তখন, যখন একসাথে ১০ জনের বেশি সক্রিয় — তখন চাহিদা ১ Mbps ছাড়িয়ে যায়, packet সারিতে জমে। সেই সম্ভাবনা কত? একে সংখ্যা দিয়ে মাপে binomial distribution.

Binomial হিসাব

N জনের প্রত্যেকে স্বাধীনভাবে p সম্ভাবনায় সক্রিয়। ঠিক k জন সক্রিয় হওয়ার সম্ভাবনা:

P(X = k) = C(N, k) · pk · (1 − p)N − k

C(N, k) হলো N জনের মধ্যে কোন k জন সক্রিয় তা বাছার উপায়ের সংখ্যা; pk — সেই k জনই সক্রিয়; (1 − p)N−k — বাকিরা নিষ্ক্রিয়। আমাদের দরকার P(X > ১০) = Σk=11..35 P(X = k). হাতে ২৫টি পদ যোগ করা কষ্টকর, তবে পরিপূরক নিয়মে সহজ: P(X > ১০) = ১ − Σk=0..10 P(X = k). গড় সক্রিয় সংখ্যা N·p = ৩.৫ — অর্থাৎ ১০ ছাড়ানো গড়ের প্রায় তিন গুণ, তাই সম্ভাবনা খুব ছোট হওয়ারই কথা। নিচের ডায়াগ্রামে কয়েক সেকেন্ডের একটি নমুনা দেখুন, তারপর script দিয়ে আসল সংখ্যা।

1link C = 1000 kbps, each active user 100 kbps2second 1:  3 active  ->  300 kbit3second 2:  5 active  ->  500 kbit4second 3:  2 active  ->  200 kbit5second 4: 12 active  -> 1200 kbit  (over!)6second 5:  4 active  ->  400 kbit + queue75 seconds: 26 user-seconds of demand
এই সেকেন্ডের শেষে
চাহিদা (kbit)
link পাঠাল (kbit)
buffer-এ সারি (kbit)
link ব্যবহার
circuit হলে
  1. শুরু। ৩৫ জন একই ১ Mbps link ভাগ করছেন, কারও জন্য কিছু সংরক্ষিত নেই। Circuit switching হলে এখানে মাত্র ১০ জন যুক্ত হতে পারতেন — বাকি ২৫ জনকে ফিরিয়ে দিতে হতো।
  2. প্রথম সেকেন্ড: ৩ জন সক্রিয়। চাহিদা ৩০০ kbit, link সহজেই পাঠায়। ৩২ জন চুপ — কিন্তু তাঁরা কোনো জায়গা দখল করে নেই।
  3. দ্বিতীয় সেকেন্ড: ৫ জন। ৫০০ kbit, link-এর অর্ধেক ব্যবহার। এখনো কোনো সারি নেই।
  4. তৃতীয় সেকেন্ড: ২ জন। মাত্র ২০০ kbit. সক্রিয় সংখ্যা ওঠানামা করছে, গড় ৩.৫-এর আশপাশে।
  5. চতুর্থ সেকেন্ড: ১২ জন — বিরল ঘটনা! চাহিদা ১,২০০ kbit, link পাঠাতে পারে ১,০০০. বাড়তি ২০০ kbit router-এর buffer-এ সারিতে দাঁড়ায়। এদের দেরি হবে; buffer ভরে গেলে কিছু packet ফেলেও দিতে হতে পারে। ঠিক এই ঝুঁকিটাই packet switching-এর দাম।
  6. পঞ্চম সেকেন্ড: ৪ জন। নতুন চাহিদা ৪০০ আর জমে থাকা ২০০ — মোট ৬০০ kbit, link-এর সীমার মধ্যে। সারি খালি হয়ে গেল। ভিড় ক্ষণস্থায়ী হলে buffer সেটা শুষে নেয়।
  7. পাঁচ সেকেন্ডের হিসাব। মোট ২,৬০০ kbit পাঠানো হয়েছে ৫,০০০ kbit ক্ষমতার মধ্যে — ব্যবহার ৫২%. Circuit switching-এ ১০ জনের সাথে গড় ব্যবহার হতো মাত্র ~১০%. একই link, পাঁচ গুণের বেশি কাজ — এটাই statistical multiplexing.
// Statistical multiplexing: a 1 Mbps link; each user sends at 100 kbps
// while active, and is active (independently) 10% of the time.
const C = 1e6, r = 100e3, p = 0.1;
const cap = C / r;                        // at most 10 can be active together
function choose(n, k) {                   // n C k without huge factorials
  let c = 1;
  for (let i = 1; i <= k; i++) c = c * (n - k + i) / i;
  return c;
}
function pOver(n) {                       // P(more than cap of n users active)
  let s = 0;
  for (let k = cap + 1; k <= n; k++) s += choose(n, k) * p ** k * (1 - p) ** (n - k);
  return s;
}
console.log("circuit switching: exactly " + cap + " users (" + r / 1e3 + " kbps reserved each)");
console.log("users N | avg active | P(more than " + cap + " active)");
for (const n of [10, 20, 30, 35, 40, 50, 60]) {
  const v = pOver(n);
  console.log(String(n).padStart(7) + " | " + (n * p).toFixed(1).padStart(10) +
    " | " + (v === 0 ? "0" : v.toExponential(2)).padStart(10));
}
let n = cap;
while (pOver(n + 1) < 0.001) n++;        // largest N keeping overload under 0.1%
console.log("largest N with P(overload) < 0.001: " + n);

আউটপুট:

circuit switching: exactly 10 users (100 kbps reserved each)
users N | avg active | P(more than 10 active)
     10 |        1.0 |          0
     20 |        2.0 |    7.09e-7
     30 |        3.0 |    8.91e-5
     35 |        3.5 |    4.24e-4
     40 |        4.0 |    1.47e-3
     50 |        5.0 |    9.35e-3
     60 |        6.0 |    3.42e-2
largest N with P(overload) < 0.001: 38

৩৫ জনের সারিতে সম্ভাবনা 4.24e-4 ≈ ০.০০০৪ — অর্থাৎ গড়ে প্রতি ২,৩৫০ মুহূর্তে মাত্র একবার ১০ জনের বেশি একসাথে সক্রিয় হন, আর তখনও buffer কিছুক্ষণ সামলে নেয়। ১০ জনে সম্ভাবনা ঠিক ০ — ১০ জনের বেশি সক্রিয় হওয়া অসম্ভব, circuit-এর সাথে এখানে পার্থক্য নেই। ৪০ জনে এক হাজারে দেড় বারের মতো, ৬০ জনে প্রায় ৩.৪%. শেষ লাইন: ঝুঁকি ০.১%-এর নিচে রাখতে চাইলে ৩৮ জন পর্যন্ত যুক্ত করা যায়। সংখ্যাগুলো স্বাধীনতার অনুমানের ওপর দাঁড়িয়ে — সবাই একই সময়ে (যেমন খেলার লাইভ স্ট্রিমে) সক্রিয় হলে হিসাব ভেঙে পড়ে।

উল্টো দিকের ঘটনা: Statistical multiplexing সব ক্ষেত্রে জেতে না। যদি ১০ জনের প্রত্যেকে সারাক্ষণ ১০০ kbps পাঠান (p = ১, যেমন একটানা ভিডিও কল), তাহলে packet switching-এ ১০ জনের বেশি রাখলেই সারি অবিরাম বাড়বে। তখন circuit-এর মতো সংরক্ষণই যুক্তিসঙ্গত। Packet switching-এর সুবিধা আসে চাহিদার ওঠানামা থেকে। আরেকটি উদাহরণ: একজন ব্যবহারকারী হঠাৎ ১ Mbit-এর ফাইল পাঠাতে চান, বাকিরা চুপ। TDM circuit-এ (১০ ভাগের ১ ভাগ পান) লাগবে ১০ সেকেন্ড; packet switching-এ পুরো link তাঁর, লাগবে ১ সেকেন্ড।

৮ · Datagram আর virtual circuit — packet-এর দুই ঘরানা

Packet switching-এর ভেতরেও দুটি ভিন্ন নকশা আছে। পার্থক্য একটি প্রশ্নে: router কি প্রতিটি “সংযোগ” মনে রাখে?

✉️ Datagram নেটওয়ার্ক

প্রতিটি packet — একটি datagram — পুরো গন্তব্য ঠিকানা নিয়ে চলে, ডাকঘরের চিঠির মতো। Router কোনো সংযোগের কথা মনে রাখে না; প্রতিটি packet-এর জন্য আলাদা করে ঠিকানা দেখে সিদ্ধান্ত নেয়। একই বার্তার দুটি packet ভিন্ন পথে যেতে পারে, আগে-পরে পৌঁছাতে পারে।

উদাহরণ: IP — পুরো ইন্টারনেট

🛤️ Virtual circuit নেটওয়ার্ক

Virtual circuit-এ ডেটা পাঠানোর আগে setup হয়, পথের প্রতিটি router একটি টেবিল-লাইন রাখে। Packet-এ পুরো ঠিকানা নয়, থাকে একটি ছোট VC নম্বর বা label. সব packet একই পথে, ক্রম মেনে যায়। তবে circuit switching-এর মতো bandwidth সংরক্ষণ বাধ্যতামূলক নয় — link তবুও ভাগ হয়।

উদাহরণ: X.25, Frame Relay, ATM, MPLS

Virtual circuit-এর মূল কৌশল হলো label swapping. প্রতিটি link-এ VC নম্বর আলাদা হতে পারে, কারণ সারা নেটওয়ার্কে একটি অনন্য নম্বর খোঁজা কঠিন; তাই প্রতিটি router packet-এর নম্বর বদলে পরের link-এর নম্বর বসায়। দেখুন:

1A --SETUP(to B)--> R1 --> R2 --> B2R1 adds: in if1 VC 12 -> out if2 VC 223R2 adds: in if1 VC 22 -> out if3 VC 324A sends [VC 12 | data]5R1: lookup (if1, 12) -> send [VC 22 | data] on if26R2: lookup (if1, 22) -> send [VC 32 | data] on if37TEARDOWN: R1, R2 delete their entries
Router-এর VC টেবিল
R1
R2
packet-এর label
পর্যায়
  1. Setup বার্তা রওনা। A জানায় B-র সাথে একটি virtual circuit চায়। এই setup বার্তা পুরো গন্তব্য ঠিকানা নিয়ে যায় — পথ ঠিক হয় এই সময়েই। এখনো কোনো router-এ টেবিল-লাইন নেই।
  2. R1 টেবিল-লাইন যোগ করে। “interface 1-এ VC 12 নিয়ে যা আসবে, interface 2 দিয়ে VC 22 বসিয়ে পাঠাব।” এই অবস্থা (state) প্রতিটি সংযোগের জন্য আলাদা — হাজার সংযোগ মানে হাজার লাইন।
  3. R2 লাইন যোগ করে, পথ প্রস্তুত। R2: if1/22 → if3/32. B রাজি হলে নিশ্চিতকরণ ফিরে আসে। ATM-এ এই ধাপে চাইলে bandwidth-ও সংরক্ষণ করা যেত।
  4. ডেটা packet: label 12. A packet-এ শুধু ছোট নম্বর 12 লেখে — পুরো ঠিকানা নয়। কুরিয়ার সার্ভিসের ট্র্যাকিং নম্বরের মতো: পার্সেলে ঠিকানা না দেখে শুধু নম্বর দেখেই কাউন্টার জানে কোন ঝুড়িতে যাবে।
  5. R1 label বদলায়: 12 → 22. R1 (interface 1, label 12) দিয়ে টেবিলে একটি সরল খোঁজ করে, label বদলে 22 বসায়, interface 2 দিয়ে পাঠায়। দীর্ঘ ঠিকানার ভেতর “সবচেয়ে মেলে এমন” route খোঁজার চেয়ে এটি সহজ — ১৯৯০-এর দশকে এটাই ছিল virtual circuit-এর বড় যুক্তি।
  6. R2 বদলায়: 22 → 32, B পেল। পরের সব packet ঠিক একই পথে, একই ক্রমে যাবে। এর দাম: R1 বা R2 নষ্ট হলে এই সংযোগ ভেঙে যায়, নতুন করে setup লাগে।
  7. Teardown. সংযোগ শেষ হলে টেবিল-লাইন মুছে ফেলা হয়। Datagram নেটওয়ার্কে এই তিন ধাপ (setup, প্রতি-সংযোগ state, teardown) কোনোটাই নেই — router-এর টেবিলে থাকে শুধু গন্তব্য নেটওয়ার্কের তালিকা, কোনো সংযোগ নয়।

ATM (Asynchronous Transfer Mode) ১৯৯০-এর দশকে টেলিফোন কোম্পানিগুলোর বড় স্বপ্ন ছিল — কণ্ঠ, ভিডিও আর ডেটা সব এক নেটওয়ার্কে, ৫৩ byte-এর স্থির আকারের “cell”-এ (৫ byte header, ৪৮ byte ডেটা), virtual circuit দিয়ে। ইন্টারনেটের IP-র কাছে ATM শেষ পর্যন্ত হেরে যায়, তবে এর ধারণা বেঁচে আছে MPLS-এ। MPLS (স্থাপত্য RFC 3031, ২০০১) ISP-র নেটওয়ার্কের ভেতরে IP packet-এর সামনে একটি ছোট label বসিয়ে virtual circuit-এর মতো পূর্বনির্ধারিত পথে পাঠায় — traffic engineering আর ব্যবসায়িক VPN-এর জন্য। অর্থাৎ বাইরে থেকে ইন্টারনেট datagram, কিন্তু অনেক ISP-র ভেতরে virtual circuit-এর ছায়া রয়ে গেছে।

৯ · সারি, packet loss আর পূর্ণ তুলনা

Packet switching-এর দক্ষতার দাম দুটি: অপেক্ষা আর হারানো. প্রতিটি router-এর প্রতিটি বের হওয়ার link-এর সামনে একটি সারি (output buffer) থাকে। যদি কিছু সময় ধরে packet আসার হার link-এর পাঠানোর হারকে ছাড়ায়, নতুন packet সারিতে দাঁড়ায় — এটাই queuing delay. ঢাকার মোড়ে সবুজ বাতি জ্বললেও যদি চার দিক থেকে একসাথে গাড়ি আসে, লাইন লম্বা হয়। আর buffer সীমিত: সারি পুরো ভরে গেলে নতুন packet ফেলে দেওয়া হয় — একে বলে packet loss. হারানো packet আবার পাঠাবে কি না, তা নির্ভর করে ওপরের স্তরের ওপর (TCP পাঠায় — পর্ব ৩০; UDP নিজে পাঠায় না — পর্ব ২৮)।

সারির দৈর্ঘ্য কীভাবে আসা-যাওয়ার হারের অনুপাতের ওপর নির্ভর করে, delay-এর চার উপাদান (processing, queuing, transmission, propagation) আর throughput-এর পূর্ণ হিসাব আসছে পর্ব ০৫-এ। এখানে শুধু মনে রাখুন: circuit switching-এ দেরি স্থির, packet switching-এ দেরি পরিবর্তনশীল — আর ভিডিও কলে ছবি আটকে যাওয়া বা কণ্ঠ ভেঙে যাওয়ার মূলে এই পরিবর্তনশীলতা।

বৈশিষ্ট্যCircuit switchingPacket switching (datagram)Virtual circuit
শুরুর আগে setupলাগে (setup delay)লাগে নালাগে
Bandwidthনিশ্চিত, সংরক্ষিতনিশ্চয়তা নেই, চাহিদামতো ভাগসাধারণত ভাগ; চাইলে সংরক্ষণ
নীরবতার সময়সম্পদ নষ্ট হয়অন্যরা ব্যবহার করেঅন্যরা ব্যবহার করে
দেরিস্থির, সারি নেইপরিবর্তনশীল (queuing)পরিবর্তনশীল
ভিড়ে কী হয়নতুন কল ফিরিয়ে দেওয়া (busy tone)দেরি বাড়ে, packet losssetup ফিরিয়ে দেওয়া বা loss
Router/switch-এ stateপ্রতি কলনেই (শুধু routing table)প্রতি সংযোগ
Packet-এর ক্রমপ্রবাহ, ক্রম স্বাভাবিকওলটপালট হতে পারেক্রম বজায় থাকে
একটি node নষ্ট হলেকল কেটে যায়অন্য পথে routingসংযোগ ভাঙে, নতুন setup
Bursty ডেটায় দক্ষতাকমঅনেক বেশিবেশি
উদাহরণPSTN, পুরোনো GSM কণ্ঠIP, ইন্টারনেটX.25, ATM, MPLS

আরও গভীরে: Linux-এ একটি packet router হিসেবে পার হওয়ার সময় network card তাকে DMA দিয়ে মেমরির একটি ring buffer-এ রাখে, kernel (NAPI-র মাধ্যমে) তুলে নিয়ে forwarding table (FIB) দেখে, তারপর বের হওয়ার interface-এর qdisc নামের সারিতে বসায় — অনেক distribution-এ ডিফল্ট fq_codel, যা সারি অকারণে লম্বা হতে দেয় না। সব switch পুরোপুরি store-and-forward নয়: অনেক Ethernet switch “cut-through” পদ্ধতিতে frame-এর গন্তব্য ঠিকানাটুকু পড়েই পাঠানো শুরু করে দেয়, ফলে প্রতি hop-এ পুরো L/R-এর অপেক্ষা থাকে না (তবে ভাঙা frame-ও তখন এগিয়ে যেতে পারে)। আর বড় data center-এ আবার আলোর পথ সরাসরি জুড়ে দেওয়া optical circuit switch ব্যবহারের প্রকাশিত উদাহরণও আছে — circuit-এর ধারণা পুরোপুরি হারায়নি।

পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:

  • Circuit আর packet switching-এর মূল পার্থক্য কী? — Circuit সম্পদ আগেই সংরক্ষণ করে (নিশ্চিত হার, setup লাগে); packet চাহিদামতো ভাগ করে (দক্ষ, কিন্তু queuing ও loss).
  • N টি link-এ P টি packet পাঠানোর সময়? — (N + P − 1)·L/R, propagation আর queuing বাদ দিয়ে; একটি packet-এ N·L/R.
  • ১ Mbps link, ব্যবহারকারী ১০০ kbps, ১০% সক্রিয় — কতজন? — Circuit-এ ১০; packet-এ ৩৫ জনে ১০-এর বেশি সক্রিয় হওয়ার সম্ভাবনা প্রায় ০.০০০৪.
  • Datagram আর virtual circuit-এর পার্থক্য? — Datagram-এ প্রতি packet-এ পূর্ণ ঠিকানা, router-এ সংযোগের state নেই; VC-তে setup, প্রতি সংযোগ টেবিল আর label swapping.
  • ইন্টারনেট কি circuit-switched? — না, IP datagram-ভিত্তিক packet switching; তবে ISP-র ভেতরে MPLS virtual circuit-এর মতো পথ বানাতে পারে।

১০ · AI-এর যুগে switching-এর হিসাব

এই পর্বের অঙ্কগুলো দেখতে সহজ, কিন্তু AI চ্যাটবট এখানে প্রায়ই আত্মবিশ্বাসের সাথে ভুল করে। কারণ সূত্রগুলোর ছোট ছোট শর্ত — header আছে কি না, propagation ধরা হবে কি না, bit না byte — প্রশ্নের ভাষায় লুকানো থাকে, আর মডেল প্রায়ই সবচেয়ে “চেনা” সূত্রটি বসিয়ে দেয়।

AI-এর সাধারণ ভুলকীভাবে ধরবেন
P টি packet-এর সময় N·P·L/R লেখা (pipelining ভুলে যাওয়া)P = ১ বসিয়ে দেখুন, তারপর ছোট উদাহরণ হাতে আঁকুন — stepper-এর মতো
byte আর bit গুলিয়ে ফেলা, বা MB-কে ২২০ ধরাপ্রতিটি সংখ্যার একক লিখে রাখুন; ৮-এর গুণটি খুঁজুন
Circuit-এর সময়ে link-সংখ্যা দিয়ে গুণ করামনে রাখুন, circuit-এ store-and-forward নেই
Binomial-এর বদলে ভুল আসন্ন মান, বা “≥ ১০” আর “> ১০” গুলিয়ে ফেলাএই পর্বের script-এ নিজে চালিয়ে মিলিয়ে নিন
“ইন্টারনেট virtual circuit ব্যবহার করে” বা TCP-কে circuit বলাTCP সংযোগ শুধু দুই প্রান্তের state; মাঝের IP router কিছুই মনে রাখে না
অস্তিত্বহীন RFC নম্বর বা ভুল সাল উল্লেখrfc-editor.org-এ নম্বরটি খুলে শিরোনাম মিলিয়ে নিন

AI-কে অঙ্ক করতে দিলে শুধু উত্তর নয়, অনুমান আর ধাপ চেয়ে নিন — তাহলে ভুলটা কোথায় তা আপনি নিজেই ধরতে পারবেন:

একটি নেটওয়ার্কের অঙ্ক সমাধান করো: ৪ মেগাবাইটের একটি ফাইল A থেকে B-তে যাবে, পথে ৩টি router (মোট ৪টি link), প্রতিটি link 10 Mbps. ফাইলটি 1500 byte-এর packet-এ ভাঙা হবে, header উপেক্ষা করো, propagation আর queuing শূন্য ধরো। ১. প্রথমে তোমার সব অনুমান তালিকা করো (MB মানে 10^6 না 2^20 byte, bit-এ রূপান্তর ইত্যাদি)। ২. packet-এর সংখ্যা, L/R আর (N+P-1)·L/R ধাপে ধাপে দেখাও, প্রতিটি সংখ্যার একক লিখে। ৩. একই অঙ্ক message switching (পুরো ফাইল এক packet) হলে কত হতো, তুলনা করো। ৪. উত্তর যাচাইয়ের জন্য একটি ছোট JavaScript কোড দাও যা আমি নিজে চালাতে পারব।

AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১“ARPANET বানানো হয়েছিল পারমাণবিক যুদ্ধেও টিকে থাকার জন্য” — এই প্রচলিত কথাটি কতটা সত্য?

কথাটি আংশিক সত্য, আংশিক মিথ — আর পার্থক্যটা বোঝা নেটওয়ার্ক নকশা বোঝার জন্যই দরকারি।

Baran-এর প্রেরণা সত্যিই টিকে থাকা: ১৯৬০-এর দশকের প্রথম ভাগে RAND-এ Paul Baran-এর কাজের কেন্দ্রে ছিল এমন যোগাযোগ-ব্যবস্থা, যা আক্রমণে অনেক node আর link হারালেও বাকি অংশ দিয়ে চলতে পারে। তিনি দেখান, কেন্দ্রীভূত (তারকা) বা আংশিক বিকেন্দ্রীভূত নকশার বদলে বহু বিকল্প পথওয়ালা “distributed” জাল অনেক বেশি টেকসই — আর সেই জালে বার্তাকে ছোট block-এ ভেঙে প্রতিটিকে যেকোনো খোলা পথে পাঠানোই স্বাভাবিক। Circuit-এ একটি switch নষ্ট হলে কল কেটে যায়; datagram-এ পরের packet অন্য পথ নেয়।

ARPANET-এর প্রেরণা ছিল ভিন্ন: যুক্তরাষ্ট্রের ARPA-র তহবিলে ১৯৬৯ সালে যে নেটওয়ার্ক চালু হয়, তার ঘোষিত লক্ষ্য ছিল মূলত গবেষণা-প্রতিষ্ঠানগুলোর দামি কম্পিউটার ভাগ করে ব্যবহার। এর নকশাকারদের অনেকে পরে বলেছেন যে যুদ্ধে টিকে থাকা তাঁদের প্রধান লক্ষ্য ছিল না। Donald Davies-এর প্রেরণাও ছিল দক্ষতা — time-sharing কম্পিউটারের bursty ট্রাফিক টেলিফোন circuit-এ খুব অপচয়ী।

তাহলে মিথটা এলো কোথা থেকে? ARPANET-এর নকশাকারেরা Baran-এর কাজ জানতেন এবং তার কিছু ধারণা নিয়েছিলেন, আর বিকেন্দ্রীভূত routing-এর ফল হিসেবে নেটওয়ার্কটি সত্যিই ব্যর্থতা সহ্য করতে পারত। ফলে দুই কাহিনি মিশে গেছে।

এখানে নকশার একটি গভীর শিক্ষা আছে: একই প্রযুক্তি ভিন্ন লক্ষ্য থেকে আসতে পারে — একজনের লক্ষ্য টেকসই হওয়া, আরেকজনের দক্ষতা — আর packet switching দুটোই দেয় কারণ এটি সম্পদ ও পথকে আগে থেকে বেঁধে রাখে না। আজ যখন একটি submarine cable কাটা পড়লে বাংলাদেশের ইন্টারনেট পুরো বন্ধ না হয়ে ধীর হয় (বিকল্প cable বা স্থলপথে ট্রাফিক সরে যায়, যদি পর্যাপ্ত বিকল্প থাকে), সেখানেও এই নীতিই কাজ করছে — যদিও বিকল্প পথের ক্ষমতা কম হলে ভিড় বাড়ে।

মূল উপলব্ধি: Packet switching-এর দুই বড় গুণ — দক্ষতা আর ব্যর্থতা-সহনশীলতা — দুটিই একই সিদ্ধান্ত থেকে আসে: পথ আর সম্পদ আগে থেকে বেঁধে না রাখা।

প্র ০২টেলিফোন কোম্পানিগুলো একসময় packet switching-কে গুরুত্ব দেয়নি, অথচ আজ মোবাইলের কণ্ঠও IP packet-এ যায়। এই পরিবর্তন কেন ঘটল?

টেলিফোন শিল্প প্রায় এক শতাব্দী ধরে circuit switching-এ নিখুঁত হয়েছিল: স্থির দেরি, পরিষ্কার কণ্ঠ, ব্যস্ত হলে স্পষ্ট busy tone. তাদের দৃষ্টিতে packet switching-এর পরিবর্তনশীল দেরি আর packet হারানো কণ্ঠের জন্য অগ্রহণযোগ্য। Baran-এর প্রস্তাব নিয়ে তখনকার বড় টেলিফোন কোম্পানির সংশয়ের গল্প ইতিহাসে প্রায়ই বলা হয় — তাঁদের যুক্তিও ভিত্তিহীন ছিল না, কারণ ১৯৬০-এর দশকের প্রযুক্তিতে packet-এ মানসম্মত কণ্ঠ পাঠানো সত্যিই কঠিন ছিল।

কী বদলাল? তিনটি জিনিস। প্রথমত, bandwidth সস্তা হলো — optical fiber আর দ্রুত router-এ link এত বড় হলো যে কণ্ঠের ৬৪ kbps বা তারও কম (আধুনিক codec-এ) সমুদ্রে এক ফোঁটা। ভিড় কম থাকলে queuing delay-ও কম। দ্বিতীয়ত, ট্রাফিকের চরিত্র উল্টে গেল — একসময় নেটওয়ার্কের বেশিরভাগই ছিল কণ্ঠ, এখন বেশিরভাগ ডেটা আর ভিডিও; কণ্ঠ ছোট একটি অংশ। দুটি আলাদা নেটওয়ার্ক চালানোর চেয়ে সবকিছু একটি IP নেটওয়ার্কে আনা সস্তা। তৃতীয়ত, প্রান্তের যন্ত্র বুদ্ধিমান হলো — ফোন নিজেই jitter buffer দিয়ে দেরির ওঠানামা মসৃণ করে, হারানো ছোট অংশ আন্দাজে পূরণ করে।

মোবাইলেও একই যাত্রা: 2G (GSM)-এ কণ্ঠ ছিল circuit-switched, 3G পর্যন্ত কণ্ঠ ও ডেটা আলাদা core-এ। 4G LTE-র core পুরোপুরি packet-ভিত্তিক, কণ্ঠ যায় VoLTE হিসেবে IP packet-এ; যেখানে VoLTE চালু নেই, সেখানে ফোন কল করার সময় পুরোনো নেটওয়ার্কে ফিরে যায়। বাংলাদেশের অপারেটররাও ধীরে ধীরে VoLTE চালু করেছে বলে জানা যায় (মোবাইল নেটওয়ার্ক পর্ব ৫১-এ)। WhatsApp বা Messenger কলও সাধারণ ইন্টারনেট packet.

তবে circuit-এর চাওয়া — নিশ্চিত মান — হারায়নি: অপারেটরের ভেতরের নেটওয়ার্কে কণ্ঠ packet-কে অগ্রাধিকার (QoS) দেওয়া হয়, যাতে ভিড়েও সে আগে যায় (পর্ব ২৬)।

মূল উপলব্ধি: প্রযুক্তির “সেরা” বিচার করে তখনকার দাম আর ট্রাফিক। সম্পদ দুর্লভ হলে সংরক্ষণ, সস্তা হলে ভাগাভাগি জেতে — আর যখন ভাগাভাগিই জেতে, নিশ্চয়তা আসে অগ্রাধিকার দিয়ে।

প্র ০৩ATM-এর cell মাত্র ৫৩ byte কেন? আর Ethernet-এ ১,৫০০ byte-ই বা কেন? Packet-এর আকার ঠিক করার পেছনে কী কী টানাপোড়েন?

অংশ ৬-এর সূত্র p* = √(F·h/(N−1)) শুধু একটি শক্তির হিসাব দেয়। বাস্তবে আরও কয়েকটি শক্তি একসাথে টানে।

ATM-এর গল্প — কণ্ঠের দেরি: ৬৪ kbps কণ্ঠে প্রতি ms-এ মাত্র ৮ byte তৈরি হয়। ৪৮ byte ভরতে লাগে ৬ ms; বড় cell হলে প্রেরককেই আরও বেশি অপেক্ষা করতে হতো cell ভরার জন্য (packetization delay), আর তাতে প্রতিধ্বনি (echo) সমস্যা বাড়ে। ছোট cell-এ header-এর ভাগ বেশি। প্রচলিত বর্ণনা অনুযায়ী, মান নির্ধারণের সময় একপক্ষ ৬৪ byte আর আরেকপক্ষ ৩২ byte চেয়েছিল, আর ৪৮ ছিল আপস। ৫ byte header-সহ ৫৩ — header-এর ভাগ প্রায় ৯.৪%, যা ডেটার জন্য বেশ ব্যয়বহুল (একে “cell tax” বলা হতো)। স্থির ছোট আকারের আরেকটি সুবিধা ছিল হার্ডওয়্যারে দ্রুত switching আর বড় packet-এর পেছনে ছোট cell-এর আটকে না থাকা।

Ethernet-এর ১,৫০০ byte: প্রথম দিকের Ethernet-এ মেমরি দামি ছিল; বড় frame মানে বড় buffer, আর একটি স্টেশন বেশিক্ষণ শেয়ার করা তার দখল করে রাখে। সংখ্যাটি একরকম ইঞ্জিনিয়ারিং আপস, আর পরে এত যন্ত্র এটিকে মেনে নিয়েছে যে বদলানো কঠিন। data center-এ অনেক সময় ৯,০০০ byte-এর “jumbo frame” ব্যবহার হয় — দ্রুত link-এ প্রতি-packet প্রক্রিয়াকরণের খরচ কমাতে — কিন্তু পথের প্রতিটি যন্ত্র সমর্থন না করলে সমস্যা হয়।

অন্যান্য শক্তি: error হলে পুরো packet নষ্ট — বেশি error-এর বেতার link-এ ছোট packet ভালো। Router-এর কাজ মূলত প্রতি packet-এ (header দেখা, টেবিল খোঁজা), তাই ছোট packet-এ প্রতি সেকেন্ডে বেশি সিদ্ধান্ত লাগে। আর বড় packet পেছনের ছোট interactive packet-কে বেশিক্ষণ আটকায় — ধীর link-এ এটা চোখে পড়ার মতো।

মূল উপলব্ধি: Packet-এর আকার একটি বহুমাত্রিক আপস — header খরচ, pipelining, প্রেরকের অপেক্ষা, error, buffer আর প্রক্রিয়াকরণ। গণিত একটি দিক দেখায়, মান নির্ধারণের রাজনীতি আর পুরোনো যন্ত্রের সাথে সামঞ্জস্য বাকিটা ঠিক করে।

প্র ০৪Statistical multiplexing-এর হিসাব কি শুধু router-এর জন্য? ISP-র “শেয়ার্ড” প্যাকেজ, মোবাইল টাওয়ার আর টেলিফোন এক্সচেঞ্জে এর চেহারা কেমন?

একই গণিত নেটওয়ার্কের প্রায় প্রতিটি স্তরে, এমনকি নেটওয়ার্কের বাইরেও।

ISP-র oversubscription: একটি এলাকার ISP হয়তো শত শত গ্রাহককে “২০ Mbps” প্যাকেজ বিক্রি করে, কিন্তু তার upstream link সবার যোগফলের অনেক ছোট। এটা প্রতারণা নয়, statistical multiplexing — সবাই একসাথে পুরো গতিতে ডাউনলোড করেন না। গ্রাহক আর ক্ষমতার এই অনুপাতকে বলে contention বা oversubscription ratio. সমস্যা হয় যখন স্বাধীনতার অনুমান ভাঙে: সন্ধ্যার পর সবাই একসাথে ভিডিও দেখলে, বা বড় একটি ক্রিকেট ম্যাচের লাইভ স্ট্রিমে। অংশ ৭-এর script-এ p বাড়িয়ে দেখুন — ঝুঁকি কত দ্রুত লাফায়।

টেলিফোন এক্সচেঞ্জ — circuit-এর ভেতরেও পরিসংখ্যান: মজার ব্যাপার, circuit switching নিজেও statistical multiplexing ব্যবহার করত — তবে কল-এর স্তরে। এক্সচেঞ্জে প্রত্যেক গ্রাহকের জন্য আলাদা trunk রাখা হয় না; সবাই একসাথে ফোন করেন না। কতগুলো trunk রাখলে “busy” পাওয়ার সম্ভাবনা গ্রহণযোগ্য থাকবে, তা হিসাবের জন্য ডেনমার্কের প্রকৌশলী A. K. Erlang ১৯০০-এর দশকের প্রথম ভাগে Copenhagen-এর টেলিফোন কোম্পানিতে কাজ করার সময় যে তত্ত্ব দেন, তা থেকেই queuing তত্ত্বের জন্ম। ট্রাফিকের একক “Erlang” তাঁর নামে, আর “Erlang B” সূত্র আজও কল সেন্টার আর মোবাইল টাওয়ারের চ্যানেল-সংখ্যা ঠিক করতে ব্যবহার হয়।

পার্থক্য কোথায়? Circuit-এ multiplexing হয় কল শুরুর সময় — জায়গা না থাকলে কলটাই হয় না (blocking). Packet-এ হয় প্রতিটি packet-এ — জায়গা না থাকলে packet অপেক্ষা করে বা হারায়। প্রথমটি “না” বলে, দ্বিতীয়টি “একটু ধীরে” বলে।

নেটওয়ার্কের বাইরে: ব্যাংকের কাউন্টার-সংখ্যা, হাসপাতালের শয্যা, বিদ্যুৎ গ্রিডের ক্ষমতা — সবই এই হিসাবে নির্ধারিত হয়। গ্রাহকের সবচেয়ে বেশি চাহিদার যোগফলের সমান ক্ষমতা কেউ রাখে না।

মূল উপলব্ধি: ভাগাভাগি সম্ভব হয় কারণ সবার চাহিদা একসাথে চূড়ায় ওঠে না। যেদিন ওঠে — ঈদের ছুটি, বড় ম্যাচ — সেদিন সিস্টেমের আসল নকশা ধরা পড়ে।

প্র ০৫IP datagram নেটওয়ার্ক কোনো নিশ্চয়তা দেয় না — তাহলে অনলাইন ক্লাস, ভিডিও কল বা অনলাইন গেম চলে কীভাবে? ইন্টারনেটে কি কখনো “সংরক্ষণ” ফিরিয়ে আনার চেষ্টা হয়েছে?

IP-র সেবাকে বলা হয় “best effort” — router সাধ্যমতো পাঠায়, কিন্তু দেরি, ক্রম বা পৌঁছানোর কোনো প্রতিশ্রুতি দেয় না। তবু ভিডিও কল চলে, কারণ নিশ্চয়তার কাজটা ভাগ হয়ে গেছে বিভিন্ন জায়গায়।

প্রান্তে বুদ্ধি: ইন্টারনেটের নকশার একটি মূল নীতি হলো জটিলতা প্রান্তের যন্ত্রে রাখা (end-to-end নীতি)। ভিডিও অ্যাপ নেটওয়ার্কের অবস্থা মেপে নিজেই গুণমান কমায়-বাড়ায়, ছোট buffer রেখে দেরির ওঠানামা ঢাকে, আর কিছু packet হারালেও চালিয়ে যায়। TCP হারানো packet আবার পাঠায় আর ভিড় বুঝে গতি কমায় (পর্ব ৩০, ৩২)।

প্রচুর ক্ষমতা: বড় ISP আর cloud কোম্পানিগুলো সাধারণত link-কে পুরো ভরতে দেয় না — বাড়তি ক্ষমতা রেখে দেয়, যাতে সারি ছোট থাকে। এটিই আসলে সবচেয়ে কার্যকর “গুণমান নিশ্চয়তা”।

সংরক্ষণ ফিরিয়ে আনার চেষ্টা: ১৯৯০-এর দশকে IETF “Integrated Services” আর RSVP protocol দিয়ে প্রতিটি প্রবাহের জন্য পথের প্রতিটি router-এ bandwidth সংরক্ষণের ব্যবস্থা প্রস্তাব করে — অনেকটা virtual circuit-এর মতো। কিন্তু কোটি কোটি প্রবাহের জন্য প্রতিটি router-এ state রাখা বড় ইন্টারনেটে বাস্তবসম্মত হয়নি, আর ISP-দের মধ্যে কে কার সংরক্ষণের দাম দেবে, সে ব্যবসায়িক সমস্যাও ছিল। পরে আসে “Differentiated Services” — প্রতিটি packet-এ একটি ছোট শ্রেণি-চিহ্ন, router শুধু শ্রেণি দেখে অগ্রাধিকার দেয়, প্রবাহ মনে রাখে না। এটি এক নেটওয়ার্কের ভেতরে (অফিস, অপারেটর) বেশ ব্যবহৃত, তবে ISP-র সীমানা পেরিয়ে সাধারণত টেকে না (QoS পর্ব ২৬-এ)। আর অপারেটরের ভেতরে MPLS দিয়ে নির্দিষ্ট পথ ও ক্ষমতা বরাদ্দের চর্চা আছে।

শেষে একটি নীতিগত বিতর্কও আছে — “net neutrality”: কোনো ISP কি কিছু কোম্পানির ট্রাফিককে টাকার বিনিময়ে অগ্রাধিকার দিতে পারবে? প্রশ্নটি প্রযুক্তি থেকে আইনে গড়িয়েছে, আর বিভিন্ন দেশে উত্তর ভিন্ন।

মূল উপলব্ধি: ইন্টারনেট নিশ্চয়তা কেনে প্রান্তের বুদ্ধি আর বাড়তি ক্ষমতা দিয়ে, প্রতি-প্রবাহ সংরক্ষণ দিয়ে নয়। মাঝের router-কে সরল আর state-হীন রাখাটাই এর বিশাল আকারে বেড়ে ওঠার রহস্য।

অনুশীলন

খাতা-কলম নিয়ে বসুন — হিসাবগুলো হাতে করে তারপর উত্তর মেলান।

  1. হাতে হিসাব: ৪ × ১০৬ বিটের একটি বার্তা ৪টি link পার হবে (মাঝে ৩টি router), প্রতিটি link ১ Mbps. propagation, queuing আর header উপেক্ষা করুন। (ক) পুরো বার্তা এক টুকরোয় পাঠালে কত সময়? (খ) ১০,০০০ বিটের packet-এ ভাঙলে কত সময়? (গ) প্রথম packet কখন B-তে পৌঁছায়?

    (ক) প্রতি link-এ ৪ × ১০৬ ÷ ১০৬ = ৪ সেকেন্ড, ৪টি link → ১৬ সেকেন্ড.

    (খ) P = ৪ × ১০৬ ÷ ১০৪ = ৪০০, L/R = ১০৪ ÷ ১০৬ = ১০ ms. মোট (৪ + ৪০০ − ১) × ১০ ms = ৪০৩ × ১০ ms = ৪.০৩ সেকেন্ড.

    (গ) N·L/R = ৪ × ১০ ms = ৪০ ms. প্রায় চার গুণ লাভের কারণ: message switching-এ যেকোনো মুহূর্তে একটি link কাজ করে, packet-এ চারটিই একসাথে।

  2. আউটপুট অনুমান করুন: অংশ ৫-এর C প্রোগ্রামে #define P 3-এর বদলে #define P 4 আর #define N 3-এর বদলে #define N 2 করা হলো (L আর R একই)। শেষ দুটি লাইনে কী ছাপা হবে? আর মোট কতগুলো “packet … link …” লাইন ছাপা হবে?

    L/R এখনো ১,০০০ μs. শেষ packet পৌঁছায় (N + P − 1)·L/R = (২ + ৪ − ১) × ১০০০ = ৫০০০ μs-এ, আর এক বার্তায় পাঠালে N·(P·L)/R = ২ × ৪০০০ = ৮০০০ μs:

    last bit reaches B at 5000 us; (N+P-1)*L/R = 5000 us
    one 4000-bit message instead: N*(P*L)/R = 8000 us

    “packet … link …” লাইন হবে P × N = ৪ × ২ = ৮টি. লক্ষ করুন, এবার লাভ কম (৮ থেকে ৫, আগে ৯ থেকে ৫), কারণ link কম — pipelining-এর সুযোগও কম। N = ১ হলে লাভ শূন্য।

  3. Script বদলে লিখুন: একটি ১০ Mbps link, প্রত্যেক ব্যবহারকারী সক্রিয় অবস্থায় ১ Mbps চান, আর সক্রিয় থাকেন ২০% সময়। অংশ ৭-এর stat_mux.js-এর কোন লাইন বদলাবেন? Circuit-এ কতজন? Overload-এর ঝুঁকি ০.১%-এর নিচে রেখে packet switching-এ সর্বোচ্চ কতজন?

    শুধু তৃতীয় লাইন: const C = 10e6, r = 1e6, p = 0.2; — তাতে cap নিজে থেকেই ১০ হয়। Circuit-এ ১০ জন. শেষ লাইন ছাপবে largest N with P(overload) < 0.001: 21 — অর্থাৎ ২১ জন (২১ জনে ঝুঁকি প্রায় ০.০০০৯৭, ২২ জনে প্রায় ০.০০১৬). আগের উদাহরণে (p = ০.১) ৩৮ জন হয়েছিল; সক্রিয়তার হার দ্বিগুণ হওয়ায় ভাগাভাগির লাভ অনেক কমে গেছে। p যত বড়, statistical multiplexing-এর সুবিধা তত কম।

  4. শ্রেণিবিভাগ করুন: নিচের প্রতিটি কোন পদ্ধতির — circuit switching, datagram packet switching, নাকি virtual circuit? (ক) পুরোনো ল্যান্ডফোনের কল (খ) আপনার বাসার Wi-Fi দিয়ে একটি ওয়েবসাইট খোলা (গ) একটি ব্যাংকের শাখাগুলোকে জোড়া ISP-র MPLS VPN (ঘ) একটি TCP সংযোগ — এটি কি circuit?

    (ক) Circuit switching — PSTN-এ কলের সময় প্রতিটি link-এ চ্যানেল সংরক্ষিত।

    (খ) Datagram packet switching — IP packet, প্রতিটি router আলাদা করে ঠিকানা দেখে।

    (গ) Virtual circuit-এর মতো — ISP-র ভেতরে label দিয়ে পূর্বনির্ধারিত পথ (label-switched path), যদিও ব্যাংকের যন্ত্রগুলো সাধারণ IP packet-ই পাঠায়।

    (ঘ) না। TCP “connection-oriented” ঠিকই, কিন্তু সংযোগের সব তথ্য (sequence নম্বর, window) থাকে শুধু দুই প্রান্তের কম্পিউটারে। মাঝের IP router-গুলো এই সংযোগের কথা জানেই না, কিছু সংরক্ষণও করে না — তাই এটি না circuit, না virtual circuit. পরীক্ষায় এই পার্থক্যটি প্রায়ই ধরা হয়।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি circuit-switched কলের ঘটনাগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. প্রেরক setup বার্তা পাঠায় — “B-র সাথে সংযোগ চাই”
  2. পথের প্রতিটি switch পরের link-এ একটি চ্যানেল বা slot সংরক্ষণ করে
  3. প্রাপক রাজি হয়, নিশ্চিতকরণ প্রেরকের কাছে ফিরে আসে
  4. সংরক্ষিত চ্যানেলে স্থির হারে ডেটা বা কণ্ঠ চলে
  5. Release বার্তায় সব switch চ্যানেল মুক্ত করে

১২,০০০ বিটের একটি packet ৪টি link পার হবে, প্রতিটি link ১২ Mbps. store-and-forward ধরে, propagation আর queuing বাদ দিলে, packet-টি গন্তব্যে পৌঁছাতে কত সময় লাগবে?

  • ১ ms
  • ৪ ms
  • ৩ ms
  • ৩২ ms

১০টি সমান আকারের packet ৩টি link পার হবে; প্রতিটি packet-এর প্রতি link-এ transmission time ২ ms. শুধু transmission ধরলে শেষ packet কখন পৌঁছাবে?

  • ৬০ ms
  • ২০ ms
  • ২৪ ms
  • ৬ ms

একটি ২ Mbps link TDM-এ ২০টি slot-এ ভাগ করা। circuit তৈরি করতে ০.২ সেকেন্ড লাগে। একটি circuit দিয়ে ১ Mbit (১০৬ বিট) ফাইল পাঠাতে মোট কত সময়?

  • ১০.২ সেকেন্ড
  • ০.৭ সেকেন্ড
  • ১০ সেকেন্ড
  • ২০০.২ সেকেন্ড

একটি ১ Mbps link-এ প্রত্যেক ব্যবহারকারী সক্রিয় অবস্থায় ১০০ kbps চান এবং স্বাধীনভাবে ১০% সময় সক্রিয় থাকেন। packet switching-এ ৩৫ জন যুক্ত থাকলে কোনটি সত্য?

  • link সবসময় ৩.৫ গুণ overload থাকবে
  • ২৫ জন সংযোগই পাবেন না
  • ১০ জনের বেশি কখনো একসাথে সক্রিয় হতে পারবেন না
  • ১০ জনের বেশি একসাথে সক্রিয় হওয়ার সম্ভাবনা প্রায় ০.০০০৪

Virtual circuit নেটওয়ার্ক সম্পর্কে কোন বক্তব্যটি সঠিক?

  • প্রতিটি packet-এ পূর্ণ গন্তব্য ঠিকানা থাকে, router কোনো state রাখে না
  • ডেটার আগে setup হয়, প্রতিটি router সংযোগভিত্তিক টেবিল রাখে আর label বদলে পাঠায়
  • এতে প্রতিটি সংযোগের bandwidth সবসময় সংরক্ষিত থাকে, তাই এটি আসলে circuit switching
  • পুরো ইন্টারনেট end-to-end virtual circuit দিয়ে চলে

Bursty ডেটার (হঠাৎ অনেক, তারপর দীর্ঘ নীরবতা) ক্ষেত্রে circuit switching কোথায় অপচয় করে, আর packet switching কেন বেশি দক্ষ?

  • Circuit-এ প্রতিটি switch-এ লম্বা সারি তৈরি হয়
  • Circuit-এ প্রতিটি বিটের সাথে ঠিকানা পাঠাতে হয়
  • Circuit-এ নীরব সময়েও সংরক্ষিত চ্যানেল খালি পড়ে থাকে; packet-এ সেই সময় অন্যরা link ব্যবহার করে
  • Circuit-এ প্রতিটি বিটের জন্য নতুন setup লাগে

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. Circuit switching = setup → transfer → teardown; সম্পদ সংরক্ষিত, হার ও দেরি স্থির, নীরবতায় অপচয়। TDM-এ একটি circuit পায় R ÷ slot-সংখ্যা।
  2. Packet switching = ঠিকানাসহ ছোট টুকরো, চাহিদামতো ভাগ; দাম queuing delay আর packet loss.
  3. Store-and-forward: একটি packet N·L/R, P টি packet (N + P − 1)·L/R — টুকরো করলে pipelining, কিন্তু header-এর খরচে খুব ছোট packet-ও খারাপ (p* = √(F·h/(N−1))).
  4. Statistical multiplexing: bursty ব্যবহারকারীরা একসাথে চূড়ায় ওঠেন না — ১ Mbps-এ circuit ১০ জন, packet ৩৫ জন (overload ≈ ০.০০০৪).
  5. Datagram (IP): router-এ সংযোগের state নেই; virtual circuit (ATM, MPLS): setup, প্রতি সংযোগ টেবিল, label swapping.

পরের পর্বে: আজ শুধু transmission delay হিসাব করেছি। এবার একটি packet-এর পুরো দেরি — processing, queuing, transmission আর propagation — আলাদা করে মাপব, দেখব সারি কখন বিস্ফোরিত হয়, আর throughput ঠিক করে কোন link.

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান