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

Multiple access — ALOHA, CSMA/CD আর CSMA/CA

Multiple Access Protocols — Channel Partitioning, ALOHA Throughput, CSMA/CD, Binary Exponential Backoff, CSMA/CA & Taking Turns

Taught in Bangla, this lesson explains the shared-medium problem and the three families of MAC protocols, pure and slotted ALOHA with proofs of the 1/(2e) and 1/e throughput limits, CSMA, CSMA/CD and binary exponential backoff in classic Ethernet, minimum frame size and efficiency numericals, CSMA/CA with hidden and exposed terminals, and taking-turns schemes such as polling, token passing, DOCSIS and mobile.

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

  • ভাগ করা মাধ্যমের সমস্যা আর MAC protocol-এর তিনটি পরিবারের সুবিধা-অসুবিধা
  • Pure আর slotted ALOHA-র vulnerable period আর Poisson মডেলে throughput-এর পূর্ণ প্রমাণ
  • CSMA-র তিন নীতি, আর propagation delay থাকায় শুনে পাঠালেও কেন collision হয়
  • CSMA/CD, jam signal, binary exponential backoff, ৬৪ byte minimum frame-এর হিসাব আর efficiency সূত্র
  • CSMA/CA-র ধারণা, hidden আর exposed terminal, RTS/CTS, আর polling, token ring, DOCSIS ও মোবাইলের scheduling

১ · একটি ঘর, অনেক বক্তা — ভাগ করা মাধ্যমের সমস্যা

কলেজের একটি ক্লাসরুম ভাবুন। স্যার বাইরে গেছেন, ৪০ জন শিক্ষার্থী। সবাই একসাথে কথা বললে কারও কথাই বোঝা যায় না — শব্দ মিশে যায়। কিন্তু চুপচাপ থাকলে ঘরটি অকারণে নষ্ট হয়। কোনো একটি নিয়ম দরকার: কে কখন বলবে।

নেটওয়ার্কেও ঠিক এই সমস্যা আছে। পর্ব ০৭ আর ০৮-এ দেখেছেন, bit যায় তামার তার, fiber বা বেতার তরঙ্গে। কিছু link হলো point-to-point — দুই প্রান্তে মাত্র দুটি যন্ত্র, যেমন আপনার কম্পিউটার থেকে switch-এর একটি port-এ যাওয়া একটি তার। কিন্তু অনেক link হলো broadcast channel: একজন পাঠালে সংযুক্ত সবাই শোনে। Wi-Fi-এর বাতাস, মোবাইল টাওয়ারের আশপাশের বেতার, পুরোনো দিনের এক লম্বা coaxial তারে যুক্ত অফিসের সব কম্পিউটার, বা একটি hub-এ জোড়া সব যন্ত্র — এরা সবাই একটি মাধ্যম ভাগ করে।

এমন মাধ্যমে দুই বা তার বেশি যন্ত্রের সংকেত একই সময়ে প্রাপকের কাছে পৌঁছালে তারা মিশে যায়। একে বলে collision. Collision-এ জড়িত সব frame সাধারণত নষ্ট হয়। প্রশ্নটি তাই দাঁড়ায়: অনেকগুলো যন্ত্র কীভাবে একটি চ্যানেল ভাগ করবে, যাতে collision কম হয় আর চ্যানেল যতটা সম্ভব কাজে লাগে? এই প্রশ্নের নাম multiple access সমস্যা, আর এর উত্তর যে নিয়ম, তাকে বলে MAC (medium access control) protocol.

ক্লাসরুমে মানুষ স্বাভাবিকভাবে কয়েকটি কৌশল ব্যবহার করে, আর প্রতিটির নেটওয়ার্ক-রূপ আছে: (১) রোল নম্বর ধরে পালা — প্রত্যেকে নির্দিষ্ট মিনিট পায় (সময় ভাগ, TDMA). (২) ঘরের কোণে কোণে আলাদা দল — প্রত্যেক দল নিজের সুরে কথা বলে (frequency ভাগ, FDMA). (৩) আগে শুনে তারপর বলা — কেউ বলছে না দেখে শুরু করা, দুজন একসাথে শুরু করলে থেমে কিছুক্ষণ পরে আবার চেষ্টা (CSMA/CD). (৪) ক্লাস ক্যাপ্টেন ডাকে — “রহিম, কিছু বলার আছে?” (polling). (৫) একটি চক ঘোরে — যার হাতে চক, শুধু সে বলবে (token passing).

একটি আদর্শ MAC protocol-এর কাছে আমরা কী চাই? R bit/s-এর একটি চ্যানেল আর M-টি যন্ত্র ধরে নিন:

  • শুধু একজন পাঠাতে চাইলে সে পুরো R হারে পাঠাতে পারবে।
  • M জন একসাথে পাঠাতে চাইলে প্রত্যেকে গড়ে R/M হার পাবে।
  • পুরোপুরি বিকেন্দ্রীভূত — কোনো একটি “নিয়ন্ত্রক” যন্ত্র বা কেন্দ্রীয় ঘড়ির ওপর নির্ভর নয়, যা বিকল হলে সব বন্ধ।
  • সরল আর সস্তা — প্রতিটি NIC-এ বসানো যায়।

কোনো একটি protocol চারটি শর্ত একসাথে নিখুঁতভাবে পূরণ করে না। প্রতিটি পরিবার কোনো একটিকে বিসর্জন দিয়ে অন্যটি পায় — এই পর্বের বাকি অংশ এই দাম-দরের গল্প।

২ · তিন পরিবার — ভাগ করে দেওয়া, এলোমেলো, পালা করে

(ক) চ্যানেল ভাগ করে দেওয়া — FDMA, TDMA, CDMA

পর্ব ০৮-এ multiplexing দেখেছেন — একটি link-এ অনেক প্রবাহ একসাথে বহন করা। একই কৌশল যখন অনেকগুলো আলাদা যন্ত্রের মধ্যে চ্যানেল ভাগ করতে ব্যবহার হয়, তখন নামের শেষে “multiple access” যোগ হয়:

  • TDMA: সময়কে frame-এ, প্রতিটি frame-কে M-টি slot-এ ভাগ (পর্ব ০৮-এর TDM-এর মতো)। প্রতিটি যন্ত্র প্রতি frame-এ নিজের slot-এ পুরো হারে পাঠায়। কোনো collision নেই, সবাই ন্যায্য R/M পায়। কিন্তু একজনই পাঠাতে চাইলেও সে R/M-এর বেশি পায় না, আর অন্যদের খালি slot নষ্ট হয়। ২G মোবাইল নেটওয়ার্ক GSM-এ প্রতিটি carrier frequency ৮টি time slot-এ ভাগ করা হতো।
  • FDMA: চ্যানেলের frequency পরিসর M-টি সরু ব্যান্ডে ভাগ (পর্ব ০৮-এর FDM). প্রত্যেকে সারাক্ষণ নিজের ব্যান্ডে পাঠায়, হার R/M. সমস্যা একই — অলস ব্যান্ড অন্য কেউ ব্যবহার করতে পারে না।
  • CDMA: সবাই একই frequency-তে একই সময়ে পাঠায়, কিন্তু প্রত্যেকের data bit একটি নিজস্ব “code” দিয়ে গুণ করা। Code-গুলো এমনভাবে বাছা (পরস্পর orthogonal), যাতে প্রাপক নিজের code দিয়ে গুণ করে গড় নিলে শুধু কাঙ্ক্ষিত প্রেরকের bit ফিরে পায় আর বাকিদের অবদান প্রায় শূন্য হয়ে যায়। ৩G মোবাইলের (যেমন WCDMA) মূল ভিত্তি ছিল এটি; বিস্তারিত পর্ব ৫১-এ।

এই পরিবার ফোনকলের মতো স্থির ট্রাফিকে ভালো, কিন্তু দুর্বল bursty traffic: কম্পিউটারের ট্রাফিক হঠাৎ হঠাৎ আসে, বেশিরভাগ সময় চুপ। তখন নির্দিষ্ট ভাগ রাখা মানে অধিকাংশ slot বা ব্যান্ড নষ্ট — পর্ব ০৪-এ statistical multiplexing-এর যুক্তি মনে করুন।

(খ) Random access — যখন খুশি পাঠান, সংঘর্ষ হলে আবার

Random access protocol-এ কোনো ভাগ নেই। যার frame আছে, সে পুরো R হারে পাঠায়। Collision হলে জড়িত প্রত্যেকে একটি এলোমেলো সময় অপেক্ষা করে আবার পাঠায়। এলোমেলো কেন? সবাই যদি ঠিক ১ ms পরে আবার চেষ্টা করে, তারা আবার একসাথে ধাক্কা খাবে — চিরকাল। ALOHA, slotted ALOHA, CSMA, CSMA/CD, CSMA/CA — সবই এই পরিবারের।

(গ) Taking turns — পালা করে

তৃতীয় পরিবার দুই জগতের ভালোটা নিতে চায়: ভিড় কম হলে একজন প্রায় পুরো R পাবে, ভিড় বেশি হলে collision ছাড়াই সবাই পালা পাবে। কৌশল দুটি — একজন নিয়ন্ত্রক পালা করে ডাকে (polling), অথবা একটি অনুমতিপত্র (token) হাতে হাতে ঘোরে (token passing). অংশ ৯-এ বিস্তারিত।

পরিবারউদাহরণকম ভিড়েবেশি ভিড়েদুর্বলতা
Channel partitioningTDMA, FDMA, CDMAএকজনও R/M-এর বেশি পায় নান্যায্য, collision নেইBursty ট্রাফিকে অপচয়
Random accessALOHA, CSMA/CD, CSMA/CAপ্রায় পুরো RCollision বাড়ে, throughput কমেনিশ্চিত delay-এর প্রতিশ্রুতি নেই
Taking turnsPolling, token ring, FDDIপ্রায় পুরো R (পালার খরচ বাদে)ন্যায্য, collision নেইPoll/token-এর খরচ, নিয়ন্ত্রক বা token হারানোর ঝুঁকি

৩ · ALOHA — হাওয়াইয়ের দ্বীপ থেকে প্রথম random access

১৯৭০ সালের কাছাকাছি University of Hawaii-তে Norman Abramson আর তাঁর সহকর্মীরা একটি সমস্যায় পড়েন: বিশ্ববিদ্যালয়ের কেন্দ্রীয় কম্পিউটারের সাথে কয়েকটি দ্বীপে ছড়ানো terminal যুক্ত করতে হবে, আর সমুদ্রের নিচে তার বা ভাড়া টেলিফোন লাইন অনেক খরচের। তাঁরা বেছে নেন বেতার: সব terminal একটি সাধারণ frequency-তে কেন্দ্রে পাঠায়, কেন্দ্র আরেকটি frequency-তে সবাইকে উত্তর সম্প্রচার করে। ১৯৭০ সালে প্রকাশিত প্রবন্ধে তাঁরা পদ্ধতিটি বর্ণনা করেন, আর ১৯৭১ সাল নাগাদ ALOHAnet নামে নেটওয়ার্কটি চালু হয় বলে সাধারণত উল্লেখ করা হয়। পরে Xerox PARC-এ Ethernet নকশার সময় Bob Metcalfe সরাসরি ALOHA-র বিশ্লেষণ থেকে অনুপ্রেরণা নেন (ভাবনার প্রশ্ন ১)।

ALOHA-র নিয়ম অবিশ্বাস্যরকম সরল:

  1. Frame তৈরি হলেই পাঠিয়ে দিন — কিছু শোনার দরকার নেই।
  2. কেন্দ্র frame ঠিকমতো পেলে একটি ACK (নিশ্চিতকরণ) পাঠায়।
  3. নির্দিষ্ট সময়ে ACK না এলে ধরে নিন collision হয়েছে; একটি এলোমেলো সময় অপেক্ষা করে আবার পাঠান।

এই মূল রূপকে বলে pure ALOHA. ১৯৭২ সালে Larry Roberts একটি উন্নতি প্রস্তাব করেন: সময়কে সমান “slot”-এ ভাগ করুন, প্রতিটি slot ঠিক এক frame পাঠানোর সময়ের (T) সমান, আর সবাইকে বলুন frame পাঠানো শুরু করতে হবে শুধু slot-এর শুরুতে। এর নাম slotted ALOHA. এর জন্য সবার ঘড়ি মোটামুটি মিলিয়ে রাখতে হয় — কেন্দ্র নিয়মিত একটি সময়-সংকেত সম্প্রচার করলেই চলে। কিন্তু এই ছোট পরিবর্তনে throughput দ্বিগুণ হয়। কেন?

Vulnerable period — কোন সময়ে অন্য কেউ শুরু করলে আমার frame মরবে?

সব frame-এর দৈর্ঘ্য সমান ধরে নিন, পাঠাতে লাগে T সময়। আমাদের frame শুরু হলো t0-এ, শেষ t0 + T-তে। অন্য একটি frame যদি আমাদের frame-এর সাথে এক মুহূর্তের জন্যও মিলে যায়, দুটোই নষ্ট। যে সময়-জানালায় অন্য কারও শুরু করা আমাদের frame নষ্ট করে, তাকে বলে vulnerable period. নিচের ডায়াগ্রামে ধাপে ধাপে দেখুন।

আমাদের frame A (দৈর্ঘ্য T, শুরু t0)
পদ্ধতি
অন্য frame
ফল
P(A সফল)
  1. আমাদের frame A — t0 থেকে t0 + T. Pure ALOHA-তে A যেকোনো মুহূর্তে শুরু হতে পারে। এই T সময় জুড়ে অন্য কারও সংকেত না এলে A সফল।
  2. B শুরু হলো A-এর আগে, t0 − ০.৬T-তে। B চলবে t0 + ০.৪T পর্যন্ত — অর্থাৎ A-এর প্রথম ০.৪T অংশের সাথে মিলে যায়। দুটো frame-ই নষ্ট। তাই A-এর আগের পুরো T সময়ের মধ্যে কেউ শুরু করলেই বিপদ।
  3. C শুরু হলো A-এর মাঝখানে, t0 + ০.৫T-তে। A-এর শেষ অর্ধেক C-এর প্রথম অর্ধেকের সাথে মিলে গেল — আবার দুটোই নষ্ট। অর্থাৎ A চলার পুরো T সময়েও কেউ শুরু করলে বিপদ।
  4. দুই অংশ মিলিয়ে — vulnerable period ২T. t0 − T থেকে t0 + T পর্যন্ত ২T সময়ে অন্য কোনো frame শুরু না হলেই A সফল। গড়ে প্রতি T-তে G-টি চেষ্টা হলে Poisson মডেলে ২T-তে শূন্যটি চেষ্টার সম্ভাবনা e−২G (অংশ ৪-এ প্রমাণ)।
  5. Slotted ALOHA — vulnerable period মাত্র T. এখন সবাই শুধু slot-এর শুরুতে পাঠায়। আগের slot-এর frame আমাদের slot শুরুর ঠিক আগে শেষ হয়, তাই মেলে না; পরের কেউ আমাদের মাঝখানে ঢুকতে পারে না। ঝুঁকি শুধু একই slot-এ আরেকজনের শুরু করা — জানালা T, সাফল্যের সম্ভাবনা e−G.
  6. তুলনা। Slot-এর নিয়ম ঝুঁকির জানালা অর্ধেক করে। তাই slotted ALOHA-র throughput S = G·e−G, pure-এর S = G·e−২G — সর্বোচ্চ মানে ঠিক দ্বিগুণ (১/e বনাম ১/(২e)). দাম: সবার ঘড়ি মেলাতে হয়, আর frame তৈরি হলেও পরের slot পর্যন্ত গড়ে আধা slot অপেক্ষা।

৪ · Throughput-এর প্রমাণ — ১/(২e) আর ১/e কোথা থেকে আসে

বিশ্ববিদ্যালয় আর চাকরির লিখিত পরীক্ষায় এই প্রমাণটি খুব প্রিয়। প্রথমে দুটি সংজ্ঞা:

  • S (throughput): প্রতি frame-সময় T-তে গড়ে কতগুলো frame সফলভাবে যায়। S = ১ মানে চ্যানেল একটুও নষ্ট না করে পুরো সময় কাজে লাগছে। S-কে “চ্যানেলের কত ভাগ কাজে লাগছে” হিসেবেও পড়া যায়।
  • G (offered load): প্রতি T-তে গড়ে কতগুলো পাঠানোর চেষ্টা হয় — নতুন frame আর আবার পাঠানো frame মিলিয়ে। G > ১ হতেই পারে; তখন চ্যানেলে চাপ তার ক্ষমতার চেয়ে বেশি।

মডেলের অনুমান

অনেকগুলো (প্রায় অসীম) স্বাধীন যন্ত্র, প্রত্যেকে কালেভদ্রে পাঠায়। তাহলে মোট চেষ্টাগুলো সময়ের ওপর এলোমেলোভাবে ছড়ানো একটি Poisson প্রবাহ, গড় হার প্রতি T-তে G. এই মডেলে t সময়ে ঠিক k-টি চেষ্টা হওয়ার সম্ভাবনা:

P(k, t) = (G·t/T)k · e−G·t/T / k!

এখান থেকে সবচেয়ে দরকারি ফল: t সময়ে একটিও চেষ্টা না হওয়ার সম্ভাবনা (k = ০) হলো e−G·t/T. (আসলে retransmission আগের collision-এর ওপর নির্ভর করে, তাই এটি একটি সরল অনুমান।)

Pure ALOHA — S = G·e−২G

  1. একটি চেষ্টা সফল হয় যদি তার vulnerable period ২T-তে অন্য কোনো চেষ্টা শুরু না হয়। সেই সম্ভাবনা P০ = e−G·২T/T = e−২G.
  2. প্রতি T-তে G-টি চেষ্টা, প্রত্যেকটি e−২G সম্ভাবনায় সফল। তাই S = G · e−২G.
  3. সর্বোচ্চ খুঁজতে অবকলন: dS/dG = e−২G − ২G·e−২G = e−২G(১ − ২G). e−২G কখনো শূন্য নয়, তাই dS/dG = ০ ⇔ G = ১/২.
  4. G = ০.৫ বসালে Smax = ০.৫ · e−১ = ১/(২e) ≈ ০.১৮৪. দ্বিতীয় অবকলন সেখানে ঋণাত্মক (বা সহজভাবে: G = ০-এ S = ০, আর G বড় হলে S → ০), তাই এটি সর্বোচ্চ।

Slotted ALOHA — S = G·e−G

  1. Vulnerable period T, তাই সফলের সম্ভাবনা e−G, আর S = G·e−G.
  2. dS/dG = e−G(১ − G) = ০ ⇔ G = ১.
  3. Smax = ১ · e−১ = ১/e ≈ ০.৩৬৮.
মূল ধারণা

Pure ALOHA-তে চ্যানেলের সর্বোচ্চ প্রায় ১৮.৪%, slotted ALOHA-তে প্রায় ৩৬.৮% কাজে লাগে। ১০ Mbps-এর চ্যানেলে তা যথাক্রমে মোটে ১.৮৪ আর ৩.৬৮ Mbps দরকারি ডেটা। আর এই সর্বোচ্চ মান পেতে load ঠিক G = ০.৫ বা ১-এ রাখতে হয় — তার বেশি চেষ্টা করলে throughput কমে, কারণ collision বাড়ে।

একটি বিকল্প প্রমাণও পরীক্ষায় আসে, যেখানে Poisson না ধরে সসীম N-টি যন্ত্র নেওয়া হয়। Slotted ALOHA-তে প্রতিটি যন্ত্র প্রতি slot-এ p সম্ভাবনায় পাঠায়। একটি slot সফল যদি ঠিক একজন পাঠায়: S(p) = N·p·(১ − p)N−১ (এটি একটি binomial সম্ভাবনা)। অবকলন শূন্য করলে p = ১/N, আর Smax = (১ − ১/N)N−১. N → ∞ হলে (১ − ১/N)N → ১/e আর (১ − ১/N)−১ → ১, তাই সীমা ১/e — একই উত্তর।

এবার সূত্র দুটি দিয়ে একটি টেবিল বানানো যাক, আর সর্বোচ্চ বিন্দু দুটি সংখ্যাগতভাবেও খুঁজে দেখা যাক (G-কে ০.০০১ ধাপে বাড়িয়ে)।

// Throughput S (good frames per frame-time) for offered load G (attempts per frame-time).
// Poisson model:  pure ALOHA S = G e^(-2G),  slotted ALOHA S = G e^(-G)
const pure = G => G * Math.exp(-2 * G);
const slotted = G => G * Math.exp(-G);
console.log("    G   pure S  slotted S  P(success) pure / slotted");
for (const G of [0.1, 0.25, 0.5, 0.75, 1, 1.5, 2, 3]) {
  console.log(G.toFixed(2).padStart(5) + pure(G).toFixed(4).padStart(9) +
    slotted(G).toFixed(4).padStart(11) +
    Math.exp(-2 * G).toFixed(3).padStart(14) + " / " + Math.exp(-G).toFixed(3));
}
// Find the maxima numerically (scan G in steps of 0.001) and compare with theory
let bp = [0, 0], bs = [0, 0];
for (let i = 1; i <= 3000; i++) {
  const G = i / 1000;
  if (pure(G) > bp[1]) bp = [G, pure(G)];
  if (slotted(G) > bs[1]) bs = [G, slotted(G)];
}
console.log("pure    max at G = " + bp[0] + ": S = " + bp[1].toFixed(4) +
  "   1/(2e) = " + (1 / (2 * Math.E)).toFixed(4));
console.log("slotted max at G = " + bs[0] + ": S = " + bs[1].toFixed(4) +
  "   1/e    = " + (1 / Math.E).toFixed(4));
const R = 10; // a 10 Mbps shared channel
console.log("useful data on " + R + " Mbps: pure " + (R * bp[1]).toFixed(2) +
  " Mbps, slotted " + (R * bs[1]).toFixed(2) + " Mbps");

আউটপুট (কোনো এলোমেলো সংখ্যা নেই — প্রতিবার একই):

    G   pure S  slotted S  P(success) pure / slotted
 0.10   0.0819     0.0905         0.819 / 0.905
 0.25   0.1516     0.1947         0.607 / 0.779
 0.50   0.1839     0.3033         0.368 / 0.607
 0.75   0.1673     0.3543         0.223 / 0.472
 1.00   0.1353     0.3679         0.135 / 0.368
 1.50   0.0747     0.3347         0.050 / 0.223
 2.00   0.0366     0.2707         0.018 / 0.135
 3.00   0.0074     0.1494         0.002 / 0.050
pure    max at G = 0.5: S = 0.1839   1/(2e) = 0.1839
slotted max at G = 1: S = 0.3679   1/e    = 0.3679
useful data on 10 Mbps: pure 1.84 Mbps, slotted 3.68 Mbps

টেবিল পড়া: কম load-এ (G = ০.১) দুই পদ্ধতি প্রায় সমান — S ≈ G, কারণ প্রায় সব চেষ্টাই সফল (৮১.৯% আর ৯০.৫%). Pure ALOHA-র চূড়া G = ০.৫-এ ০.১৮৩৯; এর পরে load বাড়ালে throughput দ্রুত নামে — G = ১-এ ০.১৩৫৩, G = ৩-এ মাত্র ০.০০৭৪, কারণ তখন সফলের সম্ভাবনা ০.২%. Slotted ALOHA-র চূড়া G = ১-এ ০.৩৬৭৯, আর G = ৩-এও ০.১৪৯৪ ধরে রাখে। সংখ্যাগত স্ক্যানও ঠিক G = ০.৫ আর G = ১-এ সর্বোচ্চ পেয়েছে, তত্ত্বের ১/(২e) আর ১/e-এর সাথে চার দশমিক পর্যন্ত মিলেছে।

তত্ত্ব কি বাস্তবে মেলে? — একটি Monte-Carlo পরীক্ষা

Poisson মডেলটি “অসীম যন্ত্র” ধরে। সসীম ৫০টি যন্ত্র নিয়ে slotted ALOHA সত্যি সত্যি চালালে কী হয়? নিচের simulator প্রতিটি slot-এ প্রতিটি যন্ত্রকে p = G/৫০ সম্ভাবনায় পাঠাতে দেয়, এক লাখ slot ধরে গোনে কোন slot সফল (ঠিক একজন), খালি (কেউ নয়) আর collision (দুই বা তার বেশি)। এলোমেলো সংখ্যা আসে একটি নির্দিষ্ট seed থেকে, তাই প্রতিবার একই ফল।

// Slotted ALOHA Monte-Carlo: N stations, each sends in a slot with probability p = G/N.
// Seeded PRNG -> the same numbers every run.
function rng(seed) {                         // mulberry32
  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 = 50, SLOTS = 100000;
console.log("   G  measured S  N-station Np(1-p)^(N-1)  Poisson Ge^-G  idle  collided");
for (const G of [0.25, 0.5, 1, 2, 3]) {
  const rand = rng(11), p = G / N;
  let ok = 0, idle = 0, coll = 0;
  for (let s = 0; s < SLOTS; s++) {
    let senders = 0;
    for (let k = 0; k < N; k++) if (rand() < p) senders++;
    if (senders === 1) ok++; else if (senders === 0) idle++; else coll++;
  }
  const exact = N * p * Math.pow(1 - p, N - 1);
  console.log(G.toFixed(2).padStart(4) + (ok / SLOTS).toFixed(4).padStart(12) +
    exact.toFixed(4).padStart(25) + (G * Math.exp(-G)).toFixed(4).padStart(15) +
    (100 * idle / SLOTS).toFixed(1).padStart(6) + "%" + (100 * coll / SLOTS).toFixed(1).padStart(9) + "%");
}

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

   G  measured S  N-station Np(1-p)^(N-1)  Poisson Ge^-G  idle  collided
0.25      0.1945                   0.1956         0.1947  77.8%      2.7%
0.50      0.3061                   0.3056         0.3033  60.5%      8.9%
1.00      0.3721                   0.3716         0.3679  36.1%     26.7%
2.00      0.2702                   0.2706         0.2707  12.8%     60.2%
3.00      0.1434                   0.1447         0.1494   4.5%     81.2%

তিনটি কলামের তুলনা: মাপা throughput (দ্বিতীয় কলাম) সসীম-N সূত্রের (তৃতীয়) সাথে প্রায় তৃতীয় দশমিক পর্যন্ত মেলে — পার্থক্য শুধু এলোমেলোতার। Poisson-এর ১/e = ০.৩৬৭৯-এর চেয়ে ৫০টি যন্ত্রে সর্বোচ্চ একটু বেশি (০.৩৭১৬), কারণ (১ − ১/N)N−১ সামান্য বড়; N বাড়লে পার্থক্য মিলিয়ে যায়। শেষ দুই কলাম চূড়ার ছবিটা স্পষ্ট করে: G = ১-এ ৩৬.১% slot খালি, ২৬.৭% collision-এ নষ্ট, বাকি প্রায় ৩৭% সফল। G = ৩-এ ৮১.২% slot-এ collision — ভিড় বেশি হলে চ্যানেল প্রায় পুরোটাই সংঘর্ষে যায়।

ALOHA-র অস্থিরতা: G বেড়ে চূড়া পেরোলে বেশি collision → বেশি retransmission → আরও বেশি G — একটি দুষ্টচক্র, যেখানে throughput প্রায় শূন্যে নামতে পারে। তাই বাস্তব random access protocol-কে ভিড়ের সময় নিজে থেকে চেষ্টা কমাতে হয় — ঠিক এই কাজটিই করে অংশ ৬-এর binary exponential backoff.

৫ · CSMA — আগে শুনুন, তারপর বলুন

ALOHA-র সবচেয়ে বড় অপচয় হলো, কেউ পাঠাচ্ছে কি না তা না দেখেই পাঠানো। ভদ্র মানুষ কথা বলার আগে দেখে নেন অন্য কেউ বলছেন কি না। নেটওয়ার্কের ভাষায় এটাই carrier sense — চ্যানেলে কারও সংকেত (carrier) আছে কি না শোনা। এই নিয়ম যোগ করলে পাওয়া যায় CSMA (Carrier Sense Multiple Access). চ্যানেল ব্যস্ত পেলে কী করবে, তার তিনটি নীতি আছে (persistence):

1-persistent

ব্যস্ত থাকলে টানা শুনতে থাকুন; খালি হওয়ামাত্র পাঠান (সম্ভাবনা ১)। দেরি সবচেয়ে কম, কিন্তু দুজন অপেক্ষায় থাকলে চ্যানেল খালি হওয়ার মুহূর্তে দুজনেই লাফ দেয় — নিশ্চিত collision. ক্লাসিক Ethernet এই নীতি নেয়, আর collision-এর পর backoff দিয়ে সামলায়।

কম দেরি, বেশি collision

Non-persistent

ব্যস্ত থাকলে টানা না শুনে একটি এলোমেলো সময় পরে আবার শুনুন। দুজন অপেক্ষমাণ আলাদা সময়ে ফিরে আসে, তাই collision কম; কিন্তু চ্যানেল খালি হয়ে গেলেও কেউ হয়তো তখনো ফেরেনি — অলস সময় নষ্ট হয়।

কম collision, বেশি দেরি

p-persistent

Slot-ভিত্তিক চ্যানেলে: খালি slot পেলে p সম্ভাবনায় পাঠান, ১ − p সম্ভাবনায় পরের slot পর্যন্ত অপেক্ষা করে আবার একই নিয়ম। p ছোট হলে collision কম কিন্তু দেরি বেশি; p = ১ হলে এটিই 1-persistent.

দুইয়ের মাঝামাঝি

শুনেও কেন collision? — propagation delay

CSMA যদি সব collision দূর করত, তাহলে আর কিছু লাগত না। কিন্তু পর্ব ০৫-এর propagation delay মনে করুন: সংকেত তারে চলে প্রায় ২ × ১০৮ m/s-এ, তাৎক্ষণিক নয়। ধরুন A আর B একটি তারের দুই প্রান্তে, ২,০০০ m দূরে। A পাঠানো শুরু করল t = ০-তে। A-এর প্রথম bit B-তে পৌঁছাবে ২,০০০ ÷ (২ × ১০৮) = ১০ µs পরে। এই ১০ µs-এর মধ্যে B চ্যানেল শুনলে নীরবতাই পাবে — আর সে-ও পাঠানো শুরু করতে পারে। CSMA-তে vulnerable period তাই মোটামুটি এক propagation delay: Tprop. Propagation delay frame-এর তুলনায় যত ছোট, CSMA তত ভালো কাজ করে — এই অনুপাতটিই অংশ ৭-এর efficiency সূত্রের “a”.

৬ · CSMA/CD — ক্লাসিক Ethernet-এর নিয়ম

সাধারণ CSMA-তে collision হলেও দুই প্রেরক পুরো frame পাঠিয়ে যায় — হয়তো ১,৫০০ byte, যার পুরোটাই নষ্ট। ক্লাসিক Ethernet-এর বুদ্ধি ছিল: পাঠানোর সময়ও তার শুনতে থাকা। তারের ওপর সংকেতের মাত্রা নিজের পাঠানো সংকেতের চেয়ে বেশি হলে বোঝা যায় অন্য কেউ-ও পাঠাচ্ছে — collision. ধরা পড়ামাত্র থেমে যাওয়া। এটাই CSMA/CD (Collision Detection). তারযুক্ত মাধ্যমে এটি সম্ভব, কারণ তারে নিজের সংকেত আর অন্যের সংকেত প্রায় সমান জোরে থাকে। পুরো নিয়মটি ধাপে ধাপে:

  1. পাঠানোর frame তৈরি হলে চ্যানেল শুনুন (carrier sense).
  2. চ্যানেল ব্যস্ত থাকলে খালি হওয়া পর্যন্ত অপেক্ষা (1-persistent), তারপর ৯৬ bit-সময়ের একটি ছোট ফাঁক (১০ Mbps-এ ৯.৬ µs, interframe gap).
  3. পাঠানো শুরু করুন, আর পাঠানোর সময় শুনতে থাকুন।
  4. পুরো frame collision ছাড়া গেলে কাজ শেষ।
  5. Collision ধরা পড়লে সাথে সাথে frame থামিয়ে ৩২ bit-এর একটি jam signal পাঠান — যাতে তারের সবাই নিশ্চিতভাবে collision টের পায়।
  6. তারপর binary exponential backoff: এটি যদি এই frame-এর n-তম collision হয়, তাহলে ০ থেকে ২min(n, ১০) − ১ পর্যন্ত একটি পূর্ণসংখ্যা K এলোমেলোভাবে বেছে নিন, K × slot time অপেক্ষা করুন (১০ Mbps-এ slot time = ৫১২ bit-সময় = ৫১.২ µs), তারপর ধাপ ১-এ ফিরুন। ১৬ বার চেষ্টাতেও না হলে frame বাতিল।

এখন দুটি station-এর একটি সত্যিকারের collision সংখ্যা দিয়ে দেখি। ১০ Mbps-এর একটি তার, A আর B ২,০০০ m দূরে, s = ২ × ১০৮ m/s — অর্থাৎ Tprop = ১০ µs, আর ১ µs-এ সংকেত যায় ২০০ m.

A (০ m) আর B (২,০০০ m) — একটি তার
সময়
A
B
তারে
  1. t = ০ — A শুনল, তার খালি, পাঠানো শুরু। A-এর প্রথম bit B-এর দিকে ছুটছে, প্রতি µs-এ ২০০ m. B-এর কাছে পৌঁছাতে লাগবে ১০ µs.
  2. t = ৮ µs — B-এর frame তৈরি হলো, B শুনল: তার খালি! A-এর সংকেত তখন মাত্র ১,৬০০ m-এ, B-এ (২,০০০ m) পৌঁছায়নি। Carrier sense কোনো ভুল করেনি — খবর এখনো আসেনি। B পাঠানো শুরু করল। A এর মধ্যে ৮ µs × ১০ Mbps = ৮০ bit পাঠিয়েছে।
  3. t = ৯ µs — তারের মাঝখানে দুই সংকেত মিলল। A-এর সামনের প্রান্ত ১,৮০০ m-এ, B-এর সামনের প্রান্তও (১ µs-এ ২০০ m এগিয়ে) ১,৮০০ m-এ। এখান থেকে দুই দিকে মিশ্র, নষ্ট সংকেত ছড়াচ্ছে। কিন্তু A বা B কেউ এখনো জানে না।
  4. t = ১০ µs — B প্রথমে টের পেল। A-এর প্রথম bit B-তে পৌঁছাল। B নিজের সংকেতের সাথে বাড়তি সংকেত দেখে collision ধরল, frame থামিয়ে ৩২ bit-এর jam পাঠাল (৩.২ µs, শেষ হবে ১৩.২ µs-এ)। B মাত্র ২০ bit পাঠিয়ে থেমেছে।
  5. t = ১৮ µs — A টের পেল। B শুরু করেছিল ৮ µs-এ, তার প্রথম bit A-তে পৌঁছাল ৮ + ১০ = ১৮ µs-এ। A থেমে jam পাঠাল (শেষ ২১.২ µs-এ)। A এর মধ্যে ১৮ µs × ১০ Mbps = ১৮০ bit পাঠিয়েছে — ৫১২ bit-এর চেয়ে কম, তাই frame শেষ হওয়ার আগেই খবরটি পেল। এটাই minimum frame size-এর মূল কথা (অংশ ৭)।
  6. Backoff — প্রথম collision, n = ১, K বাছাই {০, ১} থেকে। A পেল K = ০ (এখনই আবার চেষ্টা), B পেল K = ১ (৫১.২ µs অপেক্ষা)। দুজনে একই K পেলে (সম্ভাবনা ১/২) আবার collision হতো, তখন n = ২ আর K বাছাই {০, ১, ২, ৩} থেকে।
  7. t ≈ ৩২.৮ µs — A আবার পাঠাল। B-এর jam-এর শেষ bit A-তে পৌঁছায় ১৩.২ + ১০ = ২৩.২ µs-এ; তারপর ৯.৬ µs-এর interframe gap. B-এর ৫১.২ µs অপেক্ষা শেষ হয় ১৩.২ + ৫১.২ = ৬৪.৪ µs-এ — ততক্ষণে A-এর নতুন সংকেত (৩২.৮ + ১০ = ৪২.৮ µs-এ) B-তে পৌঁছে গেছে। B তার ব্যস্ত শুনে অপেক্ষা করে, A-এর frame শেষ হলে পাঠায়। দুজনেরই frame শেষে সফল।

Binary exponential backoff — কেন “দ্বিগুণ”?

Collision হলে প্রত্যেকে জানে না আরও কতজন অপেক্ষায় আছে। দুজন হলে {০, ১} থেকে বাছাই যথেষ্ট — অর্ধেক সম্ভাবনায় আলাদা হয়ে যায়। বিশজন হলে {০, ১}-এ প্রায় নিশ্চিত আবার collision. পরিসর প্রতি collision-এ দ্বিগুণ করার যুক্তি: “বারবার ধাক্কা খাচ্ছি, নিশ্চয় অনেকে আছে।” কয়েকটি collision-এর মধ্যেই পরিসর প্রতিযোগীর সংখ্যার কাছাকাছি পৌঁছায়, আর load নিজে থেকে কমে — অংশ ৪-এর অস্থিরতার ওষুধ। ১০টি collision-এর পর পরিসর ০–১০২৩-এ আটকে থাকে, যাতে অপেক্ষা অসীম না হয়।

নিচের simulator তিনটি station (A, B, C) নিয়ে চলে; প্রত্যেকের একটি করে frame, সবাই slot ০-তে প্রস্তুত — তাই প্রথম slot-এ নিশ্চিত collision. সরল করার জন্য সময় slot-এ মাপা, আর carrier sense-এর বিস্তারিত বাদ: একটি slot-এ ঠিক একজন পাঠালে সফল, একাধিক হলে collision.

// Binary exponential backoff (classic Ethernet): 3 stations, one frame each,
// all ready at slot 0. After the n-th collision a station picks K in 0..2^min(n,10)-1
// and tries again K slots later. Slot = 51.2 us at 10 Mbps. Fixed seed.
function rng(seed) {                         // mulberry32
  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 rand = rng(7);
const st = ["A", "B", "C"].map(name => ({ name, n: 0, next: 0, done: false }));
for (let slot = 0; st.some(s => !s.done) && slot < 100; slot++) {
  const tx = st.filter(s => !s.done && s.next === slot);
  if (tx.length === 0) continue;             // idle slot: print nothing
  if (tx.length === 1) {
    tx[0].done = true;
    console.log(`slot ${slot}: ${tx[0].name} sends alone -> SUCCESS ` +
      `(after ${tx[0].n} collision(s), t = ${(slot * 51.2).toFixed(1)} us)`);
    continue;
  }
  const picks = tx.map(s => {
    s.n++;                                   // n-th collision for this station
    const range = 2 ** Math.min(s.n, 10);    // K in 0..range-1
    const K = Math.floor(rand() * range);
    s.next = slot + 1 + K;                   // wait K whole slots, then retry
    return `${s.name}: n=${s.n} K=${K} of 0..${range - 1} -> slot ${s.next}`;
  });
  console.log(`slot ${slot}: ${tx.map(s => s.name).join("+")} COLLIDE | ` + picks.join(", "));
}

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

slot 0: A+B+C COLLIDE | A: n=1 K=0 of 0..1 -> slot 1, B: n=1 K=0 of 0..1 -> slot 1, C: n=1 K=1 of 0..1 -> slot 2
slot 1: A+B COLLIDE | A: n=2 K=2 of 0..3 -> slot 4, B: n=2 K=2 of 0..3 -> slot 4
slot 2: C sends alone -> SUCCESS (after 1 collision(s), t = 102.4 us)
slot 4: A+B COLLIDE | A: n=3 K=3 of 0..7 -> slot 8, B: n=3 K=3 of 0..7 -> slot 8
slot 8: A+B COLLIDE | A: n=4 K=3 of 0..15 -> slot 12, B: n=4 K=8 of 0..15 -> slot 17
slot 12: A sends alone -> SUCCESS (after 4 collision(s), t = 614.4 us)
slot 17: B sends alone -> SUCCESS (after 4 collision(s), t = 870.4 us)

ধাপে ধাপে পড়া: slot ০-তে তিনজনই পাঠাল — collision. প্রথম collision-এ পরিসর ০..১: A আর B দুজনেই K = ০ পেল, C পেল ১. তাই slot ১-এ A আর B আবার ধাক্কা খেল; C-এর slot ২ ফাঁকা পেয়ে সফল (১০২.৪ µs-এ)। A আর B-এর দুর্ভাগ্য চলল: দ্বিতীয় collision-এ দুজনেই ০..৩ থেকে K = ২, তৃতীয়তে ০..৭ থেকে দুজনেই K = ৩ — বিরল কিন্তু সম্ভব (৮ ভাগের ১ ভাগ)। চতুর্থ collision-এ পরিসর ০..১৫, এবার K আলাদা (৩ আর ৮), তাই A slot ১২-তে আর B slot ১৭-তে একা পাঠিয়ে সফল। পরিসর বাড়লে অপেক্ষাও বাড়ে — নিরাপত্তার দাম দেরি।

৭ · Minimum frame size আর efficiency — খাতায় যেভাবে লিখবেন

কেন frame-কে অন্তত একটি round trip লম্বা হতে হবে

অংশ ৬-এর stepper-এ A collision-এর খবর পেয়েছে ১৮ µs-এ। কিন্তু A-এর frame যদি এর আগেই শেষ হয়ে যেত? তাহলে A পাঠানো শেষ করে ভাবত “সফল”, শোনা বন্ধ করত — অথচ frame পথে নষ্ট হয়েছে। CSMA/CD-র ভিত্তিই হলো: প্রেরককে frame শেষ করার আগেই collision জানতে হবে।

সবচেয়ে খারাপ অবস্থা ভাবুন। A আর B তারের দুই প্রান্তে, দূরত্বের propagation delay Tprop. A শুরু করল t = ০-তে। A-এর সংকেত B-তে পৌঁছানোর ঠিক আগমুহূর্তে (t = Tprop − ε) B শুরু করল। Collision B-এর কাছেই, আর B-এর সংকেত A-তে ফিরে আসতে আরও Tprop. অর্থাৎ A collision জানে প্রায় ২·Tprop সময়ে। তাই A-কে অন্তত ততক্ষণ পাঠাতে থাকতে হবে:

Tframe = Lmin/R ≥ ২ · Tprop  ⇒  Lmin ≥ ২ · R · Tprop

১০ Mbps Ethernet-এর ৬৪ byte — হিসাব

  • শুধু তারের হিসাব: ক্লাসিক ১০ Mbps Ethernet-এ দুই প্রান্তের সর্বোচ্চ দূরত্ব প্রায় ২,৫০০ m (repeater দিয়ে জোড়া কয়েকটি segment মিলিয়ে)। Tprop = ২,৫০০ ÷ (২ × ১০৮) = ১২.৫ µs, ২Tprop = ২৫ µs, তাই Lmin = ১০৭ × ২৫ × ১০−৬ = ২৫০ bit ≈ ৩১.২৫ byte.
  • বাস্তব বাজেট: কিন্তু পথে repeater, transceiver আর অন্য electronics-এর নিজের delay আছে, আর jam পাঠানোর সময়ও ধরতে হয়। IEEE 802.3 এসব মিলিয়ে সবচেয়ে খারাপ round trip-এর বাজেট ধরেছে ৫১২ bit-সময় = ৫১.২ µs — এটাই slot time. (অনেক পাঠ্যবই একে সরাসরি লেখে: ২Tp = ৫১.২ µs, অর্থাৎ যন্ত্রের delay সহ Tp = ২৫.৬ µs.)
  • উত্তর: Lmin = ১০৭ bit/s × ৫১.২ × ১০−৬ s = ৫১২ bit = ৬৪ byte. এজন্যই Ethernet frame (destination ঠিকানা থেকে FCS পর্যন্ত) কমপক্ষে ৬৪ byte; ডেটা কম হলে padding দিয়ে ভরানো হয় (frame-এর গঠন পর্ব ১২-এ)।

Efficiency — ১/(১ + ৫a)

CSMA/CD কতটা দক্ষ? ধরা যাক a = Tprop/Ttrans, যেখানে Tprop দুই দূরতম station-এর মধ্যে propagation delay আর Ttrans একটি সর্বোচ্চ-আকারের frame পাঠানোর সময়। অনেক station সবসময় পাঠাতে চাইলে দীর্ঘমেয়াদে চ্যানেলের যে ভাগ সফল frame-এ যায়, তার একটি প্রচলিত আসন্ন সূত্র (Kurose ও Ross-এর পাঠ্যবইয়ে দেওয়া, যার উৎস এর চেয়ে জটিল একটি বিশ্লেষণ):

efficiency ≈ ১ / (১ + ৫a)

এটি সঠিক মান নয়, মডেলের অনুমানে নির্ভর একটি সহজ নিয়ম — পরীক্ষায় লিখলে “আসন্ন” কথাটি লিখে দেবেন। সূত্রের বার্তা পরিষ্কার: a → ০ হলে (তার ছোট বা frame বড়) efficiency → ১; a বড় হলে efficiency ভেঙে পড়ে। নিচের calculator minimum frame আর efficiency দুটোই হিসাব করে।

// CSMA/CD rules of thumb: minimum frame (T_frame >= 2 x T_prop) and efficiency 1/(1+5a).
const s = 2e8;                               // signal speed in the cable, m/s
function minFrame(label, R, roundTrip_s) {
  const bits = R * roundTrip_s;              // bits sent while the round trip happens
  console.log(`${label.padEnd(34)} 2Tp = ${(roundTrip_s * 1e6).toFixed(2).padStart(6)} us` +
    ` -> min ${bits.toFixed(0).padStart(4)} bits = ${(bits / 8).toFixed(2)} bytes`);
}
minFrame("10 Mbps, 2500 m cable only", 10e6, 2 * 2500 / s);
minFrame("10 Mbps, IEEE round-trip budget", 10e6, 51.2e-6);
minFrame("100 Mbps, same 512-bit slot", 100e6, 5.12e-6);
console.log("100 Mbps: 5.12 us round trip covers at most " + (5.12e-6 / 2 * s).toFixed(0) +
  " m of cable (before any hub/repeater delay)");
console.log("");
console.log("efficiency = 1/(1+5a), a = Tprop/Ttrans");
function eff(label, R, d, frameBytes) {
  const tprop = d / s, ttrans = frameBytes * 8 / R, a = tprop / ttrans;
  console.log(`${label.padEnd(26)} a = ${a.toFixed(4).padStart(7)}  efficiency = ` +
    `${(100 / (1 + 5 * a)).toFixed(1)}%`);
}
eff("10 Mbps, 2500 m, 64 B", 10e6, 2500, 64);
eff("10 Mbps, 2500 m, 1518 B", 10e6, 2500, 1518);
eff("1 Gbps, 2500 m, 64 B", 1e9, 2500, 64);
eff("1 Gbps, 200 m, 1518 B", 1e9, 200, 1518);

আউটপুট:

10 Mbps, 2500 m cable only         2Tp =  25.00 us -> min  250 bits = 31.25 bytes
10 Mbps, IEEE round-trip budget    2Tp =  51.20 us -> min  512 bits = 64.00 bytes
100 Mbps, same 512-bit slot        2Tp =   5.12 us -> min  512 bits = 64.00 bytes
100 Mbps: 5.12 us round trip covers at most 512 m of cable (before any hub/repeater delay)

efficiency = 1/(1+5a), a = Tprop/Ttrans
10 Mbps, 2500 m, 64 B      a =  0.2441  efficiency = 45.0%
10 Mbps, 2500 m, 1518 B    a =  0.0103  efficiency = 95.1%
1 Gbps, 2500 m, 64 B       a = 24.4141  efficiency = 0.8%
1 Gbps, 200 m, 1518 B      a =  0.0823  efficiency = 70.8%

প্রথম অংশ: শুধু তারের হিসাবে ২৫০ bit (৩১.২৫ byte) যথেষ্ট হতো; যন্ত্রের delay মিলিয়ে IEEE-র ৫১.২ µs বাজেট থেকে আসে ৫১২ bit = ৬৪ byte. ১০০ Mbps Fast Ethernet একই ৬৪ byte-এর frame রেখেছে — তাই একই ৫১২ bit পাঠাতে এখন লাগে মাত্র ৫.১২ µs, আর round trip-এর বাজেটও দশ ভাগের এক ভাগ। শুধু তারের হিসাবে তা সর্বোচ্চ ৫১২ m, কিন্তু hub/repeater-এর delay বাদ দিলে half-duplex Fast Ethernet-এর বাস্তব সর্বোচ্চ ব্যাস প্রায় ২০০ m-এর কাছাকাছি নামে। নিয়ম: rate দশ গুণ হলে, frame-এর আকার না বদলালে, নেটওয়ার্কের ব্যাস প্রায় দশ ভাগের এক ভাগ।

দ্বিতীয় অংশ: ১০ Mbps-এ ২,৫০০ m-এ ছোট ৬৪ byte frame হলে a ≈ ০.২৪, efficiency মাত্র ৪৫%; বড় ১,৫১৮ byte frame-এ a ≈ ০.০১, efficiency ৯৫.১%. একই ২,৫০০ m-এ ১ Gbps-এ ৬৪ byte frame-এ a ≈ ২৪.৪ — efficiency ০.৮%, কার্যত অচল। ২০০ m-এ বড় frame নিলেও ৭০.৮%. এজন্যই gigabit-এর half-duplex রূপে (যা বাস্তবে প্রায় ব্যবহারই হয়নি) slot time বাড়িয়ে ৫১২ byte করা হয়েছিল (carrier extension) — আর এজন্যই বাস্তবের gigabit আর তার চেয়ে দ্রুত Ethernet full-duplex switch-এ চলে।

আজকের Ethernet-এ CSMA/CD কেন নেই

আজ অফিস বা বাসার প্রায় প্রতিটি Ethernet তার একটি কম্পিউটারকে সরাসরি একটি switch-এর port-এ জোড়ে। আধুনিক twisted-pair তারে পাঠানো আর গ্রহণের জন্য আলাদা জোড়া তার (বা gigabit-এ echo cancellation-এর মতো কৌশল) থাকে, আর switch-এর প্রতিটি port নিজেই একটি আলাদা collision domain. দুই প্রান্তের মাঝে আর কেউ নেই, আর দুজন একসাথে দুই দিকে পাঠাতে পারে — full-duplex. Collision-ই যখন হয় না, তখন carrier sense বা collision detection-এর দরকারই নেই। Full-duplex মোডে NIC CSMA/CD বন্ধ রাখে। ১০ Gbps আর তার চেয়ে দ্রুত Ethernet-এর standard-এ half-duplex মোডই রাখা হয়নি। তবু ৬৪ byte-এর নিয়ম আজও রয়ে গেছে, আর বেতারে এর আত্মীয় CSMA/CA প্রতিদিন কাজ করে। Switch কীভাবে frame পাঠায়, তা পর্ব ১২-এ।

৮ · বেতারে কেন আলাদা — CSMA/CA, hidden আর exposed terminal

Wi-Fi-ও ভাগ করা মাধ্যম, তবু CSMA/CD নয় — দুটি কারণে:

  1. নিজের চিৎকারে অন্যের ফিসফিস শোনা যায় না। বেতারে প্রেরকের নিজের antenna-র সংকেত অনেক দূর থেকে আসা অন্যের সংকেতের চেয়ে বহু গুণ জোরালো — দূরত্বের সাথে সংকেতের শক্তি দ্রুত কমে। সাধারণ Wi-Fi radio এক সময়ে হয় পাঠায়, নয় শোনে।
  2. Collision ঘটে প্রাপকের কাছে, প্রেরকের কাছে নয়। প্রেরক নিজের জায়গায় collision শুনতে পেলেও তাতে লাভ নেই, যদি প্রাপকের কাছে অন্য কারও সংকেত এসে মেশে — যেটা প্রেরক শুনতেই পায় না। এটাই বিখ্যাত hidden terminal problem.

তাই বেতারের দর্শন উল্টো: collision ধরা যায় না, তাই যতটা সম্ভব এড়ানো — CSMA/CA (Collision Avoidance). মূল ধারণাগুলো সংক্ষেপে (Wi-Fi-এর আসল সময়, সংখ্যা আর frame-এর বিস্তারিত পর্ব ১৪-এ):

  • অপেক্ষার ফাঁক (IFS): পাঠানোর আগে চ্যানেলকে একটি নির্দিষ্ট সময় খালি দেখতে হয়। জরুরি উত্তরের (যেমন ACK) জন্য ফাঁক ছোট (SIFS), নতুন frame-এর জন্য বড় (DIFS) — ফলে ACK সবসময় আগে জায়গা পায়।
  • আগেভাগে এলোমেলো backoff: চ্যানেল ব্যস্ত পেলে খালি হওয়ামাত্র লাফ দেওয়া নয় (1-persistent-এর বিপদ মনে করুন); একটি এলোমেলো সংখ্যক slot গোনা হয়, আর গোনার মাঝে চ্যানেল ব্যস্ত হলে গোনা থামিয়ে রাখা হয়, খালি হলে আবার চালু। শূন্যে পৌঁছালে পাঠানো। ব্যর্থ হলে পরের বার পরিসর বড় — Ethernet-এর মতোই exponential.
  • প্রতিটি frame-এর ACK: collision ধরতে পারে না বলে প্রাপক প্রতিটি সফল frame-এর পর ACK পাঠায়; ACK না এলে প্রেরক ধরে নেয় হারিয়েছে, আবার পাঠায় — ALOHA-র পুরোনো বুদ্ধি।
  • RTS/CTS (ঐচ্ছিক): বড় frame-এর আগে চ্যানেল “বুক” করা, যাতে hidden terminal চুপ থাকে — নিচের stepper-এ।
  1. Aল্যাপটপAP-কে শোনে
  2. APaccess pointদুজনকেই শোনে
  3. CফোনA-কে শোনে না
কে কী করছে
A
AP
C
  1. A শুনল, চ্যানেল খালি — DATA পাঠানো শুরু। A আর C দুজনেই access point (AP)-এর সীমার ভেতরে, কিন্তু একে অপরের থেকে দূরে, মাঝে হয়তো কংক্রিটের দেয়াল। A-এর সংকেত C পর্যন্ত পৌঁছায় না।
  2. C-ও শুনল — তার কাছে চ্যানেল নীরব! C পাঠাল। Carrier sense ঠিকই কাজ করেছে, কিন্তু ভুল জায়গায়: C শুনছে নিজের চারপাশ, অথচ গুরুত্বপূর্ণ হলো AP-এর চারপাশ। AP-তে A আর C-এর সংকেত মিশে দুটো frame-ই নষ্ট।
  3. কেউ টের পায় না — শুধু ACK আসে না। A আর C দুজনেই পুরো frame পাঠিয়ে শেষ করে (collision detection নেই), তারপর ACK-এর অপেক্ষা। ACK না এলে দুজনেই backoff করে আবার পাঠায়। বড় frame হলে অনেকটা সময় নষ্ট — আর C বারবার এমন করলে A-এর গতি খুব কমে যায়।
  4. সমাধান: A আগে একটি ছোট RTS (Request to Send) পাঠায়। RTS-এ লেখা থাকে A কতক্ষণ চ্যানেল চায় (duration). RTS ছোট, তাই collision হলেও ক্ষতি সামান্য। C এখনো RTS শুনতে পায় না — সমস্যা নেই।
  5. AP উত্তর দেয় CTS (Clear to Send) — এবার সবাই শোনে। AP সবার মাঝখানে, তাই CTS যায় A আর C দুজনের কাছেই। CTS-এর duration পড়ে C একটি টাইমার (NAV) চালু করে আর ততক্ষণ চুপ থাকে — চ্যানেল না শুনেও জানে যে চ্যানেল ব্যস্ত। এর নাম virtual carrier sense.
  6. A নির্বিঘ্নে DATA পাঠায়, AP ACK দেয়। NAV শেষ হলে C আবার প্রতিযোগিতায় ফেরে। দাম: প্রতি frame-এ বাড়তি দুটি ছোট frame আর অপেক্ষার ফাঁক। তাই অনেক যন্ত্রে RTS/CTS শুধু একটি নির্দিষ্ট আকারের (RTS threshold) চেয়ে বড় frame-এর জন্য চালু থাকে, বা ডিফল্টে বন্ধ — খুঁটিনাটি পর্ব ১৪-এ।

Exposed terminal — উল্টো সমস্যা

এবার চারটি যন্ত্র ভাবুন এক সারিতে: P ← B C → Q. B পাঠাচ্ছে বাঁ দিকের P-কে, আর C পাঠাতে চায় ডান দিকের Q-কে। B আর C কাছাকাছি, একে অপরকে শোনে; কিন্তু P অনেক দূরে বাঁয়ে, Q অনেক দূরে ডানে। C পাঠালে P-এর কাছে কোনো ক্ষতি হতো না (C-এর সংকেত P পর্যন্ত যায় না), আর Q-ও B-এর সংকেত পায় না। তবু C carrier sense করে B-এর সংকেত শোনে আর অকারণে চুপ থাকে। একে বলে exposed terminal problem — collision নয়, হারানো সুযোগ। সাধারণ CSMA/CA এটি পুরোপুরি সমাধান করে না; বরং নিরাপদ দিকে থাকে — অকারণে কিছুটা চুপ থাকা collision-এর চেয়ে ভালো।

৯ · পালা করে কথা — polling, token passing, DOCSIS আর মোবাইল

Polling — ক্যাপ্টেন ডাকেন

একটি নিয়ন্ত্রক (master) পালা করে প্রতিটি যন্ত্রকে জিজ্ঞেস করে: “পাঠানোর কিছু আছে?” যে যন্ত্রকে ডাকা হয়, সে নির্দিষ্ট পরিমাণ পর্যন্ত পাঠায়, তারপর পরের জনের পালা। Collision নেই, অলস slot নেই। কিন্তু দুটি দাম: (১) প্রতিটি ডাকের খরচ (polling delay) — একজনই পাঠাতে চাইলেও সবাইকে ডাকতে হয়; (২) নিয়ন্ত্রক বিকল হলে পুরো নেটওয়ার্ক বন্ধ। উদাহরণ: ক্লাসিক Bluetooth-এর piconet-এ central যন্ত্র পালা করে অন্যদের সুযোগ দেয়।

Token passing — হাতে হাতে চক

কোনো নিয়ন্ত্রক নেই। একটি ছোট বিশেষ frame — token — যন্ত্র থেকে যন্ত্রে নির্দিষ্ট ক্রমে ঘোরে। যার কাছে token, শুধু সে পাঠাতে পারে (নির্দিষ্ট সর্বোচ্চ সময় পর্যন্ত), তারপর token পরের জনকে দেয়। এতে collision নেই, আর সর্বোচ্চ কতক্ষণ পরে পালা আসবে তা নিশ্চিত — নির্ধারিত (deterministic) delay. দুর্বলতা: token হারালে বা বলয় ভাঙলে তা সামলানোর জটিল নিয়ম লাগে।

  • IBM Token Ring (IEEE 802.5): ১৯৮০-এর দশকে অফিস LAN-এ Ethernet-এর প্রধান প্রতিদ্বন্দ্বী, ৪ আর পরে ১৬ Mbps. যন্ত্রগুলো যুক্ত থাকত একটি তারকা-আকৃতির hub-এর মতো যন্ত্রে (MAU), কিন্তু token ঘুরত যৌক্তিক বলয়ে।
  • FDDI: ১০০ Mbps-এর fiber-ভিত্তিক token passing, দুটি উল্টো দিকে ঘোরা বলয় — একটি বলয় কাটা পড়লে অন্যটি দিয়ে চলে। ১৯৯০-এর দশকে বিশ্ববিদ্যালয় ক্যাম্পাস আর বড় প্রতিষ্ঠানের backbone-এ ব্যবহৃত হতো।

দুটিই আজ প্রায় বিলুপ্ত — সস্তা, সরল, দ্রুত বেড়ে চলা switched Ethernet-এর কাছে হেরে গেছে (ভাবনার প্রশ্ন ৪)।

আধুনিক মিশ্র রূপ — DOCSIS আর মোবাইল নেটওয়ার্ক

বাস্তবের বড় নেটওয়ার্ক প্রায়ই পরিবারগুলো মিশিয়ে ব্যবহার করে:

  • কেবল ইন্টারনেট (DOCSIS): কেবল টিভির coaxial তারে অনেক বাড়ির modem একটি upstream চ্যানেল ভাগ করে। কেন্দ্রের যন্ত্র (CMTS) নিয়মিত একটি “map” পাঠায় — কোন ছোট slot (mini-slot) কার জন্য বরাদ্দ। কিছু mini-slot প্রতিযোগিতার জন্য: সেখানে modem ছোট request পাঠায় (random access, collision হলে backoff), আর CMTS তার জন্য collision-মুক্ত slot বরাদ্দ করে। ছোট request-এ এলোমেলো প্রতিযোগিতা, বড় ডেটায় নির্ধারিত বরাদ্দ — দুই জগতের ভালোটা।
  • মোবাইল নেটওয়ার্ক (4G/5G): টাওয়ারের base station একটি কেন্দ্রীয় scheduler চালায় — প্রতি মিলিসেকেন্ডের মতো ছোট সময়ে ঠিক করে কোন ফোন কোন frequency-অংশে (resource block) পাঠাবে বা পাবে। কিন্তু ফোন প্রথমবার যোগাযোগ শুরু করতে যে “random access” প্রক্রিয়া চালায়, সেখানে অনেক ফোন একই সুযোগে ছোট সংকেত পাঠিয়ে প্রতিযোগিতা করে — slotted ALOHA-র মতো ধারণা, collision হলে আবার চেষ্টা (পর্ব ৫১)।

আরও গভীরে: Linux-এ একটি Ethernet interface কোন গতি আর duplex-এ চলছে, তা দেখা যায় ethtool eth0 কমান্ডে বা /sys/class/net/eth0/duplex আর speed ফাইলে (interface-এর নাম যন্ত্রভেদে আলাদা)। Link-এর এক প্রান্ত full-duplex আর অন্য প্রান্ত half-duplex-এ থাকলে (duplex mismatch, সাধারণত auto-negotiation এক দিকে বন্ধ রাখার ফলে) half-duplex প্রান্ত অন্যের পাঠানোকে collision ভাবে, আর frame-এর ৬৪ byte পেরোনোর পর আসা “late collision” আর CRC error-এর সংখ্যা বাড়তে থাকে; ping ঠিক চললেও বড় ফাইল কপি অস্বাভাবিক ধীর হয়। আর আধুনিক Wi-Fi 6 (802.11ax) OFDMA দিয়ে AP-কে মোবাইলের মতো কেন্দ্রীয় scheduler বানানোর দিকে এগোচ্ছে।

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

  • Pure আর slotted ALOHA-র সর্বোচ্চ throughput কত, কেন আলাদা? — ১/(২e) ≈ ১৮.৪% (G = ০.৫) আর ১/e ≈ ৩৬.৮% (G = ১); vulnerable period ২T বনাম T.
  • CSMA/CD-তে minimum frame size কীভাবে বের করবেন? — Tframe ≥ ২Tprop, অর্থাৎ Lmin = ২·R·Tprop; ১০ Mbps আর ৫১.২ µs slot-এ ৫১২ bit = ৬৪ byte.
  • Binary exponential backoff কী? — n-তম collision-এর পর K ∈ {০, …, ২min(n,১০) − ১}, অপেক্ষা K × slot time; ১৬ বার ব্যর্থ হলে বাতিল।
  • Wi-Fi কেন CSMA/CD ব্যবহার করে না? — পাঠানোর সময় দুর্বল সংকেত শোনা যায় না, আর hidden terminal-এর কারণে collision প্রাপকের কাছে হয়; তাই CSMA/CA, ACK আর RTS/CTS.
  • আধুনিক switched Ethernet-এ CSMA/CD লাগে কি? — না; প্রতিটি port আলাদা collision domain আর full-duplex, তাই collision হয় না।

১০ · AI-এর যুগে MAC protocol-এর অঙ্ক আর ব্যাখ্যা

AI-এর কাছে ALOHA-র প্রমাণ চাইলে সাধারণত সুন্দর উত্তর আসে। কিন্তু এই বিষয়ে AI-এর ভুলগুলো খুব নির্দিষ্ট ধরনের, আর আত্মবিশ্বাসী ভাষার নিচে চাপা পড়ে।

AI-এর ভুলকেন ভুলকীভাবে ধরবেন
Pure ALOHA-র vulnerable period T লেখা, বা e−২G আর e−G উল্টে ফেলাPure-এ ২T, slotted-এ Tঅংশ ৩-এর stepper-এর মতো দুটি frame এঁকে দেখুন
“Slotted ALOHA-র সর্বোচ্চ G = ০.৫-এ”সর্বোচ্চ G = ১-এ; ০.৫ pure-এরঅবকলন নিজে করুন, বা টেবিলের কোডটি চালান
Backoff-এ K-এর পরিসর ০..২n লেখা (− ১ বাদ), বা ১০-এর সীমা ভুলে যাওয়াK ∈ {০, …, ২min(n,১০) − ১}IEEE 802.3-এর বর্ণনা বা নির্ভরযোগ্য পাঠ্যবই দেখুন
Minimum frame-এ ২Tprop-এর বদলে Tprop, বা byte আর bit গুলিয়ে ফেলাউত্তর অর্ধেক বা ৮ গুণ ভুলএককসহ প্রতিটি ধাপ লিখতে বলুন
“Wi-Fi CSMA/CD ব্যবহার করে” বা “আধুনিক Ethernet-এ এখনো collision হয়”Wi-Fi-তে CSMA/CA; switched full-duplex-এ collision নেইStandard-এর নাম আর মোড (half/full-duplex) জিজ্ঞেস করুন
একটি সূত্রকে সার্বজনীন বলে চালানো (যেমন ১/(১ + ৫a)-কে নিখুঁত মান)এটি আসন্ন, মডেল-নির্ভরসূত্রটি কোন বই বা অনুমান থেকে, জিজ্ঞেস করুন
বানানো ইতিহাস, তারিখ বা RFC/IEEE নম্বরভাষার মডেল বিশ্বাসযোগ্য নম্বর বানাতে পারেমূল উৎস (IEEE, rfc-editor.org, মূল প্রবন্ধ) মিলিয়ে নিন

AI-কে MAC protocol-এর অঙ্ক বা প্রমাণ দিলে শর্তসহ দিন:

একটি CSMA/CD নেটওয়ার্কের প্রশ্ন ধাপে ধাপে সমাধান করো। নেটওয়ার্ক: 1 Gbps, দুই প্রান্তের দূরত্ব 1 km, তারে সংকেতের গতি 2 × 10^8 m/s, যন্ত্রের delay শূন্য ধরো। ১. T_prop বের করো, একক সহ। ২. Collision ধরার শর্ত T_frame ≥ 2·T_prop কেন লাগে, দুই-তিন লাইনে যুক্তি দাও। ৩. Minimum frame size bit আর byte দুই এককেই দাও। ৪. প্রথম, দ্বিতীয় আর একাদশতম collision-এর পর backoff-এ K কোন পরিসর থেকে বাছা হয় লেখো। ৫. কোনো সংখ্যা বা standard-এর তথ্য নিশ্চিত না হলে স্পষ্ট বলো; নিজে থেকে বানাবে না।

AI-এর উত্তর মানার আগে — চেকলিস্ট

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

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

প্র ০১চ্যানেলের মাত্র ১৮% কাজে লাগানো ALOHA কীভাবে পৃথিবীর সবচেয়ে সফল LAN প্রযুক্তি Ethernet-এর জন্ম দিল?

ALOHA-র সংখ্যাগুলো প্রথম দেখায় হতাশাজনক — চ্যানেলের পাঁচ ভাগের চার ভাগের বেশি নষ্ট। কিন্তু হাওয়াইয়ের প্রকৌশলীদের তুলনা ছিল বিকল্পের সাথে: প্রতিটি terminal-কে নিজস্ব frequency দিলে (FDMA) সেই frequency-র বেশিরভাগ সময় অলস থাকত, কারণ terminal-এর ব্যবহারকারী বেশিরভাগ সময় ভাবেন, টাইপ করেন, অপেক্ষা করেন। Bursty ট্রাফিকে ১৮% ভাগ করা চ্যানেল প্রায়ই অনেক ছোট ছোট নির্দিষ্ট চ্যানেলের চেয়ে ভালো, কারণ যে পাঠাতে চায় সে মুহূর্তে পুরো হার পায়। তার ওপর নিয়মটি এত সরল যে কোনো কেন্দ্রীয় সমন্বয় লাগে না — নতুন terminal যোগ করতে কাউকে জানাতে হয় না।

১৯৭০-এর দশকের শুরুতে Xerox PARC-এ Bob Metcalfe একটি ভবনের কম্পিউটারগুলো জোড়ার কাজ পান। তিনি ALOHA-র বিশ্লেষণ পড়েছিলেন, আর তাঁর পর্যবেক্ষণ ছিল: বাতাসের বদলে একটি coaxial তার ব্যবহার করলে দুটি সুবিধা পাওয়া যায় যা বেতারে ছিল না। এক, তারের সবাই সবাইকে শুনতে পায় — তাই পাঠানোর আগে শোনা (carrier sense) কার্যকর; দুই, পাঠানোর সময়ও শোনা যায় — তাই collision ধরেই থামা যায়। সাথে যোগ হয় অভিযোজিত backoff, যা ALOHA-র অস্থিরতা নিয়ন্ত্রণ করে। ১৯৭৩ সালে লেখা একটি memo-কে প্রায়ই Ethernet-এর জন্ম ধরা হয়; ১৯৭৬ সালে David Boggs-এর সাথে প্রকাশিত প্রবন্ধে নকশাটি বর্ণিত। পরে DEC, Intel আর Xerox মিলে একটি উন্মুক্ত standard বানায়, যা থেকে IEEE 802.3 আসে।

ফলাফল নাটকীয়: অংশ ৭-এর হিসাবে বড় frame আর ছোট a-তে CSMA/CD-র efficiency ৯০%-এর বেশি — ALOHA-র ১৮% থেকে বিশাল লাফ। আর সময়ের সাথে Ethernet নিজেই বদলেছে — shared coaxial থেকে hub, তারপর switch আর full-duplex, যেখানে মূল CSMA/CD আর লাগেই না। কিন্তু নাম, frame-এর গঠন আর সরলতার দর্শন রয়ে গেছে। Metcalfe পরে Ethernet-এর জন্য কম্পিউটার বিজ্ঞানের সর্বোচ্চ সম্মান ACM Turing Award পান (২০২২ সালের পুরস্কার)।

মূল উপলব্ধি: একটি protocol-এর মূল্য শুধু তার সর্বোচ্চ efficiency-তে নয়, বরং সরলতা, বিকেন্দ্রীকরণ আর ট্রাফিকের ধরনের সাথে মানানসই হওয়াতে। ALOHA দেখিয়েছে “এলোমেলো প্রতিযোগিতা কাজ করে”; Ethernet মাধ্যমের সুবিধা কাজে লাগিয়ে সেই ধারণাকে দক্ষ বানিয়েছে।

প্র ০২Ethernet-এর গতি ১০ Mbps থেকে ১০০ Mbps আর ১ Gbps হলো, কিন্তু minimum frame ৬৪ byte-ই থাকল। CSMA/CD-র জন্য এর ফল কী হয়েছিল, আর শেষ পর্যন্ত সমাধান কী?

শর্তটি মনে করুন: Lmin/R ≥ ২Tprop. Rate R দশ গুণ হলে দুটি পথ খোলা: Lmin দশ গুণ বাড়ানো, অথবা Tprop, অর্থাৎ নেটওয়ার্কের দৈর্ঘ্য, দশ ভাগের এক ভাগে নামানো। Fast Ethernet (১০০ Mbps) দ্বিতীয় পথ নেয়। পুরোনো সফটওয়্যার আর যন্ত্রের সাথে মিল রাখতে frame-এর গঠন আর ৬৪ byte-এর নিয়ম অপরিবর্তিত রাখা হয়, ফলে half-duplex hub-ভিত্তিক Fast Ethernet-এর সর্বোচ্চ ব্যাস কয়েকশো মিটারে নামে (repeater-এর ধরনভেদে প্রায় ২০০ m-এর কাছাকাছি)। একটি ভবনের ভেতরে এটি সাধারণত যথেষ্ট ছিল।

Gigabit-এ একই কৌশলে ব্যাস নামত প্রায় ২০ m-এ — অফিসে প্রায় অচল। তাই half-duplex gigabit-এর standard “carrier extension” আনে: ছোট frame-এর শেষে বিশেষ সংকেত জুড়ে দিয়ে তারে উপস্থিতির সময় অন্তত ৫১২ byte-এর সমান করা। এতে ব্যাস রক্ষা হয়, কিন্তু ছোট frame-এ বিশাল অপচয় — ৬৪ byte-এর কাজের জন্য ৫১২ byte-এর সময়। ক্ষতি কমাতে “frame bursting” যোগ হয়, যাতে একবার চ্যানেল পেলে কয়েকটি frame পরপর পাঠানো যায়। অংশ ৭-এর calculator-এ দেখেছেন, gigabit-এ ছোট frame আর দীর্ঘ দূরত্বে ১/(১ + ৫a) কতটা ভেঙে পড়ে।

আসল সমাধান অবশ্য এল অন্য দিক থেকে: switch-এর দাম দ্রুত কমে গেল। প্রতিটি কম্পিউটার নিজের switch port-এ full-duplex-এ যুক্ত হলে collision থাকে না, তাই Tprop-এর শর্তও অপ্রাসঙ্গিক — তারের দৈর্ঘ্য তখন শুধু সংকেতের দুর্বলতা আর physical layer দিয়ে সীমিত, যেমন twisted-pair-এ প্রায় ১০০ m, fiber-এ কিলোমিটার। বাস্তবের gigabit Ethernet প্রায় সবসময় full-duplex switch-এ চলেছে, half-duplex gigabit যন্ত্র খুব কমই বিক্রি হয়েছে। ১০ Gbps-এর standard তো half-duplex মোড রাখেইনি। তবু ৬৪ byte-এর minimum frame আজও আছে — ইতিহাসের একটি জীবন্ত চিহ্ন, আর Ethernet-এর পশ্চাৎ-সামঞ্জস্যের দর্শনের প্রমাণ।

মূল উপলব্ধি: CSMA/CD-র শর্ত rate, frame-এর আকার আর দূরত্বকে বেঁধে রাখে — একটি বাড়ালে অন্য একটি কমাতে হয়। প্রকৌশলীরা শেষে সমস্যাটিকেই সরিয়ে দিলেন: ভাগ করা মাধ্যম বাদ দিয়ে switch আর full-duplex. কখনো কখনো একটি protocol-কে উন্নত করার চেয়ে তার প্রয়োজন দূর করাই ভালো নকশা।

প্র ০৩RTS/CTS যদি hidden terminal সমস্যার সমাধান করে, তাহলে অনেক Wi-Fi যন্ত্রে এটি ডিফল্টে বন্ধ বা শুধু বড় frame-এর জন্য চালু কেন?

প্রথমে খরচের হিসাব। RTS/CTS মানে প্রতিটি DATA frame-এর আগে দুটি বাড়তি ছোট frame, আর তাদের মাঝে অপেক্ষার ফাঁক। Wi-Fi-তে প্রতিটি frame-এর সাথে physical layer-এর একটি preamble আর header যায়, যা অনেক সময় সবচেয়ে কম, সবচেয়ে নির্ভরযোগ্য হারে পাঠানো হয় যাতে সবাই বুঝতে পারে। ফলে ছোট control frame-এর সময়-খরচ তাদের byte-সংখ্যার তুলনায় অনেক বেশি। একটি ছোট DATA frame-এর জন্য RTS + CTS-এর বাড়তি সময় হয়তো DATA-র নিজের সময়ের কাছাকাছি বা বেশি — collision এড়ানোর লাভের চেয়ে নিশ্চিত ক্ষতি বড়।

দ্বিতীয়ত, collision-এর ক্ষতি frame-এর আকারের ওপর নির্ভর করে। ছোট DATA frame collision-এ নষ্ট হলে আবার পাঠানোর খরচ কম — RTS নিজে collision-এ নষ্ট হলে যত ক্ষতি, প্রায় ততটাই। বড় frame-এ উল্টো: একটি দীর্ঘ frame নষ্ট মানে অনেক সময় নষ্ট, তাই আগে ছোট RTS দিয়ে “বুকিং” করা লাভজনক। এজন্যই যন্ত্রগুলোতে একটি “RTS threshold” থাকে — এর চেয়ে বড় frame-এর আগে RTS/CTS, ছোট হলে সরাসরি। অনেক বাড়ির router-এ ডিফল্ট threshold এত বড় যে কার্যত RTS/CTS বন্ধ থাকে।

তৃতীয়ত, বাস্তবে hidden terminal সবসময় বড় সমস্যা নয়। ছোট বাসা বা অফিসে সব যন্ত্র সাধারণত একে অপরকে কিছুটা শুনতে পায়। আর আধুনিক Wi-Fi-তে একটি গুরুত্বপূর্ণ ব্যবহার অন্য জায়গায় সরে গেছে — যখন পুরোনো আর নতুন প্রজন্মের যন্ত্র একসাথে থাকে, তখন নতুন যন্ত্র পুরোনোদের বোঝার মতো হারে একটি CTS (কখনো নিজের কাছেই পাঠানো “CTS-to-self”) দিয়ে সবাইকে চুপ রাখে, যাতে পুরোনোরা নতুন ধরনের সংকেত না বুঝে মাঝখানে ঢুকে না পড়ে। Wi-Fi-এর এসব সুরক্ষা-কৌশল পর্ব ১৪-এ আরও দেখবেন। Exposed terminal সমস্যার কথাও মনে রাখুন: RTS শুনে চুপ থাকা কিছু যন্ত্র আসলে অকারণে সুযোগ হারায়।

মূল উপলব্ধি: প্রতিটি নিয়ন্ত্রণ-ব্যবস্থার একটি নির্দিষ্ট খরচ আছে; সেটি তখনই লাভজনক, যখন যে ক্ষতি এড়ায় তা খরচের চেয়ে বড়। Threshold-এর মতো “শর্তসাপেক্ষে চালু” নকশা এই দাম-দরেরই প্রকৌশল-রূপ।

প্র ০৪Token Ring নির্ধারিত delay দিত, ভারী ভিড়েও collision ছাড়া ন্যায্য ভাগ দিত — তবু কেন Ethernet জিতল?

কাগজে-কলমে token passing অনেক দিক থেকে উৎকৃষ্ট। ভিড় যতই হোক collision নেই, তাই throughput ভেঙে পড়ে না; প্রত্যেকে জানে সর্বোচ্চ কতক্ষণে পালা আসবে, যা real-time কাজের জন্য আকর্ষণীয়। ১৯৮০-এর দশকে IBM-এর সমর্থনে Token Ring বহু ব্যাংক আর বড় প্রতিষ্ঠানে চলত, আর অনেকে মনে করতেন “গুরুতর” কাজের জন্য এটিই ঠিক পছন্দ। ১৬ Mbps-এর Token Ring অনেক দিন ১০ Mbps Ethernet-এর চেয়ে দ্রুত ছিল।

কিন্তু বাজার শুধু তত্ত্ব দেখে না। Token Ring-এর adapter আর তারের সরঞ্জাম সাধারণত বেশ দামি ছিল, আর token হারানো, বলয় ভাঙা, একটি বিশেষ “monitor” যন্ত্রের দায়িত্বের মতো জটিলতা সামলাতে বেশি জটিল hardware লাগত। Ethernet সরল, অনেক বিক্রেতা বানাত, প্রতিযোগিতায় দাম দ্রুত পড়ত। ১৯৯০-এর দশকের শুরুতে সাধারণ twisted-pair তারে Ethernet (10BASE-T) এসে ভবনের প্রচলিত তারের কাঠামোয় বসে গেল। তারপর সবচেয়ে বড় আঘাত: switched Ethernet. Switch-এ প্রতিটি port আলাদা collision domain, full-duplex — ফলে Ethernet-এর মূল দুর্বলতা, অর্থাৎ ভিড়ে collision, প্রায় অদৃশ্য হয়ে গেল, অথচ সস্তা আর সরল থাকল। ১০০ Mbps আর পরে gigabit Ethernet খুব দ্রুত আর সস্তায় এল; Token Ring-এর দ্রুত সংস্করণ সময়মতো বাজার পায়নি।

অর্থনীতিবিদেরা এর একটি নাম দেন — network effect আর ব্যাপক উৎপাদনের সুবিধা। যত বেশি মানুষ Ethernet কেনে, তত সস্তা হয়, তত বেশি মানুষ কেনে। “যথেষ্ট ভালো আর অনেক সস্তা” প্রায়ই “সেরা কিন্তু দামি”-কে হারায়। পরে QoS-এর মতো বৈশিষ্ট্য (পর্ব ২৬) Ethernet-এ যোগ হয়ে অগ্রাধিকারের প্রয়োজনও অনেকটা মেটায়। আর token-এর ধারণা অন্য রূপে বেঁচে আছে — কারখানার কিছু নিয়ন্ত্রণ-নেটওয়ার্কে, আর কম্পিউটার বিজ্ঞানে mutual exclusion-এর অ্যালগরিদমে।

মূল উপলব্ধি: প্রযুক্তির লড়াইয়ে খরচ, সরলতা, মানিয়ে নেওয়ার ক্ষমতা আর বাজারের আকার প্রায়ই তাত্ত্বিক শ্রেষ্ঠত্বের চেয়ে বেশি গুরুত্বপূর্ণ। Ethernet নিজের দুর্বলতা (collision) দূর করতে নিজেকেই বদলে ফেলেছে — নাম রেখে ভেতরের প্রায় সব কিছু।

প্র ০৫Binary exponential backoff কি ন্যায্য? যে station সবে সফল হলো, সে কি আবার আগে সুযোগ পায় — আর আধুনিক নেটওয়ার্ক random access আর scheduling-এর মধ্যে কীভাবে ভারসাম্য রাখে?

Backoff-এর একটি সূক্ষ্ম অন্যায্যতা আছে। ধরুন A আর B-এর দুজনেরই অনেক frame জমা। একটি collision-এর পর A জিতল, frame পাঠিয়ে তার collision-গণনা শূন্যে নামাল। B-এর গণনা এখনো ১. A-এর পরের frame আর B-এর অপেক্ষমাণ frame আবার ধাক্কা খেলে A বাছবে {০, ১} থেকে, আর B {০, …, ৩} থেকে — A-এর জেতার সম্ভাবনা বেশি। আবার জিতলে ব্যবধান আরও বাড়ে। এভাবে একজন কিছুক্ষণ চ্যানেল “দখল” করে রাখতে পারে — এর নাম Ethernet capture effect, ১৯৯০-এর দশকে গবেষকেরা এটি বিশ্লেষণ করেন, আর কিছু বিকল্প backoff নিয়মও প্রস্তাব করা হয়। Switched Ethernet আসায় সমস্যাটি বাস্তবে গুরুত্ব হারায়। Wi-Fi-তে backoff-এর গণনা থামিয়ে রাখার (freeze) নিয়ম অপেক্ষমাণদের কিছুটা অগ্রাধিকার দেয়, কারণ তাদের বাকি গণনা ছোট হয়ে আসে।

বড় প্রশ্নটি হলো random access বনাম scheduling. Random access সরল আর বিকেন্দ্রীভূত, কম ভিড়ে দারুণ; কিন্তু ভিড় বাড়লে collision বাড়ে, আর delay-এর কোনো প্রতিশ্রুতি থাকে না। Scheduling (polling, TDMA, কেন্দ্রীয় বরাদ্দ) ভিড়েও স্থিতিশীল আর ন্যায্য, কিন্তু একজন নিয়ন্ত্রক লাগে, আর অনুরোধ জানানোর একটি পথ লাগে। আধুনিক প্রায় সব বড় নেটওয়ার্কের উত্তর হলো মিশ্রণ: ছোট অনুরোধে প্রতিযোগিতা, বড় ডেটায় বরাদ্দ। DOCSIS-এ modem contention mini-slot-এ request পাঠায়, তারপর CMTS নির্দিষ্ট slot দেয়। 4G/5G-তে ফোন random access দিয়ে প্রথম যোগাযোগ করে, তারপর base station-এর scheduler প্রতি মুহূর্তে resource ভাগ করে। Wi-Fi 6-এ AP OFDMA দিয়ে একসাথে অনেক যন্ত্রকে আলাদা অংশ বরাদ্দ করতে পারে, যদিও সাধারণ CSMA/CA-ও থেকে যায়।

এখানে অংশ ৪-এর গণিত আবার ফিরে আসে: অনুরোধগুলো ছোট, তাই slotted ALOHA-র মতো প্রতিযোগিতায় তাদের collision-এর খরচ কম; আর বড় ডেটা collision-মুক্ত পথে যায়, তাই চ্যানেলের বড় অংশ দক্ষভাবে কাজে লাগে। এটি অনেকটা ব্যাংকের টোকেন ব্যবস্থার মতো: টোকেন নিতে ভিড় করলেও ক্ষতি সামান্য, কিন্তু কাউন্টারে লেনদেন হয় নির্দিষ্ট ক্রমে।

মূল উপলব্ধি: কোনো একটি MAC পরিবার সব পরিস্থিতিতে সেরা নয়। ভালো নকশা প্রতিটি কাজের জন্য সঠিক পদ্ধতি বাছে — অনিশ্চিত, ছোট আর কালেভদ্রের কাজে প্রতিযোগিতা; নিয়মিত আর বড় কাজে বরাদ্দ — আর ন্যায্যতা আলাদা করে মেপে দেখে।

অনুশীলন

খাতা-কলম আর ক্যালকুলেটর নিন — প্রতিটি সংখ্যার একক লিখে লিখে হিসাব করুন।

  1. হাতে হিসাব (pure ALOHA): একটি pure ALOHA চ্যানেলের rate ২০০ kbps, সব frame ২০০ bit. (ক) Vulnerable period কত? (খ) পুরো ব্যবস্থা প্রতি সেকেন্ডে ১,০০০টি, ৫০০টি আর ২৫০টি frame পাঠানোর চেষ্টা করলে প্রতি সেকেন্ডে গড়ে কতটি সফল হবে? (গ) একই চ্যানেল slotted হলে ১,০০০টির ক্ষেত্রে কতটি?

    T = ২০০ bit ÷ ২০০ × ১০৩ bit/s = ১ ms. (ক) Vulnerable period = ২T = ২ ms. (খ) প্রতি সেকেন্ডে ১,০০০টি frame-সময়। ১,০০০ চেষ্টা/s মানে G = ১: S = ১·e−২ ≈ ০.১৩৫৩ → প্রায় ১৩৫টি সফল। ৫০০টি মানে G = ০.৫: S = ০.৫·e−১ ≈ ০.১৮৩৯ → প্রায় ১৮৪টি (সর্বোচ্চ)। ২৫০টি মানে G = ০.২৫: S = ০.২৫·e−০.৫ ≈ ০.১৫১৬ → প্রায় ১৫২টি. লক্ষ করুন, ১,০০০টি চেষ্টায় ৫০০টির চেয়ে কম সফল। (গ) Slotted, G = ১: S = e−১ ≈ ০.৩৬৭৯ → প্রায় ৩৬৮টি.

  2. Minimum frame size: একটি CSMA/CD নেটওয়ার্কের rate ১ Gbps, দুই দূরতম station-এর মধ্যে তারের দৈর্ঘ্য ১ km, s = ২ × ১০৮ m/s, যন্ত্রের delay শূন্য। Minimum frame size কত bit আর কত byte? Frame ৬৪ byte রাখতে চাইলে সর্বোচ্চ কত দূরত্ব চলবে?

    Tprop = ১,০০০ ÷ (২ × ১০৮) = ৫ µs; ২Tprop = ১০ µs. Lmin = ১০৯ × ১০ × ১০−৬ = ১০,০০০ bit = ১,২৫০ byte. ৬৪ byte = ৫১২ bit রাখলে Tframe = ৫১২ ÷ ১০৯ = ০.৫১২ µs ≥ ২d/s, তাই d ≤ ০.৫১২ × ১০−৬ × ২ × ১০৮ ÷ ২ = ৫১.২ m — যন্ত্রের delay ধরলে আরও কম। এজন্যই gigabit-এ CSMA/CD কার্যত বাদ পড়েছে।

  3. আউটপুট অনুমান করুন: অংশ ৪-এর প্রথম কোডে (ALOHA টেবিল) G-এর তালিকায় 0.2 যোগ করলে নতুন লাইনটি ঠিক কী ছাপা হবে? (e−০.৪ ≈ ০.৬৭০৩২, e−০.২ ≈ ০.৮১৮৭৩)

    Pure: ০.২ × ০.৬৭০৩২ = ০.১৩৪০৬ → 0.1341; slotted: ০.২ × ০.৮১৮৭৩ = ০.১৬৩৭৫ → 0.1637; সফলের সম্ভাবনা 0.670 আর 0.819. লাইনটি হবে:

     0.20   0.1341     0.1637         0.670 / 0.819

    কম load-এ S প্রায় G-এর সমান, কারণ বেশিরভাগ চেষ্টা সফল। সর্বোচ্চ বিন্দুর লাইন বদলাবে না, কারণ সেটি আলাদা স্ক্যান থেকে আসে।

  4. Backoff হাতে: ১০ Mbps ক্লাসিক Ethernet-এ একটি frame পরপর ৩ বার collision-এ পড়েছে। (ক) এখন K কোন পরিসর থেকে বাছা হবে, সর্বোচ্চ অপেক্ষা কত µs? (খ) ১২-তম collision-এর পর? (গ) দুটি station প্রথম collision-এর পর আবার collision-এ পড়ার সম্ভাবনা কত, যদি দুজনেরই এটি প্রথম collision হয়? (ঘ) কত বার চেষ্টার পর frame বাতিল হয়?

    (ক) n = ৩ → K ∈ {০, …, ৭}; সর্বোচ্চ ৭ × ৫১.২ = ৩৫৮.৪ µs. (খ) n = ১২ → min(১২, ১০) = ১০ → K ∈ {০, …, ১০২৩}; সর্বোচ্চ ১০২৩ × ৫১.২ = ৫২,৩৭৭.৬ µs ≈ ৫২.৪ ms. (গ) দুজনেই {০, ১} থেকে স্বাধীনভাবে বাছে; একই সংখ্যা বাছার সম্ভাবনা ১/২ (দুজনেই ০, বা দুজনেই ১)। (ঘ) ১৬ বার চেষ্টা (অর্থাৎ ১৫টি retransmission) ব্যর্থ হলে frame বাতিল করে ওপরের স্তরকে জানানো হয়।

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

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

ক্রমক্লাসিক half-duplex Ethernet-এ একটি station-এর frame পাঠানো আর collision সামলানো — ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. চ্যানেল শোনা, ব্যস্ত থাকলে খালি হওয়া পর্যন্ত অপেক্ষা
  2. Frame পাঠানো শুরু আর পাঠানোর সময়ও শোনা
  3. Collision ধরা পড়লে পাঠানো থামানো
  4. ৩২ bit-এর jam signal পাঠানো
  5. ০ থেকে ২min(n,১০) − ১-এর মধ্যে K বেছে K × slot time অপেক্ষা

Poisson মডেলে pure ALOHA-র throughput কত load-এ সর্বোচ্চ, আর সেই সর্বোচ্চ মান কত?

  • G = ১-এ, S = ১/e ≈ ০.৩৬৮
  • G = ০.৫-এ, S = ১/(২e) ≈ ০.১৮৪
  • G = ০.৫-এ, S = ০.৫
  • G = ১-এ, S = ১/(২e) ≈ ০.১৮৪

Slotted ALOHA-র throughput pure ALOHA-র প্রায় দ্বিগুণ কেন?

  • পাঠানোর আগে চ্যানেল শোনা হয় বলে
  • Collision ধরা পড়লে সাথে সাথে থামা হয় বলে
  • Vulnerable period ২T থেকে কমে T হয় বলে
  • Frame-এর আকার অর্ধেক করা হয় বলে

একটি CSMA/CD LAN-এর rate ১০ Mbps আর collision ধরার সবচেয়ে খারাপ round-trip সময় (২Tprop) ৫১.২ µs. Minimum frame size কত?

  • ৫১২ bit = ৬৪ byte
  • ২৫৬ bit = ৩২ byte
  • ৫১২ byte
  • ১,৫০০ byte

ক্লাসিক Ethernet-এ একটি frame চতুর্থবার collision-এ পড়েছে। Binary exponential backoff অনুযায়ী K কোন পরিসর থেকে বাছা হবে?

  • {০, ১}
  • {০, …, ৭}
  • {০, …, ১৬}
  • {০, …, ১৫}

A আর C দুটি ল্যাপটপ একই access point-এর সাথে যুক্ত, কিন্তু মাঝের দেয়ালের কারণে একে অপরের সংকেত শুনতে পায় না। দুজনেই carrier sense করে একসাথে পাঠালে কী হয়, আর কোন কৌশল এটি কমায়?

  • Collision নিজেরাই ধরে থেমে যায় — CSMA/CD
  • Access point-এ collision হয়, কেউ টের পায় না — RTS/CTS কমায়
  • দুজনে একে অপরকে শুনে অকারণে চুপ থাকে — token passing কমায়
  • কোনো সমস্যা হয় না, access point দুটো frame-ই পায়

একটি অফিসের সব কম্পিউটার আলাদা তারে একটি switch-এর port-এ full-duplex-এ যুক্ত। এখানে CSMA/CD-র ভূমিকা কী?

  • প্রতিটি port-এ collision ধরে backoff করে
  • CSMA/CD-র বদলে CSMA/CA চলে
  • কোনো ভূমিকা নেই — collision না থাকায় এটি বন্ধ থাকে
  • Switch একটি token ঘুরিয়ে পালা ঠিক করে

CSMA ব্যবহার করলে, অর্থাৎ পাঠানোর আগে চ্যানেল শুনে নিলেও collision হতে পারে কেন?

  • সংকেত পৌঁছাতে propagation delay লাগে, তার মধ্যে অন্যজন খালি শুনে শুরু করতে পারে
  • Carrier sense-এর hardware প্রায়ই ভুল ফল দেয়
  • Frame খুব বড় হলে সবসময় collision হয়
  • সবার ঘড়ি মেলানো থাকে না বলে

শব্দকোষ

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

মনে রাখুন

  1. ভাগ করা মাধ্যমে কে কখন পাঠাবে, তা ঠিক করে MAC protocol: channel partitioning (FDMA/TDMA/CDMA), random access (ALOHA, CSMA) আর taking turns (polling, token).
  2. Pure ALOHA: vulnerable ২T, S = G·e−২G, সর্বোচ্চ ১/(২e) ≈ ১৮.৪%; slotted: vulnerable T, S = G·e−G, সর্বোচ্চ ১/e ≈ ৩৬.৮%.
  3. CSMA আগে শোনে, কিন্তু propagation delay-এর কারণে collision থাকে; CSMA/CD পাঠাতে পাঠাতে শুনে থামে, jam দেয়, তারপর K ∈ {০, …, ২min(n,১০) − ১} × ৫১.২ µs backoff.
  4. Tframe ≥ ২Tprop → ১০ Mbps-এ ৬৪ byte; efficiency ≈ ১/(১ + ৫a); switched full-duplex Ethernet-এ collision নেই, CSMA/CD বন্ধ।
  5. বেতারে collision ধরা যায় না, hidden terminal-এ collision ঘটে প্রাপকের কাছে — তাই CSMA/CA: অপেক্ষা, backoff, ACK আর দরকারে RTS/CTS.

পরের পর্বে: ভাগ করা তার থেকে switch-এর যুগে — Ethernet frame-এর প্রতিটি ঘর, MAC ঠিকানা, switch কীভাবে নিজে নিজে ঠিকানা শেখে, আর loop ঠেকাতে spanning tree.

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

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