এই পর্বে যা শিখবেন
- Ethernet-এর ইতিহাস, IEEE 802.3 আর 1000BASE-T, 10GBASE-SR-এর মতো নামের মানে
- Ethernet II frame-এর প্রতিটি ঘর, EtherType বনাম length, ৬৪ আর ১৫১৮ বাইটের সীমা, jumbo frame
- MAC ঠিকানার গঠন — OUI, I/G আর U/L বিট, broadcast আর multicast, ফোনের random MAC
- Hub, bridge আর switch-এর পার্থক্য আর একটি topology-তে collision ও broadcast domain গোনা
- Switch-এর শেখা, forward-filter-flood, cut-through, আর Spanning Tree Protocol-এর পুরো হিসাব হাতে করা
১ · Ethernet-এর গল্প — একটি ল্যাবের তার থেকে ৮০০ Gb/s
অফিসের ডেস্কের নিচের নীল তার, বাসার router-এর পেছনের port, ঢাকার কোনো data center-এর হাজার হাজার সার্ভার — সবখানে একই প্রযুক্তি: Ethernet. পর্ব ০৩-এ আপনি Ethernet frame-এর hex পড়েছেন, আর পর্ব ০২-এ hub আর switch-এর নাম শুনেছেন। এবার ভেতরে ঢোকার পালা: frame-এর প্রতিটি ঘর কেন আছে, MAC ঠিকানার বিটগুলো কী বলে, আর switch কীভাবে কাউকে কিছু না জিজ্ঞেস করে নিজে নিজে শিখে নেয় কে কোথায় বসে আছে।
সাধারণভাবে বলা হয়, ১৯৭৩ সালে Xerox-এর Palo Alto Research Center (PARC)-এ Robert Metcalfe একটি memo-তে “Ethernet” নামের প্রস্তাব লেখেন, আর David Boggs-এর সাথে মিলে প্রথম ব্যবস্থাটি বানান — একটি মোটা coaxial তারে অনেক কম্পিউটার, গতি প্রায় ৩ Mb/s. নামটি এসেছে উনিশ শতকের “luminiferous ether” ধারণা থেকে — যে কাল্পনিক মাধ্যমে আলো চলে বলে একসময় ভাবা হতো; তারটিও সবার জন্য একটি সাধারণ “মাধ্যম”। ১৯৭৬ সালে দুজনের একটি প্রবন্ধ প্রকাশিত হয়। এরপর DEC, Intel আর Xerox মিলে (সংক্ষেপে DIX) ১৯৮০ সালের দিকে ১০ Mb/s-এর একটি উন্মুক্ত বিবরণ প্রকাশ করে, যার দ্বিতীয় সংস্করণ থেকে আজকের “Ethernet II” frame-এর নাম। প্রায় একই সময়ে IEEE 802 কমিটি কাজটিকে আন্তর্জাতিক মানে রূপ দেয় — IEEE 802.3, প্রথম প্রকাশ ১৯৮৩ সালে বলে উল্লেখ করা হয়। Metcalfe পরে 3Com প্রতিষ্ঠা করেন, আর Ethernet-এর জন্য ২০২২ সালের Turing Award পান।
Ethernet-এর আসল জাদু হলো এটি নিজেকে বারবার বদলেছে, কিন্তু ওপরের স্তরের কাছে একই চেহারা রেখেছে। মোটা coax থেকে পাতলা coax, তারপর twisted pair আর hub, তারপর switch আর full-duplex, তারপর fiber — প্রতিবারই frame-এর ফর্ম্যাট মোটামুটি একই থেকেছে। তাই ১৯৯০ সালের একটি IP stack আজকের ১০০ Gb/s কার্ডেও কাজ করে। মানের নামগুলো পড়তে শিখুন:
10GBASE-SR = 10Gb/s · BASEband · Short reach (multimode fiber) · R = একটি নির্দিষ্ট encoding পরিবার
| গতি | উদাহরণ মান | মাধ্যম ও দূরত্ব (মোটামুটি) | কোথায় দেখবেন |
|---|---|---|---|
| ১০ Mb/s | 10BASE5, 10BASE2, 10BASE-T | Coax (bus); পরে twisted pair, ১০০ মিটার | ইতিহাস; hub-এর যুগ |
| ১০০ Mb/s | 100BASE-TX | Cat5 twisted pair, ১০০ মিটার | পুরোনো অফিস, অনেক সস্তা যন্ত্র |
| ১ Gb/s | 1000BASE-T, 1000BASE-SX/LX | Cat5e/Cat6 তার ১০০ মিটার; fiber | আজকের ল্যাপটপ, ডেস্কটপ, বাসার router |
| ২.৫ / ৫ Gb/s | 2.5GBASE-T, 5GBASE-T | পুরোনো Cat5e-তেই বেশি গতি | Wi-Fi 6/7 access point-এর uplink |
| ১০ Gb/s | 10GBASE-T, 10GBASE-SR, 10GBASE-LR | Cat6a; multimode fiber কয়েকশো মিটার; single-mode ১০ কিমি | সার্ভার, অফিসের backbone |
| ২৫ / ৪০ / ১০০ Gb/s | 25GBASE-SR, 100GBASE-SR4, 100GBASE-LR4 | প্রধানত fiber, কয়েকটি lane মিলিয়ে | Data center-এর সার্ভার আর switch |
| ২০০ / ৪০০ / ৮০০ Gb/s | 400GBASE-…, 800G-এর মান | Fiber, অনেক lane আর উন্নত modulation | বড় data center, ISP-এর backbone |
প্রতিটি গতির জন্য তামা আর fiber-এর আলাদা আলাদা মান ও সংশোধনী আছে (802.3u, 802.3ab, 802.3ae…), তাই সালগুলো মোটা দাগে মনে রাখুন: ১০ Mb/s (১৯৮০-র দশক) → ১০০ Mb/s (১৯৯০-এর মাঝামাঝি) → ১ Gb/s (১৯৯০-এর শেষ) → ১০ Gb/s (২০০০-এর দশকের শুরু) → ৪০/১০০ Gb/s (২০১০ নাগাদ) → ২০০/৪০০ Gb/s (২০১০-এর দশকের শেষ) → ৮০০ Gb/s (২০২০-এর দশক)। তার আর fiber-এর ভেতরের সংকেতের কথা পর্ব ০৭–০৮-এ।
পুরোনো Ethernet-এ সবাই একটি তার ভাগ করত, তাই দুজন একসাথে পাঠালে সংকেত মিশে যেত — collision. সেই সমস্যার সমাধান CSMA/CD, যার বিস্তারিত (আর ৬৪ বাইটের নিম্নসীমা কোথা থেকে এল তার প্রমাণ) পর্ব ১১-এ। আজকের switch-ভিত্তিক full-duplex Ethernet-এ প্রতিটি তারে দুই প্রান্তের জন্য আলাদা পথ, তাই collision আর ঘটেই না; CSMA/CD বেঁচে আছে মূলত মানের ভেতরে, ইতিহাস হিসেবে।
২ · Ethernet II frame — প্রতিটি ঘর কেন আছে
একটি frame-কে কুরিয়ারের পার্সেলের মতো ভাবুন। ওপরে প্রাপকের ঠিকানা, তারপর প্রেরকের ঠিকানা, তারপর একটি লেবেল “ভেতরে কী” — “ভঙ্গুর: কাচ” বা “বই”। তারপর আসল জিনিস। আর শেষে একটি সিল, যেটি ছেঁড়া থাকলে বোঝা যায় পথে কিছু হয়েছে। Ethernet II frame-এর গঠন ঠিক এমন:
┌──────────┬─────┬─────────┬─────────┬──────────┬──────────────┬─────┐
│ Preamble │ SFD │ Dst MAC │ Src MAC │EtherType │ Payload │ FCS │
│ 7 বাইট │ 1 │ 6 │ 6 │ 2 │ 46 – 1500 │ 4 │
└──────────┴─────┴─────────┴─────────┴──────────┴──────────────┴─────┘
└─ তারের জন্য ─┘ └──────────────── frame: 64 থেকে 1518 বাইট ─────────────┘
- Preamble (৭ বাইট) আর SFD (১ বাইট): প্রথম ৭ বাইট 10101010 নকশা, যা শুনে প্রাপকের ঘড়ি প্রেরকের ছন্দের সাথে মিলে যায়। তারপর SFD (start frame delimiter) 10101011 — শেষের “11” মানে “এবার আসল frame শুরু”। এগুলো physical স্তরের অংশ; Wireshark-এ সাধারণত দেখা যায় না, আর frame-এর আকারেও ধরা হয় না।
- Destination MAC (৬ বাইট): প্রথমে গন্তব্য — যাতে switch বা NIC প্রথম কয়েকটি বাইট পড়েই সিদ্ধান্ত নিতে পারে, “এটি আমার কি না” বা “কোন port-এ যাবে”। এই ক্রমের সুবিধা অংশ ৬-এর cut-through-এ দেখবেন।
- Source MAC (৬ বাইট): প্রেরকের ঠিকানা — switch এটি দেখেই শেখে (অংশ ৫)।
- EtherType (২ বাইট): ভেতরে কোন protocol —
0x0800IPv4,0x86DDIPv6,0x0806ARP (পর্ব ১৮),0x8100মানে একটি VLAN tag বসানো আছে (পর্ব ১৩)। - Payload (৪৬–১৫০০ বাইট): ওপরের স্তরের packet. ১৫০০-ই Ethernet-এর MTU. ৪৬-এর কম হলে NIC শেষে শূন্য দিয়ে padding বসায়।
- FCS (৪ বাইট): পুরো frame-এর (গন্তব্য থেকে payload পর্যন্ত) CRC-32. প্রাপক নিজে হিসাব করে মেলায়; না মিললে frame নীরবে ফেলে দেয় — কোনো খবর পাঠায় না। CRC কীভাবে হিসাব হয়, পর্ব ০৯-এ।
EtherType না length — একই দুই বাইটের দুই মানে
এখানে একটি ঐতিহাসিক জট আছে, যা পরীক্ষায় প্রায়ই আসে। DIX-এর Ethernet II-তে এই দুই বাইট ছিল type. কিন্তু IEEE-র প্রথম 802.3 মানে একই জায়গায় রাখা হয়েছিল payload-এর length, আর ভেতরের protocol চেনানোর দায় দেওয়া হয়েছিল payload-এর শুরুর একটি ছোট 802.2 LLC header-কে। দুই ধরনের frame একই তারে চলবে কীভাবে? সমাধানটি সুন্দর: payload কখনো ১৫০০-র বেশি হয় না, তাই নিয়ম করা হলো —
মান ≥ ১৫৩৬ (0x0600) → এটি EtherType (Ethernet II)
সব EtherType ইচ্ছে করেই 0x0600-এর ওপরে, তাই কোনো সংঘাত নেই; পরে IEEE নিজেও type-ব্যাখ্যা মেনে নেয় (১৯৯৭ সালের একটি সংশোধনীতে বলে জানা যায়)। আজ IP, ARP, IPv6 — প্রায় সব traffic Ethernet II ফর্ম্যাটে; LLC-ধাঁচের frame দেখবেন কিছু বিশেষ protocol-এ, যেমন ক্লাসিক STP-র বার্তায়।
৬৪ আর ১৫১৮ — দুই সীমার হিসাব
- সর্বনিম্ন: ৬ + ৬ + ২ + ৪৬ + ৪ = ৬৪ বাইট = ৫১২ বিট। কেন ৫১২ বিট? শেয়ার করা তারে collision ধরতে হলে প্রেরককে frame পাঠানো শেষ করার আগেই সবচেয়ে দূরের সংঘর্ষের খবর ফিরে আসতে হবে — ১০ Mb/s Ethernet-এর সর্বোচ্চ দৈর্ঘ্য আর repeater-এর দেরি মিলিয়ে সেই round-trip সময় ধরা হয়েছিল ৫১২ বিট-সময় (slot time). পুরো প্রমাণ পর্ব ১১-এ।
- সর্বোচ্চ: ৬ + ৬ + ২ + ১৫০০ + ৪ = ১৫১৮ বাইট. একটি 802.1Q VLAN tag (৪ বাইট) থাকলে ১৫২২.
- তারের প্রতিটি frame-এর বাড়তি খরচ: preamble আর SFD ৮ বাইট, আর পরের frame-এর আগে ১২ বাইট সময়ের নীরবতা (inter-frame gap, ৯৬ বিট-সময়)। তাই সবচেয়ে ছোট frame-ও তারে ৬৪ + ২০ = ৮৪ বাইটের সময় নেয়।
১ Gb/s লিংকে সবচেয়ে ছোট frame প্রতি সেকেন্ডে কয়টি? ১০৯ ÷ (৮৪ × ৮) ≈ ১৪ লাখ ৮৮ হাজার. অর্থাৎ একটি ১ Gb/s switch port-কে প্রতি ০.৬৭২ মাইক্রোসেকেন্ডে একটি করে সিদ্ধান্ত নিতে হতে পারে। ৪৮ port-এর switch-এ সেটি সাত কোটিরও বেশি সিদ্ধান্ত প্রতি সেকেন্ডে — এজন্যই switch-এর সিদ্ধান্ত software-এ নয়, বিশেষ চিপে (ASIC) হয়।
Jumbo frame
১৫০০ বাইটের MTU এসেছে ১৯৮০-র দশকের দামি মেমরির যুগ থেকে। আজকের data center-এ অনেকে jumbo frame চালু করেন — সাধারণত ৯০০০ বাইটের মতো MTU. লাভ দুটি: header-এর ভাগ কমে, আর CPU-কে অনেক কম frame সামলাতে হয়। হিসাব করুন — TCP/IPv4-এ ১৫০০ MTU-তে প্রতি frame-এ ডেটা ১৪৬০ বাইট, তারের সময় ধরে efficiency ১৪৬০ ÷ ১৫৩৮ ≈ ৯৪.৯৩%; ৯০০০ MTU-তে ডেটা ৮৯৬০, তারে ৯০৩৮ বাইট, efficiency ≈ ৯৯.১৪%. কিন্তু সাবধান: jumbo frame IEEE 802.3-এর আনুষ্ঠানিক মানের অংশ নয়, আকারও vendor-ভেদে আলাদা হতে পারে। পথের প্রতিটি যন্ত্রকে একই বড় MTU সমর্থন করতে হয়; একটিও না করলে বড় frame নীরবে হারায় আর সমস্যা খুঁজতে দিন চলে যায়। তাই সাধারণত শুধু নিয়ন্ত্রিত নেটওয়ার্কে (storage, data center-এর ভেতর) ব্যবহার হয়, ইন্টারনেটে নয়।
৩ · MAC ঠিকানা — ৪৮ বিটের পরিচয়পত্র
একটি MAC address ৪৮ বিট, অর্থাৎ ৬ বাইট, লেখা হয় ১২টি hex অঙ্কে: 00:00:5e:00:53:01 (Linux আর macOS-এর ধরন), 00-00-5E-00-53-01 (Windows), বা 0000.5e00.5301 (Cisco-র ধরন)। মোট সম্ভাব্য ঠিকানা ২৪৮ = ২৮১,৪৭৪,৯৭৬,৭১০,৬৫৬ — প্রায় ২৮১ লক্ষ কোটি।
MAC ঠিকানাকে ভাবুন মোবাইল ফোনের IMEI-র মতো, আর IP ঠিকানাকে বাসার ঠিকানার মতো। আপনি ঢাকা থেকে রাজশাহী চলে গেলে বাসার ঠিকানা বদলায় (নতুন নেটওয়ার্কে নতুন IP), কিন্তু ফোনের IMEI একই থাকে। আবার চিঠি পৌঁছাতে IMEI কাজে আসে না — দরকার ঠিকানা। MAC কাজে লাগে শুধু “এই গলির ভেতরে” — একই LAN-এ পাশের যন্ত্র পর্যন্ত।
প্রথম ৩ বাইট: OUI
বিশ্বজুড়ে MAC যাতে না মেলে, সেজন্য IEEE প্রতিটি নির্মাতাকে ২৪ বিটের একটি নম্বর দেয় — OUI (Organizationally Unique Identifier). ঠিকানার প্রথম ৩ বাইট OUI, শেষ ৩ বাইট নির্মাতা নিজে প্রতিটি কার্ডে আলাদা বসায়। এক OUI দিয়ে ২২৪ = ১,৬৭,৭৭,২১৬টি ঠিকানা হয়; বড় নির্মাতারা তাই অনেকগুলো OUI নেন। IEEE-র সর্বজনীন তালিকায় OUI দেখে নির্মাতার নাম খোঁজা যায় — Wireshark এভাবেই ঠিকানার পাশে কোম্পানির নাম দেখায়। এই পর্বের উদাহরণে আমরা 00:00:5e:00:53:xx ব্যবহার করছি — 00:00:5e হলো IANA-র OUI, আর তার ভেতরের 00:00:5e:00:53:00 থেকে …:ff অংশটি শুধু ডকুমেন্টেশনের উদাহরণের জন্য সংরক্ষিত (RFC 7042-এ, যা পরে RFC 9542 দিয়ে হালনাগাদ হয়েছে বলে জানা যায়) — কোনো আসল যন্ত্রের নয়।
প্রথম বাইটের দুটি বিশেষ বিট
OUI-র প্রথম বাইটের সবচেয়ে নিচের দুটি বিট সাধারণ নম্বর নয়, এরা “পতাকা”:
প্রথম বাইট (octet), যেমন 0xda = 1 1 0 1 1 0 1 0
b7 b6 b5 b4 b3 b2 b1 b0
│ └── I/G: 0 = individual (unicast)
│ 1 = group (multicast/broadcast)
└───── U/L: 0 = universal (IEEE-র OUI)
1 = local (admin বা software বানিয়েছে)
- I/G বিট (bit 0): ০ হলে ঠিকানাটি একটি নির্দিষ্ট interface-এর — unicast. ১ হলে একটি দলের — multicast. সব ৪৮ বিট ১ হলে (
ff:ff:ff:ff:ff:ff) সেটি broadcast — LAN-এর সবার জন্য। মজার তথ্য: Ethernet প্রতিটি বাইট নিচের বিট আগে পাঠায়, তাই এই I/G বিটই তারে যাওয়া ঠিকানার একেবারে প্রথম বিট — NIC প্রথম বিট শুনেই বোঝে frame-টি দলের জন্য কি না। - U/L বিট (bit 1): ০ হলে নির্মাতা IEEE-র OUI থেকে বসিয়েছে (“burned-in”). ১ হলে ঠিকানাটি স্থানীয়ভাবে বানানো — virtual machine, container, বা ফোনের random MAC.
মুখস্থ রাখার সহজ কৌশল: দ্বিতীয় hex অঙ্ক দেখুন। সেটি ২, ৬, A বা E হলে ঠিকানাটি local unicast (যেমন da:…, 02:…, 8a:…)। বিজোড় হলে (১, ৩, ৫…, F) group ঠিকানা (যেমন 01:00:5e:… IPv4 multicast, 33:33:… IPv6 multicast).
ফোনের “Private” বা random MAC
স্থায়ী MAC-এর একটি সমস্যা: শপিং মল বা বিমানবন্দরের Wi-Fi আপনার ফোনের MAC দেখে চিনে ফেলতে পারে আপনি আগেও এসেছিলেন — যুক্ত না হলেও, কারণ Wi-Fi খোঁজার বার্তাতেও MAC থাকে। এই গোপনীয়তার ঝুঁকি কমাতে আধুনিক OS-গুলো MAC randomization চালু করেছে: Wi-Fi খোঁজার সময় এবং অনেক ক্ষেত্রে প্রতিটি নেটওয়ার্কের জন্য আলাদা একটি বানানো ঠিকানা ব্যবহার করে — যার U/L বিট ১. সাধারণভাবে জানা যায়, Android ১০ থেকে প্রতিটি নেটওয়ার্কের জন্য random MAC ডিফল্ট, iOS ১৪ থেকে “Private Wi-Fi Address” আছে, আর Windows-এ “Random hardware addresses” নামে একটি সেটিং আছে; সংস্করণ আর ডিফল্ট আচরণ সময়ের সাথে বদলায়, তাই নিজের যন্ত্রের সেটিং দেখে নিন। পার্শ্বপ্রতিক্রিয়া: যে হোস্টেলের Wi-Fi “MAC দিয়ে অনুমতি” দেয়, সেখানে বদলানো ঠিকানার ফোন আটকে যেতে পারে।
নিচের decoder কয়েকটি নমুনা ঠিকানার প্রথম বাইট ভেঙে দুটি পতাকা আর OUI দেখায়। Run চাপুন:
// Decode a 48-bit MAC address: OUI, I/G bit and U/L bit of the first octet.
const known = { "00:00:5e": "IANA; 00:00:5e:00:53:xx is for documentation",
"01:00:5e": "IANA - IPv4 multicast mapping", "33:33:00": "IPv6 multicast mapping",
"01:80:c2": "IEEE 802.1 - bridge protocols (STP BPDU)" };
function decode(addr) {
const b = addr.split(":").map(h => parseInt(h, 16));
const first = b[0];
const ig = first & 1; // bit 0: Individual(0) / Group(1)
const ul = (first >> 1) & 1; // bit 1: Universal(0) / Local(1)
const oui = addr.slice(0, 8);
let kind = ig ? "group (multicast)" : "individual (unicast)";
if (b.every(x => x === 255)) kind = "BROADCAST (all ones)";
console.log(`${addr} first octet 0x${addr.slice(0, 2)} = ${first.toString(2).padStart(8, "0")}`);
console.log(` I/G=${ig} -> ${kind}`);
console.log(` U/L=${ul} -> ${ul ? "locally administered (no IEEE OUI)"
: "universally administered (IEEE-assigned OUI)"}`);
if (!ul && !ig) console.log(` OUI ${oui} -> ${known[oui] ?? "look up in the IEEE registry"}`);
else if (ig && known[oui] && !kind.startsWith("BROAD")) console.log(` prefix ${oui} -> ${known[oui]}`);
}
["00:00:5e:00:53:01", "ff:ff:ff:ff:ff:ff", "01:00:5e:00:00:fb",
"33:33:00:00:00:01", "01:80:c2:00:00:00", "da:a1:19:00:53:2c"].forEach(decode);আউটপুট (প্রতিবার একই):
00:00:5e:00:53:01 first octet 0x00 = 00000000
I/G=0 -> individual (unicast)
U/L=0 -> universally administered (IEEE-assigned OUI)
OUI 00:00:5e -> IANA; 00:00:5e:00:53:xx is for documentation
ff:ff:ff:ff:ff:ff first octet 0xff = 11111111
I/G=1 -> BROADCAST (all ones)
U/L=1 -> locally administered (no IEEE OUI)
01:00:5e:00:00:fb first octet 0x01 = 00000001
I/G=1 -> group (multicast)
U/L=0 -> universally administered (IEEE-assigned OUI)
prefix 01:00:5e -> IANA - IPv4 multicast mapping
33:33:00:00:00:01 first octet 0x33 = 00110011
I/G=1 -> group (multicast)
U/L=1 -> locally administered (no IEEE OUI)
prefix 33:33:00 -> IPv6 multicast mapping
01:80:c2:00:00:00 first octet 0x01 = 00000001
I/G=1 -> group (multicast)
U/L=0 -> universally administered (IEEE-assigned OUI)
prefix 01:80:c2 -> IEEE 802.1 - bridge protocols (STP BPDU)
da:a1:19:00:53:2c first octet 0xda = 11011010
I/G=0 -> individual (unicast)
U/L=1 -> locally administered (no IEEE OUI)
ছয়টি ঠিকানা, ছয়টি শিক্ষা। প্রথমটি সাধারণ একটি unicast ঠিকানা: দুটি পতাকাই ০, OUI 00:00:5e (IANA-র) — আর এই অংশটি উদাহরণের জন্য সংরক্ষিত। Broadcast-এ সব বিট ১, তাই I/G আর U/L দুটিই ১ — এখানে U/L বিটের আলাদা কোনো অর্থ নেই। 01:00:5e:00:00:fb একটি IPv4 multicast ঠিকানার MAC রূপ: 01:00:5e-এর পরে IP ঠিকানার শেষ ২৩ বিট বসে (এখানে 224.0.0.251 — mDNS, যে protocol দিয়ে বাসার printer নিজেকে ঘোষণা করে)। 33:33:… IPv6 multicast-এর MAC রূপ — প্রথম বাইট 0x33-এ I/G আর U/L দুটিই ১. 01:80:c2:00:00:00 সেই বিশেষ group ঠিকানা, যেখানে spanning tree-র বার্তা যায় (অংশ ৭)। আর da:a1:19:… — দ্বিতীয় hex অঙ্ক “a”, তাই local unicast: ঠিক ফোনের random MAC বা VM-এর ঠিকানা যেমন দেখায়।
এবার আসল একটি যন্ত্রের ঠিকানা দেখি। এই পাতার bash কোড একটি Linux container-এ চলে; Linux প্রতিটি interface-এর MAC রাখে /sys/class/net/<নাম>/address ফাইলে, আর ঠিকানাটি কীভাবে এসেছে তা addr_assign_type-এ (০ = কার্ডের স্থায়ী, ১ = kernel-এর random, ৩ = কেউ বসিয়েছে)। স্ক্রিপ্টটি শুধু পড়ে, কিছু বদলায় না:
# Read every interface's MAC from /sys/class/net and decode the first octet.
[ -d /sys/class/net ] || { echo "/sys/class/net not available"; exit 0; }
for dev in /sys/class/net/*; do
name=${dev##*/}
mac=$(cat "$dev/address" 2>/dev/null) || { echo "$name: address unreadable"; continue; }
first=$((16#${mac:0:2}))
bits=""; for i in 7 6 5 4 3 2 1 0; do bits+=$(( (first >> i) & 1 )); done
ig=$(( first & 1 )); ul=$(( (first >> 1) & 1 ))
echo "$name mac=$mac first octet=$bits"
if [ "$mac" = "00:00:00:00:00:00" ]; then echo " all zeros: loopback has no real MAC"; continue; fi
[ "$ig" = 0 ] && echo " I/G=0 -> unicast" || echo " I/G=1 -> group"
[ "$ul" = 1 ] && echo " U/L=1 -> locally administered (software-made)" \
|| echo " U/L=0 -> universal: OUI ${mac:0:8} from the maker"
echo " addr_assign_type=$(cat "$dev/addr_assign_type" 2>/dev/null || echo ?) (0=permanent 1=random 3=set by user)"
done
if command -v ip >/dev/null; then ip -br link; else echo "ip command not found"; fiআসল রানের আউটপুট:
lo mac=00:00:00:00:00:00 first octet=00000000
all zeros: loopback has no real MAC
tap0 mac=be:a9:25:37:ef:26 first octet=10111110
I/G=0 -> unicast
U/L=1 -> locally administered (software-made)
addr_assign_type=1 (0=permanent 1=random 3=set by user)
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
tap0 UNKNOWN be:a9:25:37:ef:26 <BROADCAST,UP,LOWER_UP>
দুটি interface. lo (loopback)-এর ঠিকানা সব শূন্য — এর কোনো তার নেই, frame বাইরে যায় না, তাই আসল MAC-এর দরকারও নেই। আসল শিক্ষা tap0-এ: এটি container-কে বাইরের সাথে জোড়ার জন্য software-এ বানানো একটি virtual Ethernet interface. ঠিকানার প্রথম বাইট be = 1011 1110 — bit 0 = ০, তাই unicast; bit 1 = ১, তাই locally administered. দ্বিতীয় hex অঙ্ক “e” দেখেও একই কথা বলা যায়। addr_assign_type=1 নিশ্চিত করছে, kernel ঠিকানাটি random বানিয়েছে — কোনো কারখানার OUI নেই। তাই আবার চালালে প্রায় নিশ্চিতভাবে অন্য ঠিকানা দেখবেন — পরের একটি রানে এসেছিল 9a:f4:68:0e:e1:98 (এই কোর্সের আগের পর্বগুলোতে একই container-এ 8a:6e:…, 0e:7e:… এসেছিল — সবগুলোরই দ্বিতীয় hex অঙ্ক local-এর চিহ্ন বহন করে)। শেষ দুই লাইন ip -br link-এর, একই ঠিকানা দেখাচ্ছে। Kernel random ঠিকানা বানানোর সময় ইচ্ছে করেই I/G = ০ আর U/L = ১ বসায় — যাতে সেটি group ঠিকানা না হয়, আর কোনো নির্মাতার ঠিকানার সাথে না মেলে। আপনার ল্যাপটপের Ethernet কার্ডে একই স্ক্রিপ্ট চালালে সাধারণত U/L=0 আর addr_assign_type=0 পাবেন — কারখানার স্থায়ী ঠিকানা; আর Wi-Fi-তে random MAC চালু থাকলে U/L=1.
৪ · Hub, bridge আর switch — collision আর broadcast domain
পর্ব ০২-এর যন্ত্রপাতির অংশে আপনি দেখেছেন কোন যন্ত্র কোন স্তরের। এখানে শুধু এই পর্বের দরকারি দিকটি: কে কাকে “শুনতে” বাধ্য করে।
- Hub (L1): এক port-এ আসা বিট সব port-এ পাঠায়। সবাই একই তার ভাগ করছে যেন — একসাথে দুজন পাঠালে collision. সব port মিলে একটি collision domain.
- Bridge (L2): ১৯৮০-র দশকে দুই-তিনটি LAN segment জোড়ার যন্ত্র, সাধারণত software-এ চলত। Frame পুরো পড়ে, গন্তব্য MAC দেখে ঠিক করে পার করবে কি না। প্রতিটি দিক আলাদা collision domain.
- Switch (L2): মূলত অনেক port-এর, hardware-এ চলা দ্রুত bridge. প্রতিটি port-এ সাধারণত একটিমাত্র যন্ত্র, full-duplex — একে বলে microsegmentation. প্রতিটি port আলাদা collision domain (full-duplex-এ collision কার্যত শূন্য)।
- Router (L3): broadcast পার করে না। তাই router-এর প্রতিটি interface একটি আলাদা broadcast domain-এর সীমানা।
একটি বড় বাড়ির কথা ভাবুন। Hub হলো একটি বড় হলঘর — একজন কথা বললে সবাই শোনে, দুজন একসাথে বললে কারও কথাই বোঝা যায় না (collision). Switch হলো একটি করিডর, যার দুপাশে আলাদা আলাদা ঘর — রিসেপশনিস্ট চিঠি শুধু সঠিক ঘরে দিয়ে আসেন, কেউ কারও কথায় বাধা দেয় না। কিন্তু কেউ মাইকে ঘোষণা দিলে (broadcast) পুরো বাড়ির সব ঘরে শোনা যায় — বাড়ির ভেতরে সবাই একটি broadcast domain. পাশের বাড়িতে সেই মাইকের আওয়াজ যায় না, কারণ মাঝে দেয়াল আর গেট — সেই গেট হলো router.
| যন্ত্র | Collision domain ভাগ করে? | Broadcast domain ভাগ করে? |
|---|---|---|
| Hub, repeater | না — সব port একটি | না |
| Bridge, switch | হ্যাঁ — প্রতিটি port একটি | না (VLAN ছাড়া সব port একটি) |
| Router | হ্যাঁ — প্রতিটি interface একটি | হ্যাঁ — প্রতিটি interface একটি |
এবার পরীক্ষার ক্লাসিক প্রশ্নটি করি। নিচের topology-তে কয়টি collision domain আর কয়টি broadcast domain?
┌─────────── Router R ───────────┐
Gi0/0 Gi0/1
│ │
┌── SW1 (switch) ──┐ H2 (hub)
│ │ │ │ │
PC1 PC2 H1 (hub) PC6 PC7
│ │ │
PC3 PC4 PC5
| Collision domain | |
| Broadcast domain | |
| যে নিয়ম খাটল |
- নিয়ম ঠিক করে নিই। Hub কিছুই ভাগ করে না; switch-এর প্রতিটি port আলাদা collision domain, কিন্তু সব port মিলে একটি broadcast domain (VLAN নেই ধরে); router-এর প্রতিটি interface দুই রকম domain-ই আলাদা করে। এখন segment ধরে ধরে গুনি।
- H1-এর segment = ১টি। PC3, PC4, PC5 একটি hub-এ, আর সেই hub SW1-এর একটি port-এ। Hub-এর সব port, আর SW1-এর ওই port পর্যন্ত তার — সব মিলে একটিই collision domain. এখানে তিনটি PC আছে বলে তিনটি নয়!
- SW1-এর বাকি তিনটি port = আরও ৩টি। PC1-এর link, PC2-এর link, আর router-এর Gi0/0-এর সাথে link — প্রতিটি switch port নিজস্ব collision domain. মোট এখন ১ + ৩ = ৪.
- H2-এর segment = ১টি। Router-এর Gi0/1, PC6 আর PC7 — সবাই hub H2-তে, তাই একটিই collision domain. মোট ৪ + ১ = ৫টি collision domain.
- Broadcast domain = ২টি। PC1 একটি broadcast (যেমন ARP request) পাঠালে SW1 সেটি সব port-এ ছড়ায় — H1-এর মাধ্যমে PC3–PC5-ও পায়, router-এর Gi0/0-ও পায়। কিন্তু router সেটি Gi0/1-এ পার করে না। তাই Gi0/0-এর দিক একটি, Gi0/1-এর দিক আরেকটি — ২টি broadcast domain. মনে রাখুন: broadcast domain গোনার সহজ উপায় — VLAN না থাকলে router-এর ব্যবহৃত interface-এর সংখ্যা।
দুটি সাধারণ ভুল: (১) Hub-এর প্রতিটি PC-কে আলাদা collision domain গোনা — hub-এর পুরো segment একটি। (২) Router আর switch-এর মাঝের link বাদ দেওয়া — সেটিও একটি switch port, তাই একটি collision domain. আর একটি সূক্ষ্মতা: VLAN (পর্ব ১৩) থাকলে একটি switch-এর ভেতরেই একাধিক broadcast domain হয় — প্রশ্নে VLAN-এর কথা থাকলে প্রতিটি VLAN আলাদা broadcast domain গুনবেন।
৫ · Switch কীভাবে শেখে — MAC table, flood, forward আর filter
একটি নতুন switch বাক্স থেকে বের করে তার লাগালেন। কোনো configuration নেই, কেউ তাকে বলেনি কোন port-এ কোন কম্পিউটার। তবু কয়েক সেকেন্ডের মধ্যে সে ঠিক port-এ frame পাঠাতে শুরু করে। এই কৌশলের নাম transparent bridging — “transparent” কারণ কম্পিউটারগুলো জানেই না মাঝে একটি switch আছে; তারা আগের মতো frame পাঠায়।
Switch-এর মনে একটি টেবিল থাকে — MAC address table (বিশেষ দ্রুত মেমরিতে রাখা হয় বলে অনেকে বলেন CAM table). প্রতিটি ঘরে: MAC ঠিকানা → port, আর শেষ কখন দেখা গেছে। প্রতিটি frame এলে switch দুটি আলাদা কাজ করে:
১. শেখা — উৎস দেখে
Frame-এর source MAC আর যে port-এ এল, সেটি টেবিলে লেখে (বা সময় হালনাগাদ করে)। “এই ঠিকানার লোক এই দরজা দিয়ে এসেছে, তাই তাকে পেতে হলে এই দরজায় যেতে হবে।”
শেখে source থেকে২. পাঠানো — গন্তব্য দেখে
Destination MAC টেবিলে খোঁজে। পাওয়া গেলে শুধু সেই port-এ forward; সেটি যদি আসার port-ই হয়, তবে filter (ফেলে দেয়); না পেলে বা broadcast হলে আসার port ছাড়া সব port-এ flood.
সিদ্ধান্ত destination দিয়ে৩. ভুলে যাওয়া — aging
কোনো ঠিকানা থেকে অনেকক্ষণ frame না এলে ঘরটি মুছে যায় — ডিফল্ট সাধারণত ৩০০ সেকেন্ড। ল্যাপটপ অন্য port-এ সরলে বা বন্ধ হলে পুরোনো তথ্য চিরকাল থাকে না। একে বলে MAC aging.
পুরোনো ঘর মুছে যায়নতুন একটি ছাত্রাবাসের দারোয়ানের কথা ভাবুন। প্রথম দিন তিনি কাউকে চেনেন না। “রহিমের নামে চিঠি” এলে তিনি সব তলায় হেঁকে বলেন — এটি flood. কিন্তু যখনই রহিম নিজে তিন তলা থেকে নেমে কোনো চিঠি পাঠাতে আসেন, দারোয়ান খাতায় লেখেন “রহিম — তিন তলা”। এরপর রহিমের চিঠি সরাসরি তিন তলায় — forward. আর রহিমের রুমমেট যদি রহিমকেই চিঠি দিতে আসেন, দারোয়ান বলেন “উনি তো আপনার সাথেই থাকেন, এখানে কেন?” — filter. দীর্ঘদিন কেউ না এলে খাতা থেকে নাম কেটে দেন — aging.
একটি ৪ port-এর switch ধরুন। PC1, PC2, PC3 port ১, ২, ৩-এ; আর port ৪-এ একটি পুরোনো hub, তাতে PC4 আর PC5. ঠিকানাগুলো 00:00:5e:00:53:11, …:22, …:33, …:44, …:55 — সংক্ষেপে শেষ বাইট দিয়ে লিখছি। টেবিল প্রথমে খালি। পাঁচটি frame-এ কী ঘটে, দেখুন:
| Frame | |
| শেখা (source) | |
| সিদ্ধান্ত (destination) | |
| MAC table |
- প্রথম frame: শেখা আর flood. PC1 পাঠাল PC3-কে। Switch উৎস দেখে শিখল “..11 থাকে port 1-এ”। কিন্তু গন্তব্য ..33 টেবিলে নেই, তাই আসার port (১) বাদে বাকি সব port-এ — ২, ৩, ৪ — flood. PC2, PC4, PC5 frame-টি পেয়ে দেখে গন্তব্য নিজের নয়, ফেলে দেয়; PC3 গ্রহণ করে।
- উত্তর: এবার forward. PC3 উত্তর দিল PC1-কে। উৎস দেখে switch শিখল “..33 → port 3”. গন্তব্য ..11 এখন টেবিলে আছে (port 1), তাই frame গেল শুধু port 1-এ। প্রথম frame-এর flood-এর পরিশ্রম কাজে লাগল — এক আদান-প্রদানেই দুজনকে চেনা হয়ে গেল।
- Broadcast সবসময় flood. PC4 একটি broadcast পাঠাল (যেমন ARP request — পর্ব ১৮)। উৎস থেকে শেখা হলো “..44 → port 4”. গন্তব্য
ff:ff:ff:ff:ff:ffকোনো একজনের নয়, তাই টেবিল যত ভরাই থাকুক, broadcast যায় আসার port বাদে সব port-এ — ১, ২, ৩. Switch broadcast domain ভাঙে না, এটিই তার প্রমাণ। - শেখা ঠিকানায় সরাসরি। PC1 পাঠাল PC4-কে। ..11-এর ঘর আবার দেখা গেল, তাই শুধু শেষ-দেখার সময় হালনাগাদ হলো (aging-এর ঘড়ি নতুন করে শুরু)। গন্তব্য ..44 আছে port 4-এ — forward শুধু port 4-এ। Hub সেটি PC4 আর PC5 দুজনকেই দেবে; PC5 নিজের নয় দেখে ফেলে দেবে।
- Filter: একই port-এ গন্তব্য। PC5 পাঠাল PC4-কে, hub-এর মাধ্যমে। Hub তো frame-টি PC4-কে আগেই পৌঁছে দিয়েছে, আর switch-এও এসেছে port 4 দিয়ে। Switch শিখল “..55 → port 4”, তারপর দেখল গন্তব্য ..44-ও port 4-এ — অর্থাৎ যেখান থেকে এসেছে সেখানেই। তাই কোথাও পাঠাল না: filter. এটিই bridge-এর আদি উদ্দেশ্য — স্থানীয় traffic স্থানীয় segment-এ রাখা।
একই ঘটনাগুলো কোডে চালান, সাথে একটি ষষ্ঠ frame — ৪০০ সেকেন্ড পরে, যখন সবার ঘরের বয়স ৩০০ সেকেন্ড পেরিয়ে গেছে:
// A 4-port learning switch. PC4 and PC5 share port 4 through a hub.
const AGING = 300; // seconds an unused entry is kept
const BCAST = "ff:ff:ff:ff:ff:ff";
const table = new Map(); // MAC -> { port, seen }
const others = p => [1, 2, 3, 4].filter(x => x !== p).join(",");
const mac = { PC1: "00:00:5e:00:53:11", PC2: "00:00:5e:00:53:22",
PC3: "00:00:5e:00:53:33", PC4: "00:00:5e:00:53:44", PC5: "00:00:5e:00:53:55" };
const frames = [ // [time in s, in-port, source, destination]
[0, 1, "PC1", "PC3"], [1, 3, "PC3", "PC1"], [2, 4, "PC4", "ALL"],
[3, 1, "PC1", "PC4"], [4, 4, "PC5", "PC4"], [400, 2, "PC2", "PC1"],
];
for (const [t, inPort, src, dst] of frames) {
for (const [m, e] of table) // 1. aging
if (t - e.seen > AGING) { table.delete(m); console.log(` t=${t}: aged out ${m}`); }
table.set(mac[src], { port: inPort, seen: t }); // 2. learn from SOURCE
const d = dst === "ALL" ? BCAST : mac[dst]; // 3. decide by DESTINATION
let action;
if (d === BCAST) action = "broadcast -> FLOOD to ports " + others(inPort);
else if (!table.has(d)) action = "unknown dst -> FLOOD to ports " + others(inPort);
else if (table.get(d).port === inPort) action = "dst is on the same port -> FILTER (drop)";
else action = "FORWARD only to port " + table.get(d).port;
console.log(`t=${t} port ${inPort}: ${src} -> ${dst}: ${action}`);
console.log(" MAC table: " + // show "last byte @ port"
[...table].map(([m, e]) => `..${m.slice(-2)}@${e.port}`).join(" "));
}আউটপুট (নির্ধারিত — প্রতিবার একই):
t=0 port 1: PC1 -> PC3: unknown dst -> FLOOD to ports 2,3,4
MAC table: ..11@1
t=1 port 3: PC3 -> PC1: FORWARD only to port 1
MAC table: ..11@1 ..33@3
t=2 port 4: PC4 -> ALL: broadcast -> FLOOD to ports 1,2,3
MAC table: ..11@1 ..33@3 ..44@4
t=3 port 1: PC1 -> PC4: FORWARD only to port 4
MAC table: ..11@1 ..33@3 ..44@4
t=4 port 4: PC5 -> PC4: dst is on the same port -> FILTER (drop)
MAC table: ..11@1 ..33@3 ..44@4 ..55@4
t=400: aged out 00:00:5e:00:53:11
t=400: aged out 00:00:5e:00:53:33
t=400: aged out 00:00:5e:00:53:44
t=400: aged out 00:00:5e:00:53:55
t=400 port 2: PC2 -> PC1: unknown dst -> FLOOD to ports 1,3,4
MAC table: ..22@2
প্রথম পাঁচ লাইন-জোড়া stepper-এর সাথে হুবহু মেলে — flood, forward, flood, forward, filter. প্রতিটি লাইনের পরে টেবিল দেখাচ্ছে “শেষ বাইট@port”. খেয়াল করুন, কোডে শেখা (table.set) সিদ্ধান্তের আগে — তাই PC5 → PC4 frame-এও PC5 শেখা হয়েছে, যদিও frame-টি filter হলো। এরপর t=400: চারটি ঘরই ৩০০ সেকেন্ডের বেশি পুরোনো (PC1 শেষ দেখা গেছে t=3-এ, ৩৯৭ সেকেন্ড আগে), তাই সব মুছে গেল। PC2 যখন PC1-কে পাঠাল, switch আর PC1-কে চেনে না — আবার flood. PC1 উত্তর দিলেই আবার শেখা হবে। Aging-এর এই ঝুঁকি বাস্তব: কোনো যন্ত্র শুধু শোনে কিন্তু কখনো পাঠায় না (যেমন কিছু নিরাপত্তা ক্যামেরার রেকর্ডার), তার জন্য switch বারবার flood করতে পারে — নাম “unknown unicast flooding”.
বাস্তব switch-এর টেবিলের আকার সীমিত (মডেলভেদে কয়েক হাজার থেকে লাখের ঘরে)। ভরে গেলে নতুন ঠিকানা শেখা যায় না, অচেনা গন্তব্যের সব frame flood হয় — এর প্রতিরক্ষা অংশ ৮-এ। Linux-ও একটি software switch চালাতে পারে — bridge interface, যা container আর VM-কে জোড়ে; সেখানে bridge fdb show কমান্ডে এই টেবিল দেখা যায়, আর ডিফল্ট aging সময়ও ৩০০ সেকেন্ড।
৬ · Store-and-forward বনাম cut-through
Switch frame পাঠানো শুরু করবে কখন — পুরো frame পাওয়ার পরে, নাকি গন্তব্য ঠিকানা পড়ামাত্র? দুটি পদ্ধতিই চালু আছে:
- Store-and-forward: পুরো frame buffer-এ নেয়, FCS মিলিয়ে দেখে, তারপর পাঠায়। ভাঙা frame এখানেই থামে, সামনে ছড়ায় না। আর দুই port-এর গতি আলাদা হলে (যেমন ১ Gb/s থেকে ১০ Gb/s) এটিই একমাত্র উপায়। পর্ব ০৪-০৫-এর delay-হিসাবে আমরা ঠিক এই মডেলটিই ধরেছি।
- Cut-through: preamble-এর পরে গন্তব্য MAC-এর ৬ বাইট পড়েই টেবিল দেখে পাঠানো শুরু করে — frame-এর বাকি অংশ তখনো আসছে। দেরি কম, কিন্তু FCS যাচাই আগে হয় না: ভাঙা frame-ও সামনে চলে যায় (শেষে প্রাপক ফেলে দেবে)। একটি মাঝামাঝি রূপ fragment-free: প্রথম ৬৪ বাইট পেয়ে তারপর শুরু, কারণ পুরোনো শেয়ার করা Ethernet-এ collision-এ ভাঙা টুকরো সাধারণত ৬৪ বাইটের কম হতো।
পূর্ণ সমাধান করা উদাহরণ
প্রশ্ন: দুটি কম্পিউটারের মাঝে ৩টি switch, সব link ১ Gb/s. ১৫১৮ বাইটের একটি frame পাঠানো হলো। Propagation আর processing delay উপেক্ষা করে, (ক) store-and-forward আর (খ) cut-through (গন্তব্যের ৬ বাইট পেলেই শুরু) switch-এ শেষ বিট পৌঁছাতে কত সময় লাগবে?
- একটি link-এ পুরো frame-এর transmission delay = ১৫১৮ × ৮ ÷ ১০৯ = ১২,১৪৪ ÷ ১০৯ সেকেন্ড = ১২.১৪৪ µs.
- (ক) Store-and-forward: পথে ৪টি link, প্রতিটিতে পুরো frame নতুন করে পাঠাতে হয় → ৪ × ১২.১৪৪ = ৪৮.৫৭৬ µs.
- (খ) Cut-through: প্রেরক একবার পুরো frame পাঠায় (১২.১৪৪ µs), আর প্রতিটি switch শুধু ৬ বাইট = ৪৮ বিট = ০.০৪৮ µs পিছিয়ে থাকে → ১২.১৪৪ + ৩ × ০.০৪৮ = ১২.২৮৮ µs.
প্রায় চার গুণ পার্থক্য! তবু সবাই cut-through নয়, কারণ ইন্টারনেটের মিলিসেকেন্ডের দেরির পাশে ১২ µs নগণ্য, আর output port ব্যস্ত থাকলে cut-through switch-কেও frame জমিয়ে রাখতে হয়। যেখানে প্রতিটি মাইক্রোসেকেন্ডের দাম আছে — যেমন high-frequency trading বা কিছু HPC cluster — সেখানে cut-through জনপ্রিয় বলে জানা যায়।
৭ · Loop-এর বিপদ আর Spanning Tree Protocol
একটি switch নষ্ট হলে পুরো অফিস অচল — তাই প্রকৌশলীরা বাড়তি তার দিয়ে বিকল্প পথ রাখেন (redundancy). কিন্তু switch-এর জগতে বিকল্প পথ মানে loop, আর loop মানে বিপর্যয়। কেন?
- Ethernet frame-এ কোনো TTL নেই। IP packet-এর TTL প্রতিটি router-এ কমে, ০ হলে মারা যায় (পর্ব ১৬, ২০)। Frame-এর এমন কিছু নেই — loop-এ সে চিরকাল ঘুরতে পারে।
- Broadcast গুণিতক হারে বাড়ে। তিনটি switch ত্রিভুজে জোড়া থাকলে একটি broadcast দুই দিকে flood হয়, প্রতিটি switch আবার অন্য দিকে flood করে — কপিগুলো দুই দিকেই ঘুরতে থাকে, আর প্রতিটি নতুন broadcast আরও কপি যোগ করে। কয়েক সেকেন্ডে link ভরে যায়, switch-এর CPU আটকে যায়, সব কম্পিউটারকে প্রতিটি কপি পড়তে হয় — একে বলে broadcast storm.
- MAC table অস্থির হয়। একই উৎস MAC-এর frame একবার এক port-এ, একবার অন্য port-এ আসে, তাই switch বারবার ঘর বদলায় (MAC flapping) — unicast-ও ভুল দিকে যায়।
একটি গ্রামের তিন বাড়ির মধ্যে খবর পৌঁছানোর নিয়ম: “নতুন খবর শুনলে অন্য সব প্রতিবেশীকে জানান।” একজন একটি গুজব ছড়ালেন। দুই প্রতিবেশী শুনে একে অপরকে আর প্রথমজনকে জানালেন, তাঁরা আবার… কেউ মনে রাখে না খবরটি আগে শোনা কি না, তাই গুজব কখনো থামে না, বরং কপি বাড়তেই থাকে। সমাধান: কিছু পথ বন্ধ করে দেওয়া, যাতে খবর প্রতিটি বাড়িতে ঠিক একবার পৌঁছায় — অর্থাৎ পথগুলোকে একটি গাছে (tree) রূপ দেওয়া।
গ্রাফ তত্ত্বের ভাষায়: switch আর link মিলে একটি graph; এর একটি spanning tree হলো এমন কিছু link-এর সেট যা সব switch-কে জোড়ে কিন্তু কোনো cycle রাখে না। Spanning Tree Protocol (STP) switch-গুলোকে নিজেরা কথা বলে এমন একটি গাছ বানাতে দেয়, আর বাকি link-গুলোকে বন্ধ (blocked) রাখে — কোনো link নষ্ট হলে বন্ধ link খুলে নতুন গাছ বানায়।
এই algorithm-এর নকশাকারী Radia Perlman, যিনি DEC-এ কাজ করার সময় এটি তৈরি করেন; ১৯৮৫ সালের একটি প্রবন্ধে প্রকাশিত হয়, পরে IEEE 802.1D মানের অংশ হয়। সঙ্গে তিনি “Algorhyme” নামে একটি ছোট কবিতাও লেখেন, যার শুরু “I think that I shall never see / A graph more lovely than a tree.”
STP-র চারটি নিয়ম
Switch-গুলো একে অপরকে ছোট বার্তা পাঠায় — BPDU (Bridge Protocol Data Unit), group ঠিকানা 01:80:c2:00:00:00-এ, ডিফল্টে প্রতি ২ সেকেন্ডে। প্রতিটি BPDU বলে: “আমার মতে root কে, সেখানে পৌঁছাতে আমার খরচ কত, আর আমি কে।” এগুলো তুলনা করে চারটি ধাপ হয়:
- Root bridge নির্বাচন: সবচেয়ে ছোট bridge ID যার। Bridge ID = ২ বাইট priority (ডিফল্ট ৩২৭৬৮) + ৬ বাইট MAC. আগে priority তুলনা, সমান হলে MAC. তাই ছোট priority বসিয়ে admin নিজের পছন্দের switch-কে root করতে পারেন।
- প্রতিটি অ-root switch-এ একটি root port: যে port দিয়ে root পর্যন্ত মোট path cost সবচেয়ে কম। সমান হলে: যে প্রতিবেশীর কাছ থেকে BPDU আসছে, তার bridge ID ছোট; তাও সমান হলে প্রতিবেশীর port ID ছোট।
- প্রতিটি link-এ (segment-এ) একটি designated port: link-এর দুই প্রান্তের মধ্যে যে root-এর কাছে কম খরচে — সেটি ওই link-এর জন্য frame পাঠানোর দায়িত্ব নেয়। সমান হলে ছোট bridge ID. Root-এর সব port designated.
- বাকি সব port blocked: যে port root port-ও নয়, designated-ও নয়, সে ডেটা frame পাঠায়ও না, গ্রহণও করে না — শুধু BPDU শোনে, যাতে দরকারে আবার জেগে উঠতে পারে।
Path cost আসে link-এর গতি থেকে — যত দ্রুত, তত সস্তা। পুরোনো ১৯৯৮ সালের মানের প্রচলিত মান: ১০ Mb/s = ১০০, ১০০ Mb/s = ১৯, ১ Gb/s = ৪, ১০ Gb/s = ২. দ্রুততর link-এর জন্য পরে একটি “long” পদ্ধতি এসেছে (যেমন ১ Gb/s = ২০,০০০, ১০ Gb/s = ২,০০০), আর vendor-ভেদে ডিফল্ট আলাদা হতে পারে — পরীক্ষার প্রশ্নে সাধারণত cost বলে দেওয়া থাকে।
চার switch-এর একটি সম্পূর্ণ উদাহরণ
চারটি switch A, B, C, D একটি বর্গের মতো জোড়া — A–B, A–C, B–D, C–D, সব link ১ Gb/s (cost ৪)। সবার priority ৩২৭৬৮, শুধু admin C-র priority বসিয়েছেন ৪০৯৬. MAC-এর শেষ বাইট: A = 0a, B = 0b, C = 0c, D = 0d. Port নম্বর:
p1 p1
A ─────────────── B A: 32768.00:00:5e:00:53:0a
p2 │ │ p2 B: 32768.00:00:5e:00:53:0b
│ │ C: 4096.00:00:5e:00:53:0c
p1 │ │ p1 D: 32768.00:00:5e:00:53:0d
C ─────────────── D
p2 p2 সব link cost 4 (1 Gb/s)
| Root bridge | |
| Root path cost | |
| Root port | |
| Designated port | |
| Blocked port |
- শুরুতে সবাই root দাবি করে। চালু হওয়ামাত্র প্রতিটি switch নিজেকে root ধরে BPDU পাঠায়: “root = আমি, খরচ ০”। প্রতিবেশীর BPDU-তে আরও ছোট bridge ID দেখলে সে নিজের দাবি ছেড়ে সেটি মেনে নেয় আর সামনে প্রচার করে। কয়েক বার আদান-প্রদানে সবাই একমত হয়।
- Root = C. চারটি bridge ID-র মধ্যে priority-ই আগে তুলনা হয়: C-র 4096, বাকিদের 32768. তাই MAC তুলনার দরকারই পড়ল না — C root, যদিও A-র MAC সবচেয়ে ছোট। Admin যদি priority না বদলাতেন, তবে সবচেয়ে ছোট MAC-এর A root হতো — আর সেটি প্রায়ই সবচেয়ে পুরোনো যন্ত্র! এজন্য বাস্তবে root হাতে বেছে দেওয়াই ভালো অভ্যাস।
- Root পর্যন্ত খরচ। C নিজে ০. A আর D সরাসরি C-র সাথে যুক্ত: ৪ করে। B-র দুটি পথ: A হয়ে ৪ + ৪ = ৮, অথবা D হয়ে ৪ + ৪ = ৮ — সমান! খরচ ৮ ঠিকই, কিন্তু কোন port root port হবে, তা ঠিক করতে tie-breaker লাগবে।
- Root port. A-র root port p2 (C-র দিকে, খরচ ৪), D-র p2 (C-র দিকে)। B-র দুই পথে খরচ সমান, তাই পরের নিয়ম: যে প্রতিবেশী BPDU পাঠাচ্ছে, তার bridge ID ছোট কার? A (32768.…0a) বনাম D (32768.…0d) — A ছোট। তাই B-র root port p1 (A-র দিকে)।
- Designated port — প্রতি link-এ একটি। Root C-র দুটি port-ই designated. A–B link-এ A-র খরচ ৪, B-র ৮ → A:p1 designated. B–D link-এ D-র ৪, B-র ৮ → D:p1 designated. A–C আর C–D link-এর অন্য প্রান্ত তো root port. এখন প্রতিটি link-এর দুই প্রান্তের ভূমিকা জানা — একটি ছাড়া।
- Blocked: B:p2. B-র p2 (D-র দিকে) root port নয় (সেটি p1), designated-ও নয় (সেটি D:p1). তাই blocked. বর্গের loop ভাঙল: এখন B থেকে D-তে frame যায় B → A → C → D. B–D তারটি অপেক্ষায় আছে — A–B বা A–C কাটা পড়লে STP সেটি খুলে দেবে।
এখন একই হিসাব কোডে, সাথে একটি প্রশ্ন: C–D link যদি ধীর হয় — ১০০ Mb/s, cost ১৯ — তাহলে কোন port বন্ধ হবে?
// Classic STP (802.1D) on 4 switches: root bridge, root ports, designated ports.
const sw = { A: [32768, "00:00:5e:00:53:0a"], B: [32768, "00:00:5e:00:53:0b"],
C: [4096, "00:00:5e:00:53:0c"], D: [32768, "00:00:5e:00:53:0d"] };
const bid = s => String(sw[s][0]).padStart(5, "0") + "." + sw[s][1]; // priority.MAC, compared as text
function stp(links) { // link = [sw1, port1, sw2, port2, cost]
const root = Object.keys(sw).sort((x, y) => bid(x) < bid(y) ? -1 : 1)[0];
const cost = { [root]: 0 }; // root path cost (Bellman-Ford, tiny graph)
for (let i = 0; i < 4; i++) for (const [a, , b, , c] of links) {
if (a in cost && (cost[a] + c < (cost[b] ?? Infinity))) cost[b] = cost[a] + c;
if (b in cost && (cost[b] + c < (cost[a] ?? Infinity))) cost[a] = cost[b] + c;
}
const ends = links.flatMap(([a, pa, b, pb, c]) => [[a, pa, b, pb, c], [b, pb, a, pa, c]]);
const rp = {}; // root port: lowest (cost, neighbour BID, port)
for (const s of Object.keys(sw)) if (s !== root) {
const key = e => [String(cost[e[2]] + e[4]).padStart(6, "0"), bid(e[2]), e[3]].join("|");
rp[s] = ends.filter(e => e[0] === s).sort((x, y) => key(x) < key(y) ? -1 : 1)[0][1];
}
console.log(`root bridge = ${root} (bridge ID ${sw[root][0]}.${sw[root][1]})`);
console.log("root path cost: " + Object.keys(sw).map(s => `${s}=${cost[s]}`).join(" "));
console.log("root ports: " + Object.entries(rp).map(([s, p]) => `${s}:p${p}`).join(" "));
for (const [a, pa, b, pb] of links) { // designated = end with lower (cost, BID)
const aWins = cost[a] < cost[b] || (cost[a] === cost[b] && bid(a) < bid(b));
const [dS, dP, oS, oP] = aWins ? [a, pa, b, pb] : [b, pb, a, pa];
const other = rp[oS] === oP ? "root port" : "BLOCKED";
console.log(` link ${a}-${b}: designated ${dS}:p${dP}, ${oS}:p${oP} ${other}`);
}
}
console.log("== all links 1 Gb/s (cost 4) ==");
stp([["A", 1, "B", 1, 4], ["A", 2, "C", 1, 4], ["B", 2, "D", 1, 4], ["C", 2, "D", 2, 4]]);
console.log("== C-D link is 100 Mb/s (cost 19) ==");
stp([["A", 1, "B", 1, 4], ["A", 2, "C", 1, 4], ["B", 2, "D", 1, 4], ["C", 2, "D", 2, 19]]);আউটপুট:
== all links 1 Gb/s (cost 4) ==
root bridge = C (bridge ID 4096.00:00:5e:00:53:0c)
root path cost: A=4 B=8 C=0 D=4
root ports: A:p2 B:p1 D:p2
link A-B: designated A:p1, B:p1 root port
link A-C: designated C:p1, A:p2 root port
link B-D: designated D:p1, B:p2 BLOCKED
link C-D: designated C:p2, D:p2 root port
== C-D link is 100 Mb/s (cost 19) ==
root bridge = C (bridge ID 4096.00:00:5e:00:53:0c)
root path cost: A=4 B=8 C=0 D=12
root ports: A:p2 B:p1 D:p1
link A-B: designated A:p1, B:p1 root port
link A-C: designated C:p1, A:p2 root port
link B-D: designated B:p2, D:p1 root port
link C-D: designated C:p2, D:p2 BLOCKED
প্রথম অংশ stepper-এর সাথে মেলে: root C, খরচ A=4, B=8, C=0, D=4, root port A:p2, B:p1, D:p2, আর blocked B:p2. কোডে root port বাছাইয়ের চাবি তিন স্তরের — (মোট খরচ, প্রতিবেশীর bridge ID, প্রতিবেশীর port) — ঠিক 802.1D-র tie-breaker-এর ক্রম। দ্বিতীয় অংশে মজা: C–D link-এর cost ১৯ হতেই D-র জন্য সরাসরি পথ (১৯) ঘুরপথের (D → B → A → C = ৪ + ৪ + ৪ = ১২) চেয়ে দামি। তাই D-র root port হলো p1 (B-র দিকে), খরচ ১২, আর root-এর সাথে সরাসরি যুক্ত C–D link-টিই বন্ধ হলো (D:p2 BLOCKED). STP “কম hop” নয়, “কম মোট cost” খোঁজে — ঠিক Dijkstra-র মতো সবচেয়ে ছোট পথের গাছ (পর্ব ২৪-এ link state routing-এ আবার দেখবেন)। কোডে খরচ বের করতে ছোট একটি Bellman-Ford লুপ ব্যবহার হয়েছে; বিস্তারিত পর্ব ২৩-এ।
Port-এর অবস্থা আর সময়
ক্লাসিক STP-তে একটি port blocked থেকে সরাসরি forwarding-এ যায় না — হঠাৎ খুললে অস্থায়ী loop হতে পারে। তাই ধাপগুলো: blocking (শুধু BPDU শোনে) → listening (BPDU পাঠায়, ভূমিকা ঠিক করে) → learning (MAC শেখে, এখনো ডেটা পাঠায় না) → forwarding. ডিফল্ট টাইমার: hello ২ সেকেন্ড, max age ২০ সেকেন্ড, forward delay ১৫ সেকেন্ড। একটি link নষ্ট হলে পরোক্ষভাবে টের পেতে max age (২০) পর্যন্ত অপেক্ষা, তারপর listening (১৫) আর learning (১৫) — মোট প্রায় ৩০ থেকে ৫০ সেকেন্ড নেটওয়ার্কের একটি অংশ অচল। ১৯৯০-এর দশকে এটি মেনে নেওয়া যেত; আজকের ভিডিও কল আর অনলাইন লেনদেনের যুগে নয়।
৮ · RSTP, link aggregation আর switch-এর নিরাপত্তা
RSTP — দ্রুত spanning tree
RSTP (Rapid Spanning Tree Protocol, 802.1w, পরে 802.1D-2004-এর ভেতরে মিশে যায়) একই root-port-designated হিসাব রাখে, কিন্তু কয়েকটি বুদ্ধিমান বদলে সময় সেকেন্ডের নিচে বা কয়েক সেকেন্ডে নামিয়ে আনে: blocked port-গুলোর দুটি নতুন ভূমিকা — alternate (root-এর দিকে তৈরি বিকল্প পথ, root port মরলেই সাথে সাথে দায়িত্ব নেয়) আর backup; অবস্থা মাত্র তিনটি — discarding, learning, forwarding; টাইমারের অপেক্ষার বদলে প্রতিবেশীর সাথে সরাসরি “proposal/agreement” হাত মেলানো; আর কম্পিউটার যুক্ত port-কে edge port ঘোষণা করলে সেটি সঙ্গে সঙ্গে forwarding-এ যায়। ওপরের উদাহরণে B:p2 RSTP-তে হতো একটি alternate port — A–B link কাটলে প্রায় সাথে সাথেই B-র নতুন root port. VLAN থাকলে প্রতিটি VLAN বা VLAN-গোষ্ঠীর জন্য আলাদা গাছও বানানো যায় (IEEE-র MSTP, Cisco-র PVST+); VLAN নিজে পর্ব ১৩-এ।
Link aggregation — দুটি তার, একটি link
দুই switch-এর মাঝে দুটি তার দিলে STP একটিকে বন্ধ করে দেবে — কিন্তু আপনি তো দুটিরই গতি চান। সমাধান link aggregation: কয়েকটি সমান্তরাল link-কে একটি যৌক্তিক link হিসেবে দেখানো (Cisco-র ভাষায় EtherChannel, Linux-এ bond). দুই প্রান্ত নিজেদের মধ্যে কথা বলে এটি ঠিক করে LACP (Link Aggregation Control Protocol) দিয়ে — মূলত 802.3ad, পরে 802.1AX নামে আলাদা মান। দুটি জিনিস মনে রাখুন। প্রথমত, STP পুরো bundle-কে একটি link হিসেবে দেখে, তাই কিছুই বন্ধ হয় না; একটি তার কাটলে বাকিগুলো চলতে থাকে। দ্বিতীয়ত, frame কোন তারে যাবে তা ঠিক হয় MAC, IP বা port-এর hash দিয়ে — একই সংযোগ (flow) সবসময় একই তারে, যাতে frame-এর ক্রম না ভাঙে। তাই ২ × ১ Gb/s bundle-এ একটি বড় ফাইল ডাউনলোড ১ Gb/s-এর বেশি পাবে না; লাভ হয় অনেক ব্যবহারকারী একসাথে থাকলে।
MAC flooding আর port security — প্রতিরক্ষার দিক থেকে
Switch সহজেই যেকোনো উৎস MAC বিশ্বাস করে শেখে — এই সরলতাই তার দুর্বলতা। ধারণাগতভাবে, কোনো যন্ত্র যদি হাজার হাজার ভুয়া উৎস ঠিকানার frame পাঠায়, switch-এর সীমিত টেবিল ভরে যায় (MAC flooding). তখন আসল যন্ত্রগুলোর ঠিকানা শেখা যায় না, অচেনা গন্তব্যের সব frame সব port-এ flood হয় — অর্থাৎ যে traffic শুধু দুজনের মধ্যে যাওয়ার কথা, তা অন্যদের port-এও পৌঁছায়। আবার কেউ নিজের switch লাগিয়ে খুব ছোট priority-র BPDU পাঠালে root হয়ে নেটওয়ার্কের পথ ঘুরিয়ে দিতে পারে, বা ভুল করে একটি তারের দুই প্রান্ত একই switch-এ লাগিয়ে loop বানাতে পারে। প্রতিরক্ষা:
- Port security: প্রতিটি access port-এ সর্বোচ্চ কয়টি MAC শেখা যাবে তার সীমা (যেমন ১ বা ২); সীমা পেরোলে frame ফেলে দেওয়া, সতর্কবার্তা, বা port বন্ধ — নীতিভেদে।
- 802.1X: port-এ তার লাগালেই নেটওয়ার্ক নয়; আগে পরিচয় যাচাই (username/certificate). MAC-এর চেয়ে অনেক শক্ত পরিচয়।
- BPDU guard আর root guard: কম্পিউটারের port-এ BPDU এলে port বন্ধ; আর যে port-এর দিক থেকে root আসার কথা নয়, সেখানে “ভালো” BPDU এলে তা উপেক্ষা — যাতে অচেনা switch root হতে না পারে।
- Storm control আর পর্যবেক্ষণ: broadcast/multicast-এর হারের সীমা, MAC flapping-এর লগ আর সতর্কবার্তা, অব্যবহৃত port বন্ধ রাখা।
ARP spoofing আর DHCP snooping-এর মতো এই স্তরের অন্য হুমকি ও প্রতিরক্ষা পর্ব ১৮ আর ৫০-এ।
আরও গভীরে: আধুনিক switch-এর “মস্তিষ্ক” দুই ভাগে: control plane (CPU-তে চলে STP, LACP-র মতো protocol) আর data plane (ASIC-এ প্রতিটি frame-এর সিদ্ধান্ত)। অনেক switch-এ MAC table আসলে খাঁটি CAM নয়, hash-ভিত্তিক মেমরি বলে জানা যায় — তাই একই hash-এ পড়া অনেক ঠিকানা টেবিল পুরো না ভরেও জায়গা না পেতে পারে। Data center-এ এখন বড় L2 domain আর STP এড়িয়ে চলার প্রবণতা: প্রতিটি link-কে L3 (routing) বানিয়ে ECMP দিয়ে সব পথ একসাথে ব্যবহার করা হয়, আর দরকারি L2 যোগাযোগ VXLAN দিয়ে IP-র ওপর বহন করা হয় (পর্ব ৫২)। STP-র বিকল্প হিসেবে Radia Perlman নিজেই পরে TRILL প্রস্তাব করেছিলেন, আর IEEE-র SPB (802.1aq) — দুটিই L2-তে routing-এর ধারণা আনে।
বাস্তব switch-এ কেমন দেখায়
নিচে একটি Cisco IOS-ধাঁচের switch-এর আউটপুট — উদাহরণ, অন্য vendor-এর কমান্ড আর ফর্ম্যাট আলাদা (Juniper-এ show ethernet-switching table, Linux bridge-এ bridge fdb show). Port-এর নাম, VLAN আর ঠিকানা এই পর্বের উদাহরণের সাথে মিলিয়ে বানানো:
SW1# show mac address-table dynamic
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0000.5e00.5311 DYNAMIC Gi1/0/1
1 0000.5e00.5333 DYNAMIC Gi1/0/3
1 0000.5e00.5344 DYNAMIC Gi1/0/4
1 0000.5e00.5355 DYNAMIC Gi1/0/4
Total Mac Addresses for this criterion: 4
SW1# show mac address-table aging-time
Global Aging Time: 300একই port Gi1/0/4-এ দুটি ঠিকানা — সেখানে hub বা আরেকটি switch, অথবা কোনো কম্পিউটারের ভেতরে VM আছে।
৯ · AI-এর যুগে switching
“Switch কীভাবে কাজ করে” প্রশ্নে AI চমৎকার ব্যাখ্যা দেয়। কিন্তু domain গোনা, STP-র tie-breaker বা configuration-এ তার ভুল খুব সাধারণ — আর STP-র ভুল configuration পুরো অফিসের নেটওয়ার্ক বন্ধ করে দিতে পারে। এই বিষয়ে AI-এর পরিচিত ভুল:
| AI-এর ভুল | উদাহরণ | কীভাবে যাচাই করবেন |
|---|---|---|
| Domain ভুল গোনা | Hub-এর প্রতিটি PC-কে আলাদা collision domain; switch-কে broadcast domain ভাঙার যন্ত্র বলা | অংশ ৪-এর নিয়ম ধরে segment ধরে ধরে নিজে গুনুন |
| STP-র tie-breaker উল্টো | “বড় bridge ID root হয়”, root port-এ নিজের port ID আগে তুলনা | 802.1D-র ক্রম: খরচ → প্রতিবেশীর bridge ID → প্রতিবেশীর port ID; ছোট simulator চালান |
| পুরোনো বা ভুল cost | ১০ Gb/s-এর জন্য ১৯ বা ৪ বলা, short আর long cost গুলিয়ে ফেলা | Switch-এ আসলে কোন পদ্ধতি চালু, তার ডকুমেন্টেশন ও show আউটপুট দেখুন |
| Vendor কমান্ডকে সার্বজনীন বলা | Cisco IOS কমান্ড দিয়ে “সব switch-এ এভাবে” বলা | যন্ত্রের নির্মাতা ও OS সংস্করণ উল্লেখ করে জিজ্ঞেস করুন; অফিশিয়াল গাইড মিলিয়ে নিন |
| বিপজ্জনক পরামর্শ | “সমস্যা হলে spanning tree বন্ধ করুন”, “port security বন্ধ করে দিন” | STP কখনো বন্ধ নয়; কারণ খুঁজুন, ল্যাবে আগে পরীক্ষা করুন |
| বানানো মান বা RFC | ভুল 802.x নম্বর, Ethernet-এর মানকে RFC বলা | Ethernet-এর মান IEEE-র (802.3, 802.1D/Q), RFC নয়; নম্বর আর শিরোনাম মিলিয়ে নিন |
STP বা domain-এর হিসাব AI-কে দিয়ে করালে ধাপ দেখাতে আর অনুমান আলাদা করতে বলুন:
AI-এর দেওয়া switching-উত্তর মানার আগে — চেকলিস্ট
পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:
- Hub, switch আর router-এর পার্থক্য collision ও broadcast domain দিয়ে বলুন। — Hub কিছুই ভাগ করে না; switch-এর প্রতিটি port আলাদা collision domain কিন্তু একটি broadcast domain; router-এর প্রতিটি interface দুটিই আলাদা করে।
- Switch কীভাবে MAC table বানায়? — আসা frame-এর source MAC আর port লিখে রাখে; destination চেনা হলে forward, একই port হলে filter, অচেনা বা broadcast হলে flood; পুরোনো ঘর aging-এ মুছে যায়।
- Ethernet frame-এর সর্বনিম্ন ও সর্বোচ্চ আকার? — ৬৪ আর ১৫১৮ বাইট (preamble বাদে; VLAN tag থাকলে সর্বোচ্চ ১৫২২); payload ৪৬–১৫০০.
- STP-তে root bridge কীভাবে বাছাই হয়? — সবচেয়ে ছোট bridge ID (আগে priority, তারপর MAC) যার; root-এর সব port designated.
- MAC ঠিকানা locally administered কি না কীভাবে বুঝবেন? — প্রথম বাইটের দ্বিতীয় সর্বনিম্ন বিট (U/L) ১ হলে; সহজে, দ্বিতীয় hex অঙ্ক ২, ৬, A বা E হলে (unicast-এর ক্ষেত্রে)।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১১৯৮০-র দশকে Token Ring-এর মতো “আরও শৃঙ্খলাবদ্ধ” প্রতিদ্বন্দ্বী থাকা সত্ত্বেও Ethernet কেন জিতল?
১৯৮০-র দশকে অফিসের LAN-এর বাজারে কয়েকটি প্রযুক্তি লড়ছিল। IBM-এর Token Ring (পরে IEEE 802.5) ছিল সবচেয়ে শক্ত প্রতিদ্বন্দ্বী। Token Ring-এ একটি “টোকেন” ঘুরে বেড়ায়; যার হাতে টোকেন, শুধু সে পাঠাতে পারে — তাই collision নেই, আর সবচেয়ে খারাপ ক্ষেত্রেও কত দেরি হবে, তা আগে থেকে হিসাব করা যায়। কাগজে-কলমে এটি Ethernet-এর “যে আগে পারে” (CSMA/CD) পদ্ধতির চেয়ে বেশি শৃঙ্খলাবদ্ধ, আর ভারী load-এ বেশি দক্ষ বলে যুক্তি দেওয়া হতো।
তবু Ethernet জিতল, আর কারণগুলো প্রযুক্তির চেয়ে বেশি অর্থনীতি আর নকশা-দর্শনের:
- সরলতা আর দাম: Ethernet-এর কার্ড আর যন্ত্র সরল, তাই সস্তা। DIX-এর উন্মুক্ত বিবরণের ফলে অনেক কোম্পানি বানাতে পারত — প্রতিযোগিতায় দাম আরও কমল। Token Ring-এর যন্ত্র তুলনায় দামি ছিল বলে প্রচলিত বর্ণনা।
- Twisted pair আর hub: ১৯৯০ নাগাদ 10BASE-T এসে Ethernet-কে টেলিফোনের মতো সাধারণ তারে আর star-এ নিয়ে এল — বসানো, সমস্যা খোঁজা সহজ হলো।
- Switch সব হিসাব বদলে দিল: Ethernet-এর সবচেয়ে বড় দুর্বলতা ছিল collision. Switch আর full-duplex এসে collision-ই মুছে দিল। তখন Token Ring-এর প্রধান সুবিধার আর দাম থাকল না।
- গতির দৌড়: ১০০ Mb/s Fast Ethernet দ্রুত আর সস্তায় এল, যখন Token Ring ১৬ Mb/s-এ আটকে ছিল বলে জানা যায়। তারপর Gigabit — একই frame, একই ধারণা।
আজকের ৪০০ Gb/s Ethernet-এর সাথে ১৯৭৩-এর coax-এর প্রায় কিছুই মেলে না — শুধু frame আর নামটি ছাড়া।
মূল উপলব্ধি: “যথেষ্ট ভালো, সস্তা আর পরিবর্তনশীল” প্রযুক্তি প্রায়ই “নিখুঁত কিন্তু দামি ও অনমনীয়” প্রযুক্তিকে হারায় — ঠিক যেমন TCP/IP OSI-কে হারিয়েছিল (পর্ব ০৩)। আর একটি প্রযুক্তি টিকে যায় যখন তার ইন্টারফেস (এখানে frame) স্থির থাকে কিন্তু ভেতর বদলাতে পারে।
প্র ০২MAC ঠিকানা কি সত্যিই “অনন্য” আর “স্থায়ী”? এর ওপর নিরাপত্তা বা পরিচয় দাঁড় করানো কেন বিপজ্জনক?
পাঠ্যবই প্রায়ই বলে, MAC ঠিকানা “কারখানায় বসানো, বিশ্বে অনন্য, বদলায় না”। তিনটি দাবিই আংশিক সত্য।
- অনন্য? IEEE-র OUI ব্যবস্থার উদ্দেশ্য অনন্যতা, আর বড় নির্মাতারা সাধারণত তা মানেন। কিন্তু বাস্তবে কিছু সস্তা যন্ত্রে একই ঠিকানা একাধিক কার্ডে পাওয়ার ঘটনা শোনা যায়, আর virtual machine, container বা random MAC-এ তো ঠিকানা software-এর বানানো। সৌভাগ্যক্রমে MAC শুধু এক LAN-এর ভেতরে অনন্য হলেই চলে — দুটি একই ঠিকানা আলাদা শহরের নেটওয়ার্কে থাকলে কারও সমস্যা নেই।
- স্থায়ী? কার্ডে একটি “burned-in” ঠিকানা থাকে, কিন্তু OS যেকোনো ঠিকানা দিয়ে frame পাঠাতে পারে — Linux, Windows, macOS সবখানেই সাধারণ সেটিং বা কমান্ডে interface-এর MAC বদলানো যায় (প্রশাসকের অনুমতি লাগে)। ফোনের random MAC তো এর আনুষ্ঠানিক রূপ।
- পরিচয়ের প্রমাণ? না। Frame-এর source MAC প্রেরক নিজেই লেখে, কেউ যাচাই করে না। তাই “MAC filtering” দিয়ে Wi-Fi সুরক্ষিত করা দুর্বল নিয়ন্ত্রণ: যে কেউ বাতাসে অনুমোদিত একটি ঠিকানা দেখে নিজের যন্ত্রে বসাতে পারে, অন্তত তত্ত্বে।
আসল প্রতিরক্ষা তাই cryptographic পরিচয়: তারের নেটওয়ার্কে 802.1X (certificate বা username/password, যাচাই হয় একটি RADIUS সার্ভারে), Wi-Fi-তে WPA2/WPA3-Enterprise বা অন্তত শক্ত password (পর্ব ১৪), আর ওপরের স্তরে TLS (পর্ব ৪৮)। MAC-কে ব্যবহার করুন ব্যবস্থাপনার কাজে — কোন যন্ত্র কোথায়, DHCP-তে নির্দিষ্ট ঠিকানা সংরক্ষণ — কিন্তু “এই যন্ত্রটি বিশ্বস্ত” প্রমাণে নয়।
গোপনীয়তার দিকও আছে: স্থায়ী MAC একজন মানুষকে বিভিন্ন জায়গায় অনুসরণের সহজ শনাক্তকারী — এজন্যই ফোনে randomization এসেছে।
মূল উপলব্ধি: নেটওয়ার্কে প্রেরক নিজে যে তথ্য লেখে, তা যাচাই ছাড়া পরিচয়ের প্রমাণ নয়। পরিচয় চাইলে চাই গোপন চাবি বা certificate — ঠিকানা নয়।
প্র ০৩Ethernet-এর MTU ১৫০০ বাইট কেন, আর দশকের পর দশক তা বদলানো এত কঠিন কেন?
১৫০০ সংখ্যাটির পেছনে কোনো গভীর গাণিতিক প্রমাণ নেই; এটি ১৯৭০-৮০-র দশকের একটি প্রকৌশল-সমঝোতা বলে সাধারণত ব্যাখ্যা করা হয়। বড় frame-এ header-এর ভাগ কম, তাই দক্ষতা বেশি। কিন্তু তখনকার NIC-এ মেমরি ছিল দামি — পুরো frame ধরে রাখতে buffer লাগে, আর বড় frame মানে বড় buffer. আবার শেয়ার করা তারে একটি বিশাল frame চলাকালীন অন্য সবাইকে অপেক্ষা করতে হয় — ন্যায্যতা আর দেরির প্রশ্ন। আর CRC-32-এর ত্রুটি ধরার ক্ষমতাও frame-এর দৈর্ঘ্য বাড়লে কমে। এই সব টানাপোড়েনের মাঝামাঝি বিন্দু হিসেবে ১৫০০ বেছে নেওয়া হয়েছিল বলে প্রচলিত বর্ণনা।
আজ মেমরি সস্তা আর গতি হাজার গুণ, তবু ১৫০০ বদলায় না। কারণ এটি এখন ইন্টারনেটের একটি অলিখিত চুক্তি:
- পথের সবচেয়ে ছোট MTU-ই সীমা: আপনার কম্পিউটার আর সার্ভারের মাঝে ১৫টি link থাকলে একটিও যদি শুধু ১৫০০ পর্যন্ত সমর্থন করে, তার চেয়ে বড় packet সেখানে আটকাবে। পুরো ইন্টারনেটের সব যন্ত্র একসাথে বদলানো অসম্ভব।
- Path MTU Discovery-র ভঙ্গুরতা: বড় packet আটকালে প্রেরককে ICMP বার্তায় জানানোর কথা (পর্ব ২০), কিন্তু অনেক firewall ICMP আটকে দেয় — ফলে সংযোগ “ঝুলে” থাকে, একে বলে PMTU black hole. এই অভিজ্ঞতা মানুষকে বড় MTU-র ঝুঁকি নিতে অনিচ্ছুক করেছে।
- উল্টো দিকে চাপ: PPPoE ৮ বাইট নেয়, VPN আর tunnel আরও — অনেক পথে কার্যকর MTU ১৫০০-এর কম।
তাই jumbo frame সফল হয়েছে কেবল নিয়ন্ত্রিত জায়গায় — data center, storage নেটওয়ার্ক — যেখানে একটি প্রতিষ্ঠান সব যন্ত্র নিয়ন্ত্রণ করে। আর গতির সমস্যা অন্যভাবে সমাধান হয়েছে: TSO/GRO-র মতো offload (পর্ব ০৩), যাতে OS বড় টুকরো নিয়ে কাজ করে কিন্তু তারে ১৫০০-ই যায়।
মূল উপলব্ধি: যে সংখ্যা সবাই ধরে নেয়, সেটি প্রযুক্তিগত সীমা না হয়েও কার্যত স্থায়ী হয়ে যায়। নেটওয়ার্কে “একটি ছোট বদল” মানে প্রায়ই পৃথিবীর সব যন্ত্রের সমন্বয় — যা কখনো একসাথে হয় না।
প্র ০৪Spanning tree loop থামায়, কিন্তু অর্ধেক তার অলস ফেলে রাখে। Data center কেন STP থেকে সরে গেল, আর পরিবর্তে কী এল?
STP-র মূল নকশাটি ১৯৮০-র দশকের অফিসের জন্য: কয়েকটি bridge, কিছু বাড়তি তার, আর loop হলে বিপর্যয়। সেই প্রেক্ষাপটে এটি অসাধারণ — কোনো কেন্দ্রীয় নিয়ন্ত্রক ছাড়াই switch-গুলো নিজেরা একটি loop-মুক্ত গাছ বানায়, আর কোনো তার কাটলে নিজেরাই সারিয়ে নেয়। কিন্তু একটি বড় data center-এর দৃষ্টিতে তিনটি সমস্যা প্রকট:
- অলস ক্ষমতা: গাছে প্রতিটি switch থেকে root পর্যন্ত একটিই পথ। বাড়তি link সব blocked — টাকা দিয়ে কেনা ব্যান্ডউইডথ বসে থাকে। Data center-এ সার্ভার থেকে সার্ভারে (“east-west”) traffic বিশাল, সেখানে সব পথ একসাথে চাই।
- খারাপ পথ: সব traffic root-এর দিকে গাছ বেয়ে যায়; দুটি পাশাপাশি switch-এর মধ্যেও ঘুরপথ হতে পারে। Root ভুল জায়গায় হলে (যেমন সবচেয়ে ছোট MAC-এর একটি পুরোনো switch) পুরো নেটওয়ার্কের traffic সেখান দিয়ে।
- বিপর্যয়ের পরিধি: একটি বড় L2 domain মানে একটি বড় broadcast domain আর একটি বড় ব্যর্থতার এলাকা। ভুল configuration বা একটি নষ্ট যন্ত্রে loop হলে পুরো এলাকা ডুবে যায় — অনেক বড় outage-এর পেছনে L2 loop বা broadcast storm ছিল বলে প্রকৌশলীদের অভিজ্ঞতায় শোনা যায়।
পরিবর্তে যা এল: প্রথমত, L3 সর্বত্র — leaf-spine নকশায় (পর্ব ৫২) প্রতিটি switch-to-switch link একটি routed link; routing protocol (যেমন BGP বা OSPF) ECMP দিয়ে সমান খরচের সব পথে traffic ভাগ করে, আর IP-র TTL loop-কে নিজেই থামায়। দ্বিতীয়ত, যেখানে L2 দরকার (যেমন VM-কে এক সার্ভার থেকে আরেকটিতে সরানো, ঠিকানা না বদলে), সেখানে overlay — VXLAN-এর মতো প্রযুক্তি Ethernet frame-কে UDP/IP-র ভেতরে মুড়ে L3 নেটওয়ার্কের ওপর দিয়ে বহন করে। তৃতীয়ত, দুটি switch মিলে একটি যৌক্তিক switch হিসেবে link aggregation দুই যন্ত্রে ছড়ায় (MLAG, vendor-ভেদে নাম আলাদা), তাতে blocked link এড়ানো যায়।
তবু অফিস, ক্যাম্পাস আর ছোট নেটওয়ার্কে STP/RSTP আজও চালু, আর থাকা উচিত — কারণ কেউ ভুল করে একটি তারের দুই প্রান্ত একই switch-এ লাগালে সেটিই বাঁচায়।
মূল উপলব্ধি: STP “নিরাপত্তার জাল” — loop থেকে রক্ষা করে, কিন্তু ক্ষমতা ব্যবহার করে না। বড় পরিসরে প্রকৌশলীরা loop প্রতিরোধের দায় দিয়েছেন routing আর TTL-কে, আর L2-কে ছোট রেখেছেন।
প্র ০৫“Switch করা নেটওয়ার্কে অন্য কারও traffic দেখা যায় না” — এই বিশ্বাস কতটা সত্য? Switch কি নিরাপত্তার যন্ত্র?
Hub-এর যুগে একটি LAN-এর যেকোনো কম্পিউটার সবার traffic দেখতে পারত — NIC-কে “promiscuous mode”-এ দিলেই সব frame পাওয়া যেত। Switch আসার পর অনেকে ধরে নিলেন, এখন প্রতিটি port শুধু নিজের frame পায়, তাই নেটওয়ার্ক “নিরাপদ”। এই বিশ্বাস আংশিক সত্য, কিন্তু বিপজ্জনকভাবে আংশিক।
- Flood ঘটে স্বাভাবিকভাবেই: broadcast, অচেনা গন্তব্য (unknown unicast), আর অনেক multicast সব port-এ যায়। ARP request, DHCP, mDNS — এসব থেকে একটি LAN-এর বহু তথ্য (কোন যন্ত্র, কোন নাম) যেকোনো port থেকেই জানা যায়।
- টেবিলের দুর্বলতা: অংশ ৮-এ যেমন দেখলেন, MAC table ভরে গেলে switch flood-এ চলে যায়। আর ARP-এর দুর্বলতা (পর্ব ১৮) দিয়ে কোনো যন্ত্র নিজেকে অন্যের ঠিকানা বলে দাবি করতে পারে, তত্ত্বে traffic নিজের দিকে টেনে। এগুলো ধারণা হিসেবে জানা দরকার, যাতে প্রতিরক্ষা বোঝা যায়।
- Switch নিজেও দেখাতে পারে: port mirroring (SPAN) দিয়ে admin একটি port-এর traffic অন্য port-এ কপি করেন — সমস্যা খোঁজা বা IDS-এর জন্য (পর্ব ৫০, ৫৫)।
তাই switch হলো একটি পারফরম্যান্স যন্ত্র যার কিছু পার্শ্ব-সুবিধা আছে নিরাপত্তায় — নিরাপত্তার যন্ত্র নয়। আসল প্রতিরক্ষা কয়েক স্তরে: switch-এ port security, 802.1X, DHCP snooping আর dynamic ARP inspection (vendor-ভেদে নাম আলাদা), BPDU guard; নেটওয়ার্কের নকশায় VLAN দিয়ে ভাগ করা (পর্ব ১৩) আর অব্যবহৃত port বন্ধ রাখা; আর সবচেয়ে গুরুত্বপূর্ণ — end-to-end encryption (HTTPS, SSH, VPN). আধুনিক “zero trust” ধারণা ঠিক এটাই বলে: LAN-এর ভেতরে আছেন বলেই কাউকে বিশ্বাস নয়; প্রতিটি সংযোগ নিজেই encrypt আর যাচাই করা।
মূল উপলব্ধি: নেটওয়ার্কের কাঠামো (switch, VLAN) traffic আলাদা রাখে, কিন্তু গোপনীয়তার নিশ্চয়তা দেয় cryptography. “আমাদের LAN তো switch-এর, তাই নিরাপদ” — এই অনুমান কখনো করবেন না।
অনুশীলন
খাতা-কলম নিয়ে বসুন — হিসাবগুলো নিজে করে তারপর উত্তর মেলান।
-
হাতে গোনা (domain): একটি router-এর তিনটি interface ব্যবহৃত। Interface ১-এ একটি ২৪ port-এর switch, তাতে ২০টি PC (প্রতিটি আলাদা port-এ)। Interface ২-এ একটি hub, তাতে ৬টি PC. Interface ৩-এ একটি switch, তাতে ৩টি PC আর একটি hub (hub-এ ৪টি PC). কোনো VLAN নেই। মোট কয়টি collision domain আর কয়টি broadcast domain?
- Interface ১-এর দিক: switch-এর ২০টি PC-port + router-এর সাথে link ১ = ২১.
- Interface ২-এর দিক: hub-এর পুরো segment (router-এর interface-সহ) = ১.
- Interface ৩-এর দিক: switch-এর ৩টি PC-port + hub-এর port ১ (hub-এর ৪টি PC মিলে) + router-এর সাথে link ১ = ৫.
মোট collision domain = ২১ + ১ + ৫ = ২৭. Broadcast domain = router-এর ব্যবহৃত interface = ৩. খেয়াল করুন — switch-এর অব্যবহৃত ৪টি port গোনা হয়নি; প্রশ্নে সাধারণত শুধু যুক্ত link গোনা হয়।
-
হাতে trace (MAC table): একটি ৩ port-এর switch, টেবিল খালি। A port ১-এ, B port ২-এ, C port ৩-এ। ক্রমে পাঁচটি frame: (১) A → B, (২) B → A, (৩) C → broadcast, (৪) A → C, (৫) D → A, যেখানে D নতুন একটি যন্ত্র, port ২-এ লাগানো (B-র সাথে একটি hub-এ)। প্রতিটির পর টেবিল আর সিদ্ধান্ত লিখুন।
- শেখা A → 1; B অচেনা → flood port ২, ৩. টেবিল: A→1.
- শেখা B → 2; A চেনা → forward port ১. টেবিল: A→1, B→2.
- শেখা C → 3; broadcast → flood port ১, ২. টেবিল: A→1, B→2, C→3.
- A-র সময় হালনাগাদ; C চেনা → forward port ৩.
- শেখা D → 2; A চেনা → forward port ১. টেবিল: A→1, B→2, C→3, D→2.
শেষে port ২-এ দুটি ঠিকানা (B আর D) — switch-এর পক্ষে এতে কোনো সমস্যা নেই। এরপর B → D পাঠালে দুজনেই port ২-এ, তাই switch filter করবে; hub নিজেই D-কে পৌঁছে দেবে।
-
আউটপুট অনুমান করুন: অংশ ৭-এর STP calculator-এ C-র priority 4096 থেকে বদলে 32768 করুন (বাকি সব অপরিবর্তিত, সব link cost ৪)। প্রথম অংশে root, root path cost আর blocked port কী ছাপা হবে?
সবার priority সমান, তাই MAC তুলনা: সবচেয়ে ছোট
…0a— A root. খরচ: A=0, B=4 (A–B), C=4 (A–C), D=8 (B হয়ে ৪ + ৪, বা C হয়ে ৪ + ৪ — সমান)। D-র tie-breaker: প্রতিবেশী B (…0b) বনাম C (…0c) — B ছোট, তাই D-র root port p1 (B-র দিকে)। C–D link-এ C-র খরচ ৪, D-র ৮ → C:p2 designated, আর D:p2 root port নয় — blocked. ছাপা হবে:root bridge = A (bridge ID 32768.00:00:5e:00:53:0a) root path cost: A=0 B=4 C=4 D=8 root ports: B:p1 C:p1 D:p1 link A-B: designated A:p1, B:p1 root port link A-C: designated A:p2, C:p1 root port link B-D: designated B:p2, D:p1 root port link C-D: designated C:p2, D:p2 BLOCKEDএখন loop ভাঙছে C–D link-এ। শিক্ষা: root কে হবে, তার ওপর পুরো গাছ নির্ভর করে — তাই বাস্তবে root আর তার বিকল্প (secondary root) হাতে priority দিয়ে বেছে রাখা হয়।
-
কমান্ড লিখুন: একটি Linux কম্পিউটারে (ক) সব interface-এর MAC দেখার দুটি উপায় লিখুন — একটি
ipদিয়ে, একটি/sysফাইল পড়ে। (খ) MAC8a:6e:8f:9e:5c:c6local না universal, unicast না multicast — হাতে বের করুন।(ক)
ip -br link(বাip link show) — প্রতিটি interface-এর লাইনে MAC; অথবাcat /sys/class/net/*/address, কোনটি কার তা দেখতেgrep . /sys/class/net/*/address. Linux bridge-এর শেখা টেবিল দেখতেbridge fdb show. পুরোনোifconfigঅনেক নতুন distribution-এ ডিফল্টে থাকে না। Windows-এgetmacবা PowerShell-এGet-NetAdapter.(খ) প্রথম বাইট 0x8a = 1000 1010. Bit 0 = ০ → unicast; bit 1 = ১ → locally administered. সহজ কৌশলেও মেলে: দ্বিতীয় hex অঙ্ক “a”. এটি আসলে এই কোর্সের পর্ব ০৬-এ দেখা container-এর virtual interface-এর একটি ঠিকানা — software-এর বানানো।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমSpanning Tree Protocol একটি loop-মুক্ত গাছ বানাতে কোন ক্রমে কাজ করে, সাজান (▲▼ চেপে সরান)
- প্রতিটি switch নিজেকে root দাবি করে BPDU পাঠায়
- সবচেয়ে ছোট bridge ID-র switch root bridge হয়
- প্রতিটি অ-root switch সবচেয়ে কম খরচের root port বাছে
- প্রতিটি link-এ একটি designated port ঠিক হয়
- বাকি port blocked হয়
একটি switch-এর MAC table খালি। Port 1-এ আসা একটি frame-এর গন্তব্য MAC টেবিলে নেই। Switch কী করবে?
- Frame ফেলে দেবে
- শুধু port 1-এ ফেরত পাঠাবে
- উৎস MAC শিখে আসার port বাদে সব port-এ flood করবে
- গন্তব্য খুঁজতে ARP request পাঠাবে
একটি router-এর দুটি interface. একটিতে একটি switch (৪টি PC আলাদা port-এ), অন্যটিতে একটি hub (৩টি PC). কোনো VLAN নেই। Collision domain আর broadcast domain কয়টি?
- ৮টি collision, ২টি broadcast
- ৬টি collision, ২টি broadcast
- ৬টি collision, ৫টি broadcast
- ৫টি collision, ২টি broadcast
MAC ঠিকানা 02:00:5e:10:00:01-এর প্রথম বাইট 0x02. এটি কোন ধরনের ঠিকানা?
- Broadcast
- Multicast
- Universally administered unicast
- Locally administered unicast
STP-তে চারটি switch-এর bridge ID: W = 32768.00:00:5e:00:53:01, X = 32768.00:00:5e:00:53:02, Y = 8192.00:00:5e:00:53:09, Z = 32768.00:00:5e:00:53:00. কোনটি root bridge হবে?
- Y
- Z
- W
- X
১ Gb/s link-এ ১৫১৮ বাইটের frame, দুই host-এর মাঝে ২টি store-and-forward switch (মোট ৩টি link). Propagation আর processing উপেক্ষা করলে শেষ বিট পৌঁছাতে মোট transmission সময় কত?
- ১২.১৪৪ µs
- ২৪.২৮৮ µs
- ৩৬.৪৩২ µs
- ২৯১.৪৫৬ µs
Ethernet frame-এর type/length ঘরে মান 0x0806 পাওয়া গেল। এর অর্থ কী?
- Payload-এর দৈর্ঘ্য ২০৫৪ বাইট
- এটি EtherType — ভেতরে ARP
- এটি EtherType — ভেতরে IPv4
- একটি VLAN tag আছে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Ethernet II frame: গন্তব্য ৬ + উৎস ৬ + EtherType ২ + payload ৪৬–১৫০০ + FCS ৪ = ৬৪ থেকে ১৫১৮ বাইট; type ঘরের মান ≥ 0x0600 হলে EtherType, ≤ ১৫০০ হলে length.
- MAC ঠিকানা ৪৮ বিট: প্রথম ৩ বাইট OUI; প্রথম বাইটের bit 0 (I/G) unicast না group, bit 1 (U/L) universal না local — ফোনের random MAC-এ U/L = ১.
- Domain: hub কিছুই ভাগ করে না; switch-এর প্রতিটি port আলাদা collision domain, কিন্তু সব মিলে একটি broadcast domain; router-এর প্রতিটি interface দুটিই আলাদা করে।
- Switch source MAC থেকে শেখে, destination MAC দেখে forward, filter বা flood করে, ৩০০ সেকেন্ডের মতো পরে ঘর মোছে; store-and-forward নিরাপদ, cut-through দ্রুত।
- STP: সবচেয়ে ছোট bridge ID root; প্রতিটি অ-root switch-এ সবচেয়ে কম খরচের root port; প্রতিটি link-এ একটি designated port; বাকি blocked — tie হলে প্রতিবেশীর bridge ID, তারপর port ID. RSTP একই কাজ সেকেন্ডের মধ্যে করে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ১৩ · VLAN আর trunking — এক switch-এ অনেক নেটওয়ার্কপরবর্তী পর্ব802.1Q tag, access আর trunk port, VLAN-এর মধ্যে routing.
- পর্ব ১১ · Multiple access — ALOHA, CSMA/CD আর CSMA/CAআগের পর্বশেয়ার করা তারে collision আর ৬৪ বাইটের নিম্নসীমার প্রমাণ।
- কম্পিউটার নেটওয়ার্ক · কোর্স হোম৬২টি পর্বপুরো কোর্সের রোডম্যাপ — কোন স্তর কোন মডিউলে।
- DSA · Minimum spanning treeপাশের ট্র্যাকSpanning tree-র গ্রাফ তত্ত্ব — Kruskal আর Prim.
- DSA · Hash tableগভীরে যানSwitch-এর MAC table যে ধারণায় দ্রুত খোঁজে।