এই পর্বে যা শিখবেন
- চার রকম পাঠানো, multicast কোথায় লাভজনক, আর IPv4 multicast ঠিকানার পরিসর ও MAC-এ রূপান্তর (হাতে আর কোডে)
- IGMP-র join, leave আর query, IGMP snooping switch-এর টেবিল, আর IPv6-এ MLD
- Source tree বনাম shared tree, RPF check, flood-and-prune বনাম explicit join (PIM-DM, PIM-SM, SSM) — আর কেন ইন্টারনেট-জুড়ে multicast জমেনি
- ভয়েস আর ভিডিওর delay, jitter, loss-এর বাজেট; DSCP আর 802.1p চিহ্ন, trust boundary, policing বনাম shaping আর token bucket-এর হিসাব
- LLQ, IntServ বনাম DiffServ, MPLS-TE, ECN, net neutrality আর বাসার Wi-Fi-র WMM
১ · একজনকে, সবাইকে, দলকে, কাছেরজনকে — চার রকম পাঠানো
এ পর্যন্ত প্রায় সব packet ছিল একজন প্রেরক থেকে একজন প্রাপকের দিকে। কিন্তু অনেক কাজে একই ডেটা একসাথে অনেকের দরকার — একটি টিভি চ্যানেল হাজার বাড়িতে। প্রত্যেককে আলাদা কপি পাঠালে প্রেরকের link ভেঙে পড়ে। এই পর্বের প্রথম অর্ধেক এর নেটওয়ার্ক-স্তরের সমাধান — multicast. দ্বিতীয় অর্ধেক অন্য প্রশ্ন: সবাই যখন একই লাইনে, কার packet আগে যাবে — QoS.
| ধরন | কে পায় | ঠিকানার উদাহরণ | দৈনন্দিন তুলনা |
|---|---|---|---|
| Unicast | একজন নির্দিষ্ট প্রাপক | 192.0.2.10, একটি সাধারণ MAC | কুরিয়ারে একটি পার্সেল, একটি ঠিকানায় |
| Broadcast | একই LAN-এর (broadcast domain) সবাই, চাক বা না চাক | 255.255.255.255, ff:ff:ff:ff:ff:ff | মহল্লার মসজিদের মাইকে ঘোষণা — সবাই শোনে |
| Multicast | যারা দলে যোগ দিয়েছে, তারা — যেকোনো জায়গায় | 239.1.1.1, 01:00:5e:01:01:01, ff02::1 | টিভির একটি চ্যানেল — যে বাড়ি ওই চ্যানেল ধরেছে, শুধু সে দেখে |
| Anycast | একই ঠিকানার কয়েকজনের মধ্যে routing-এর হিসাবে সবচেয়ে কাছেরজন | বড় পাবলিক DNS resolver-এর ঠিকানা | “নিকটস্থ শাখায় যোগাযোগ করুন” — ব্যাংকের যেকোনো শাখা একই সেবা দেয় |
Router broadcast পার করে না (পর্ব ১৮); IPv6-এ broadcast নেই, তার কাজ করে multicast (পর্ব ২১)। Anycast-এর আলাদা ঠিকানা নেই — একই prefix কয়েক জায়গা থেকে BGP-তে ঘোষণা করলেই হয় (পর্ব ২৫, ৩৮)।
Multicast কেন — একটি হিসাব
ধরুন একটি অফিসে একটি ভিডিও সম্প্রচার চলছে, প্রতিটি stream ৪ Mbps, দেখছেন ১০০ জন। Unicast-এ সার্ভারকে ১০০টি আলাদা stream পাঠাতে হয় — সার্ভারের link-এ ১০০ × ৪ = ৪০০ Mbps, আর পথের প্রতিটি ভাগাভাগির link-এ একই ডেটার অনেক কপি। Multicast-এ সার্ভার পাঠায় একটি stream, ৪ Mbps; router আর switch শুধু যেখানে পথ ভাগ হয় সেখানে কপি বানায়। ফলে প্রতিটি link-এ এই চ্যানেলের সর্বোচ্চ একটি কপি — দর্শক ১০০ হোক বা ১০,০০০.
Unicast: S থেকে ১০০টি কপি Multicast: S থেকে ১টি কপি
S ══(100 কপি)══ R1 S ──(1)── R1
╱ ╲ ╱ ╲
(60 কপি) (40 কপি) (1) (1)
R2 R3 R2 R3
60 জন 40 জন 60 জন 40 জন
বাস্তবে multicast চলে যেখানে একই ডেটা একই মুহূর্তে অনেকের দরকার:
- IPTV: অনেক দেশে ISP নিজের নেটওয়ার্কে সরাসরি সম্প্রচারের চ্যানেল multicast-এ পাঠায় — চ্যানেল বদলানো মানে এক দল ছেড়ে আরেক দলে যোগ দেওয়া। (চাহিদামতো ভিডিও একেকজন একেক সময়ে দেখে — তাই সেটি unicast আর CDN, পর্ব ৩৮ ও ৪০।)
- শেয়ারবাজারের ডেটা আর OS imaging: অনেক এক্সচেঞ্জ দামের হালনাগাদ multicast feed-এ ছাড়ে, আর অনেক ল্যাব-টুল একসাথে বহু কম্পিউটারে একই disk image পাঠাতে multicast ব্যবহার করতে পারে।
- নেটওয়ার্কের নিজের কাজ: OSPF 224.0.0.5/6-এ কথা বলে (পর্ব ২৪), mDNS 224.0.0.251-এ প্রিন্টার খোঁজে, IPv6-এর neighbor discovery চলে multicast-এ।
টিভিতে ক্রিকেট ম্যাচ: চ্যানেল প্রতিটি বাড়িতে আলাদা করে পাঠায় না — একটি সম্প্রচার, যে টিভি ওই চ্যানেলে আছে সে দেখে। Multicast আরও চালাক — যে গলিতে কেউ ওই চ্যানেল চায়নি, সেই গলির তারে ম্যাচের ডেটা যায়ই না। কে চেয়েছে আর কোন গলি দিয়ে পাঠাতে হবে — এই হিসাবই multicast-এর কাজ।
Multicast প্রায় সবসময় UDP-র ওপর চলে: TCP দুজনের সংযোগ, আর হাজার জনের ACK ফিরে এলে প্রেরক ডুবে যেত (ACK implosion). হারানো packet সামলায় অ্যাপ্লিকেশন — যেমন FEC দিয়ে (পর্ব ০৯)।
২ · Multicast ঠিকানা — পরিসর আর MAC-এ রূপান্তর
IPv4-এ multicast ঠিকানা মানে প্রথম চার bit 1110 — অর্থাৎ 224.0.0.0/4, পুরোনো ভাষায় Class D (পর্ব ১৬)। একটি multicast ঠিকানা কোনো যন্ত্রের নয়, একটি দলের। প্রেরক সাধারণ unicast উৎস ঠিকানা দিয়ে গন্তব্যে দলের ঠিকানা লেখে; multicast ঠিকানা কখনো উৎস হয় না। পরিসরের ভেতরে কয়েকটি গুরুত্বপূর্ণ ভাগ:
| পরিসর | নাম আর কাজ | Router পার হয়? | উদাহরণ |
|---|---|---|---|
224.0.0.0/24 | Local Network Control Block — শুধু এই link-এর protocol-এর জন্য | না (সাধারণত TTL ১) | 224.0.0.1 সব host, 224.0.0.2 সব router, 224.0.0.5/6 OSPF, 224.0.0.13 PIM, 224.0.0.22 IGMPv3, 224.0.0.251 mDNS |
224.0.1.0/24 | Internetwork Control Block — বাইরেও যেতে পারে এমন নিয়ন্ত্রণ-traffic | হ্যাঁ | 224.0.1.1 NTP |
232.0.0.0/8 | Source-Specific Multicast (RFC 4607) — প্রাপক উৎসও বেছে নেয় | হ্যাঁ | IPTV-র (S, 232.x.x.x) চ্যানেল |
239.0.0.0/8 | Administratively scoped (RFC 2365) — প্রতিষ্ঠানের ভেতরে ব্যবহারের জন্য, private ঠিকানার মতো | প্রতিষ্ঠানের ভেতরে হ্যাঁ, সীমানায় আটকানো হয় | অফিসের ভিডিও, ল্যাবের imaging |
| বাকি অংশ | বিশ্বব্যাপী দল, IANA-র বরাদ্দ বা নানা বিশেষ ব্যবস্থা | হ্যাঁ | — |
IPv6-এ multicast ঠিকানা ff00::/8, আর ঠিকানার ভেতরেই একটি scope-এর ঘর (যেমন ff02 = link-local, ff05 = site-local) — পর্ব ২১-এ দেখেছেন। বাকিটা এখানে IPv4 ধরে।
IP দল থেকে Ethernet MAC — শুধু ২৩ bit
LAN-এ packet যায় frame-এ, আর frame-এর গন্তব্য MAC চাই। Unicast-এ MAC খুঁজতে ARP লাগে (পর্ব ১৮); multicast-এ ARP নেই — MAC সরাসরি দলের ঠিকানা থেকে হিসাব করা হয় (RFC 1112):
- প্রথম ২৫ bit স্থির:
01:00:5eআর তারপর একটি ০ bit. প্রথম byte-এর সবচেয়ে কম মানের bit ১ — অর্থাৎ group ঠিকানা (I/G bit, পর্ব ১২)। - বাকি ২৩ bit = IP দলের ঠিকানার শেষ ২৩ bit.
কিন্তু IP দলের ঠিকানায় চলমান bit আছে ২৮টি (প্রথম চারটি সবসময় 1110). ২৮ − ২৩ = ৫টি bit MAC-এ হারিয়ে যায়, তাই ২৫ = ৩২টি আলাদা IP দল একই MAC পায়. হাতে করে দেখি — 239.1.1.1:
239.1.1.1 = 1110 1111 . 0000 0001 . 0000 0001 . 0000 0001
^^^^ ^^^^ ^
স্থির হারানো ৫ bit (প্রথম byte-এর শেষ ৪ + দ্বিতীয় byte-এর প্রথম ১)
শেষ ২৩ bit = 000 0001 . 0000 0001 . 0000 0001 = 01 . 01 . 01
MAC = 01:00:5e + 01:01:01 = 01:00:5e:01:01:01
দ্বিতীয় byte থেকে শুধু শেষ ৭ bit নেওয়া হয় (দ্বিতীয় byte & 0x7f). তাই 224.1.1.1, 225.129.1.1 (129 = 10000001), 238.129.1.1 — সবাই একই MAC 01:00:5e:01:01:01. প্রথম byte ২২৪ থেকে ২৩৯ — ১৬ রকম, দ্বিতীয় byte-এর প্রথম bit ০ বা ১ — ২ রকম: ১৬ × ২ = ৩২.
নিচের simulator দুটি কাজ করে। প্রথম অংশ কয়েকটি দলের MAC হিসাব করে আর গুনে দেখায় 239.1.1.1-এর MAC আর কতগুলো দল ভাগ করে। দ্বিতীয় অংশ একটি IGMP snooping switch-এর টেবিল চালায় — পরের অংশের বিষয়, তবে MAC আর port একসাথে দেখতে এখানেই রাখা হলো। Switch-এর port 1-এ router (stream সেখান দিয়ে ঢোকে), port 2–6-এ host.
// Part 1: IPv4 group -> Ethernet MAC (RFC 1112): 01:00:5e + the low 23 bits of the group.
const hex = n => n.toString(16).padStart(2, "0");
function groupMac(ip) {
const o = ip.split(".").map(Number);
return ["01", "00", "5e", hex(o[1] & 0x7f), hex(o[2]), hex(o[3])].join(":");
}
for (const g of ["224.0.0.1", "224.0.0.251", "239.1.1.1", "224.1.1.1", "225.129.1.1", "238.129.1.1"])
console.log(g.padEnd(12), "->", groupMac(g));
let same = 0; // how many groups share the MAC of 239.1.1.1?
for (let first = 224; first <= 239; first++)
for (const second of [1, 129])
if (groupMac(`${first}.${second}.1.1`) === groupMac("239.1.1.1")) same++;
console.log("groups sharing 01:00:5e:01:01:01 =", same);
// Part 2: an IGMP snooping switch. The stream for each group enters on port 1 (router).
const members = new Map(); // group -> Set of host ports
function step(what, type, port, group) {
if (!members.has(group)) members.set(group, new Set());
if (type === "join") members.get(group).add(port);
if (type === "leave") members.get(group).delete(port);
const out = g => [...(members.get(g) || [])].sort().join(",") || "none";
console.log(what.padEnd(36), "| 239.1.1.1 ->", out("239.1.1.1").padEnd(5),
"| 239.2.2.2 ->", out("239.2.2.2"));
}
console.log("\nevent (switch ports 2-6 have hosts) | ports that get each stream");
step("port 5 TV: Report 239.1.1.1", "join", 5, "239.1.1.1");
step("port 3 PC: Report 239.1.1.1", "join", 3, "239.1.1.1");
step("port 4 PC: Report 239.2.2.2", "join", 4, "239.2.2.2");
step("port 3 PC: Leave 239.1.1.1", "leave", 3, "239.1.1.1");
step("general query; ports 4, 5 report", "none", 0, "239.1.1.1");
step("port 5 unplugged, 260 s no report", "leave", 5, "239.1.1.1");
console.log("without snooping every stream -> 2,3,4,5,6");আউটপুট:
224.0.0.1 -> 01:00:5e:00:00:01
224.0.0.251 -> 01:00:5e:00:00:fb
239.1.1.1 -> 01:00:5e:01:01:01
224.1.1.1 -> 01:00:5e:01:01:01
225.129.1.1 -> 01:00:5e:01:01:01
238.129.1.1 -> 01:00:5e:01:01:01
groups sharing 01:00:5e:01:01:01 = 32
event (switch ports 2-6 have hosts) | ports that get each stream
port 5 TV: Report 239.1.1.1 | 239.1.1.1 -> 5 | 239.2.2.2 -> none
port 3 PC: Report 239.1.1.1 | 239.1.1.1 -> 3,5 | 239.2.2.2 -> none
port 4 PC: Report 239.2.2.2 | 239.1.1.1 -> 3,5 | 239.2.2.2 -> 4
port 3 PC: Leave 239.1.1.1 | 239.1.1.1 -> 5 | 239.2.2.2 -> 4
general query; ports 4, 5 report | 239.1.1.1 -> 5 | 239.2.2.2 -> 4
port 5 unplugged, 260 s no report | 239.1.1.1 -> none | 239.2.2.2 -> 4
without snooping every stream -> 2,3,4,5,6
প্রথম অংশ: 224.0.0.1 (সব host-এর দল) → 01:00:5e:00:00:01, mDNS-এর 224.0.0.251 → শেষ byte ২৫১ = fb. তারপর চারটি আলাদা দল — 239.1.1.1, 224.1.1.1, 225.129.1.1, 238.129.1.1 — সবাই 01:00:5e:01:01:01. লুপটি ২২৪–২৩৯ আর দ্বিতীয় byte ১ বা ১২৯-এর সব জোড়া পরীক্ষা করে পেয়েছে ঠিক ৩২টি — হাতের হিসাবের সাথে মিলেছে।
ফল: 239.1.1.1-এ যোগ দেওয়া কম্পিউটারের card 224.1.1.1-এর frame-ও নেয়, kernel-কে IP header দেখে ছাঁকতে হয়; আর শুধু MAC দেখা snooping switch দুই দলকে আলাদা করতে পারে না। তাই একই নেটওয়ার্কে শেষ ২৩ bit মেলে এমন দুটি দল বাছবেন না।
দ্বিতীয় অংশ: টিভি (5) আর PC (3) যোগ দিলে stream যায় শুধু 3 আর 5-এ; port 4 নিল 239.2.2.2. PC-র Leave-এ port 3 বাদ; general query-তে কিছু বদলায়নি। টিভি হঠাৎ খুলে ফেলায় Leave যায়নি — ২৬০ সেকেন্ড পর port 5-ও বাদ। Snooping না থাকলে প্রতিটি stream যেত 2–6 সব port-এ। নিজে চেষ্টা করুন: শেষে step("port 6 TV: Report 239.2.2.2", "join", 6, "239.2.2.2"); যোগ করার আগে ফল অনুমান করুন।
IPv6-এ একই ধারণা, অন্য সংখ্যা: MAC = 33:33 আর দলের ঠিকানার শেষ ৩২ bit (RFC 2464) — এখানেও বাকি bit হারায়, তবে অনেক কম সংঘর্ষ।
৩ · IGMP — “আমি এই দলে আছি” আর switch-এর কান পাতা
কে চায় — প্রেরক জানে না, জানার দরকারও নেই। জানতে হয় প্রাপকের কাছের router-কে: তার LAN-এ কোনো দলের অন্তত একজন সদস্য আছে কি না। এই খবরের protocol IGMP (IP protocol নম্বর ২)। IPv6-এ একই কাজ করে MLD, ICMPv6-এর অংশ হিসেবে।
| সংস্করণ | মূল বার্তা | নতুন কী এনেছে |
|---|---|---|
| IGMPv1 (RFC 1112, ১৯৮৯) | Query, Report | শুধু যোগ দেওয়া; ছাড়ার বার্তা নেই — router টাইমআউট পর্যন্ত অপেক্ষা করে |
| IGMPv2 (RFC 2236, ১৯৯৭) | Membership Query (0x11), v2 Membership Report (0x16), Leave Group (0x17) | Leave বার্তা আর একটি নির্দিষ্ট দলের জন্য প্রশ্ন (group-specific query) — চ্যানেল বদলানো দ্রুত হয় |
| IGMPv3 (RFC 3376, ২০০২) | Query, v3 Membership Report (0x22, যায় 224.0.0.22-এ) | উৎস বাছাই: “শুধু S থেকে” (INCLUDE) বা “S বাদে সবার থেকে” (EXCLUDE) — SSM-এর ভিত্তি |
IGMPv2-এর কাজের ধারা, সংক্ষেপে:
- যোগ দেওয়া: host নিজে থেকেই দলের ঠিকানায় Report পাঠায় (TTL ১)।
- নিয়মিত প্রশ্ন: querier router ডিফল্টে প্রতি ১২৫ সেকেন্ডে 224.0.0.1-এ General Query পাঠায়; সদস্যরা ১০ সেকেন্ডের মধ্যে Report দেয় (v2-তে অন্যের Report শুনলে নিজেরটি চেপে যায়)।
- ছাড়া: host 224.0.0.2-এ Leave পাঠায়; router group-specific query পাঠিয়ে দেখে আর কেউ আছে কি না।
- নিঃশব্দে চলে যাওয়া: Leave ছাড়া বন্ধ হলে ২ × ১২৫ + ১০ = ২৬০ সেকেন্ড Report না এলে সদস্যপদ শেষ।
IGMP snooping — switch যখন কান পাতে
Switch MAC শেখে frame-এর উৎস দেখে (পর্ব ১২), কিন্তু 01:00:5e:… কখনো উৎস হয় না — তাই switch অজানা গন্তব্যের মতো সব port-এ ছড়িয়ে দেয়। একটি ২০ Mbps-এর stream তখন যে চায়নি তার port-এও যায়, Wi-Fi access point-এ গেলে বাতাসের সময়ও খায় (পর্ব ১৪)।
সমাধান IGMP snooping (নির্দেশিকা RFC 4541): switch IGMP বার্তায় উঁকি দিয়ে টেবিল রাখে কোন port-এ কোন দলের সদস্য, আর router-এর port (mrouter port) মনে রাখে, যাতে Report সেখানে পৌঁছায়। Snooping চলে VLAN ধরে (পর্ব ১৩)।
| ঘটনা | |
| IGMP বার্তা | |
| Switch-এর snooping টেবিল | |
| Report কোথায় গেল | |
| Router-এর অবস্থা | |
| Stream যায় port-এ |
- শুরু। Router (port 1) LAN-এর querier. কেউ কোনো দলে নেই — snooping টেবিল খালি, কোনো multicast আসছে না।
- Box Report পাঠাল। চ্যানেল বদলানো মানে দলে যোগ দেওয়া: গন্তব্য 239.1.1.1 (MAC
01:00:5e:01:01:01)-এ IGMPv2 Report. Switch snoop করে লিখল “239.1.1.1 → port 5”, আর Report পাঠাল শুধু router-এর port 1-এ। - Router জানল। এই interface-এ সদস্য আছে; router নিজে গাছে না থাকলে উৎস বা RP-র দিকে PIM Join পাঠায় (অংশ ৪) — এভাবে stream টেনে আনা হয়।
- Stream শুধু port 5-এ। Stream port 1 দিয়ে ঢুকল; switch টেবিল দেখে পাঠাল শুধু port 5-এ। Snooping না থাকলে 2–6 সবাই পেত।
- দ্বিতীয় সদস্য। Port 3-এর PC-ও Report দিল; টেবিল {3, 5}. Router-এর কাছে কিছু বদলায়নি — তার জানার বিষয় শুধু “সদস্য আছে কি না”.
- PC ছাড়ল। Leave গেল 224.0.0.2-এ; router-এর group-specific query-তে port 5-এর box উত্তর দিল, তাই দল রইল। Switch শুধু port 3 মুছল।
Querier ছাড়া snooping বিপজ্জনক: যে VLAN-এ কোনো multicast router নেই (যেমন শুধু একটি imaging সার্ভার আর ল্যাবের কম্পিউটার), সেখানে কেউ Query পাঠায় না। Host-রা শুরুতে একবার Report দিয়ে চুপ থাকে, কিছুক্ষণ পর switch-এর টেবিল মেয়াদোত্তীর্ণ হয়, আর stream হঠাৎ থেমে যায় বা আবার সব port-এ ছড়ায় — vendor-ভেদে আচরণ আলাদা। তাই এমন VLAN-এ switch-এ “IGMP snooping querier” চালু রাখা হয়।
নিজের যন্ত্র কোন দলে আছে, Linux-এ দেখায় ip maddr show আর /proc/net/igmp (উল্টো byte ক্রমের hex, পর্ব ০৬)। একটি সাধারণ Linux ল্যাপটপে এমন — সংখ্যা যন্ত্রভেদে আলাদা:
$ ip maddr show dev eth0
2: eth0
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
link 01:00:5e:00:00:fb
inet 224.0.0.251
inet 224.0.0.1
inet6 ff02::1
$ cat /proc/net/igmp
Idx Device : Count Querier Group Users Timer Reporter
2 eth0 : 2 V3
FB0000E0 1 0:00000000 0
010000E0 1 0:00000000 0FB0000E0 উল্টে পড়ুন: E0.00.00.FB = 224.0.0.251 (mDNS); আর V3 মানে interface-টি IGMPv3 মোডে আছে (পুরোনো সংস্করণের কোনো querier শোনা যায়নি)। Windows-এ একই তথ্য দেখায় netsh interface ipv4 show joins.
৪ · Multicast routing — গাছ, RPF check আর PIM
IGMP শুধু শেষ LAN-টুকুর খবর দেয়। বাকি প্রশ্ন router-দের: উৎস থেকে সব সদস্য-LAN পর্যন্ত কোন কোন link দিয়ে কপি যাবে? উত্তর একটি গাছ (tree) — উৎস বা একটি কেন্দ্র থেকে শাখা মেলে সব সদস্যের দিকে, কোনো চক্র (loop) ছাড়া। চক্র থাকলে multicast packet ঘুরতে ঘুরতে অসংখ্য কপি হতো, যেমন পর্ব ১২-এর broadcast storm.
Source tree — (S,G)
প্রতিটি উৎস S-এর জন্য আলাদা গাছ, উৎস থেকে প্রতিটি প্রাপক পর্যন্ত সবচেয়ে ছোট পথ দিয়ে — তাই একে shortest-path tree (SPT)-ও বলে। Delay সবচেয়ে কম। দাম: প্রতিটি (উৎস, দল) জোড়ার জন্য router-এ আলাদা state.
কম delay · বেশি stateShared tree — (*,G)
দলের সব উৎসের জন্য একটিই গাছ, যার মূল একটি নির্দিষ্ট router — rendezvous point (RP). উৎস আগে RP-তে পাঠায়, RP গাছ বেয়ে সবাইকে। State কম, কিন্তু পথ ঘুরপথ হতে পারে আর RP-র ওপর চাপ।
কম state · ঘুরপথ সম্ভবRPF check — উল্টো পথ দিয়ে যাচাই
Unicast-এ router দেখে গন্তব্য. Multicast-এ গন্তব্য একটি দল — সবাই। তাই multicast router দেখে উৎস, আর একটি সরল নিয়ম মানে — Reverse Path Forwarding (RPF) check:
উৎস S-এর একটি multicast packet interface I দিয়ে এলো। আমার unicast routing table অনুযায়ী S-এ পৌঁছাতে আমি যদি I দিয়েই পাঠাতাম, তবে গ্রহণ করি আর বাকি (দরকারি) interface-এ কপি পাঠাই। অন্য কোনো interface দিয়ে এলে ফেলে দিই.
যুক্তি: S থেকে আমার কাছে সবচেয়ে ছোট পথের কপিটি আসবে S-এর দিকের interface দিয়েই। অন্য দিক দিয়ে আসা কপি হয় ঘুরপথের duplicate, নয়তো চক্রের ফল। কুমিল্লার শাখা জানে, “ঢাকার সার্কুলার আসে মহাসড়কের দিক থেকে” — নোয়াখালী ঘুরে আসা কপি সে ফেলে দেয়। লক্ষ করুন, RPF-এর জন্য আলাদা কোনো multicast routing table লাগে না — unicast table-ই যথেষ্ট (OSPF, BGP বা static যা দিয়েই বানানো)। এ কারণেই নাম Protocol Independent Multicast.
নিচের নেটওয়ার্কে উৎস S বসে router A-র পেছনে। প্রতিটি link-এর খরচ দেওয়া; প্রাপক আছে শুধু D আর F-এর LAN-এ (IGMP থেকে জানা)। প্রথমে দেখি প্রতিটি router S-এর দিকে কোন প্রতিবেশী দিয়ে যায় (RPF neighbour), তারপর flood-and-prune.
S (উৎস)
│
A
(1) ╱ ╲ (3)
B ─(1)─ C ─(1)─ G
│ │ │
(2) (1) │
│ │ │
D ─(1)─ E │ D-তে প্রাপক
│ │ │ │
│ │ (1) │
│ │ │ │
│ └(3)─ F ← প্রাপক
└──────(2)──────┘ (D–G link)
ছবিটি সরল করে আঁকা; সব link একসাথে: A–B ১, A–C ৩, B–C ১, B–D ২, C–E ১, D–E ১, D–F ৩, E–F ১, C–G ১, D–G ২.
| B (RPF = A) | |
| C (RPF = B) | |
| D (RPF = B) | |
| E (RPF = C) | |
| F (RPF = E) | |
| G (RPF = C) | |
| RPF-এ বাতিল কপি (মোট) |
- RPF neighbour ঠিক করা। প্রতিটি router unicast table দেখে: S-এ যেতে কোন প্রতিবেশী দিয়ে যাই? C-র সরাসরি A–C খরচ ৩, কিন্তু B দিয়ে ১ + ১ = ২ — তাই RPF B. E-র RPF C (৩; D দিয়ে ৪), F-এর E (৪; D দিয়ে ৬)।
- A ছড়াল। A কপি পাঠাল B আর C-তে। B-র RPF A — গ্রহণ। C বাতিল করল: সরাসরি link থাকলেও S-এর দিকে C-র পছন্দের পথ B দিয়ে।
- B থেকে C আর D. B যে link দিয়ে পেয়েছে তা বাদে সবখানে পাঠাল। C আর D দুজনের RPF B — দুজনেই গ্রহণ করল।
- দ্বিতীয় ঢেউ। C পাঠাল E, G-তে; D পাঠাল E, F, G-তে। E আর G C-র কপি নিল, D-র কপি বাতিল; F-ও D-র কপি বাতিল করল। মোট বাতিল ৪.
- তৃতীয় ঢেউ। E পাঠাল D, F-এ — F গ্রহণ করল, D বাতিল। G আর F-এর কপিও D বাতিল করল। মোট ৭টি বাতিল; প্রতিটি router ঠিক একবার গ্রহণ করেছে, কোনো loop নেই।
- Prune. G-র LAN-এ কেউ নেই, আর G কারো RPF neighbour নয় — তাই G C-কে prune পাঠায়। থাকল গাছ A→B, B→C, B→D, C→E, E→F — S থেকে shortest-path tree.
এই হিসাব কোডে — Dijkstra দিয়ে S-এর দিকে সবচেয়ে ছোট পথ (পর্ব ২৪-এর algorithm; আরও বিস্তারিত DSA-র Dijkstra পর্বে), তারপর flooding-এ প্রতিটি router-এ কোন কপি এলো আর RPF-এ টিকল কি না, শেষে prune:
// Routers and link costs. The multicast source S is attached to router A.
const links = [["A","B",1], ["A","C",3], ["B","C",1], ["B","D",2], ["C","E",1],
["D","E",1], ["D","F",3], ["E","F",1], ["C","G",1], ["D","G",2]];
const receivers = new Set(["D", "F"]); // routers that heard IGMP Reports
const nb = {};
for (const [u, v, c] of links) { (nb[u] ??= []).push([v, c]); (nb[v] ??= []).push([u, c]); }
// Unicast shortest paths towards S (Dijkstra from A) give each router its RPF neighbour.
const dist = { A: 0 }, rpf = {}, done = new Set();
while (done.size < Object.keys(nb).length) {
const u = Object.keys(dist).filter(x => !done.has(x)).sort((x, y) => dist[x] - dist[y])[0];
done.add(u);
for (const [v, c] of nb[u])
if (!(v in dist) || dist[u] + c < dist[v]) { dist[v] = dist[u] + c; rpf[v] = u; }
}
// Flooding: every router forwards one copy on every link except the one towards S.
let dropped = 0;
console.log("router dist RPF-nbr copies arriving from neighbours");
for (const r of Object.keys(nb).sort()) {
if (r === "A") { console.log("A 0 (S) source router: sends to B, C"); continue; }
const from = nb[r].map(([n]) => n).filter(n => rpf[n] !== r).sort();
dropped += from.length - 1;
const txt = from.map(n => n + (n === rpf[r] ? ":ACCEPT" : ":drop")).join(" ");
console.log(r.padEnd(8) + String(dist[r]).padEnd(6) + rpf[r].padEnd(9) + txt);
}
console.log("copies dropped by the RPF check:", dropped);
// Prune: keep a branch only if the router has receivers or a child on the tree needs it.
const needed = r => receivers.has(r) || Object.keys(rpf).some(c => rpf[c] === r && needed(c));
const all = Object.keys(rpf).sort();
console.log("tree after pruning:", all.filter(needed).map(c => rpf[c] + "->" + c).join(" "));
console.log("pruned routers:", all.filter(r => !needed(r)).join(" ") || "none");আউটপুট:
router dist RPF-nbr copies arriving from neighbours
A 0 (S) source router: sends to B, C
B 1 A A:ACCEPT
C 2 B A:drop B:ACCEPT
D 3 B B:ACCEPT E:drop F:drop G:drop
E 3 C C:ACCEPT D:drop
F 4 E D:drop E:ACCEPT
G 3 C C:ACCEPT D:drop
copies dropped by the RPF check: 7
tree after pruning: A->B B->C B->D C->E E->F
pruned routers: G
প্রতিটি সারিতে ঠিক একটি ACCEPT — প্রতিটি router প্রতিটি packet একবারই গ্রহণ করে। C A-র সরাসরি কপি বাতিল করেছে, কারণ তার দূরত্ব ২ আসে B দিয়ে। D-তে চারটির তিনটি বাতিল। মোট ৭টি কপি অযথা link খেয়েছে, অথচ ১০টি link-এর মধ্যে গাছে লাগে ৫টি — flood-and-prune-এর দাম, আর prune-এর মেয়াদ শেষ হলে (PIM-DM-এ সাধারণত প্রায় ৩ মিনিট; RFC 3973-এর ডিফল্ট ২১০ সেকেন্ড) আবার flood. নিজে চেষ্টা করুন: receivers-এ "G" যোগ করুন — prune-এর তালিকা কী হবে? আর A–C-র খরচ ৩ থেকে ১ করলে C-র RPF neighbour কে হবে?
দুই ঘরানা — flood-and-prune বনাম explicit join
| বিষয় | Flood-and-prune (dense mode) | Explicit join (sparse mode) |
|---|---|---|
| ধারণা | সবাই চায় ধরে নিয়ে প্রথমে সবখানে পাঠানো, যারা চায় না তারা prune পাঠায় | কেউ চায় না ধরে নিয়ে শুরু; যার প্রাপক আছে সে Join পাঠায়, সেই পথেই গাছ |
| Protocol | DVMRP (RFC 1075, ১৯৮৮), PIM-DM (RFC 3973) | PIM-SM (বর্তমান মান RFC 7761, ২০১৬), SSM |
| মানানসই যখন | প্রাপক প্রায় সবখানে, নেটওয়ার্ক ছোট | প্রাপক ছড়ানো-ছিটানো, নেটওয়ার্ক বড় — আজকের প্রায় সব ব্যবহার |
| দুর্বলতা | নিয়মিত flood-এ অপচয়; যেখানে কেউ নেই সেখানেও prune-এর state | RP-র জায়গা ঠিক করা আর তাকে সব router-কে জানানো লাগে; RP নষ্ট হলে নতুন উৎস খুঁজে পাওয়া যায় না |
Flood-and-prune সহজ, কিন্তু পুরো ইন্টারনেট ধরে flood অসম্ভব। PIM-SM-এ সদস্যের LAN-এর router (last-hop) RP-র দিকে RPF পথ বেয়ে hop ধরে ধরে (*,G) Join পাঠায়; পথের প্রতিটি router মনে রাখে কোন interface-এ পাঠাতে হবে — এভাবে shared tree. উৎসের কাছের router (first-hop) প্রথম packet-গুলো Register বার্তায় মুড়িয়ে RP-তে পাঠায়, RP উৎসের দিকে (S,G) Join পাঠায়। এরপর last-hop router চাইলে নিজেই (S,G) Join পাঠিয়ে shortest-path tree-তে সরে যায়। RP তাই মূলত পরিচয় করিয়ে দেওয়ার জায়গা — ঘটকের মতো।
SSM আরও সরল: প্রাপক আগে থেকেই উৎস জানলে IGMPv3-এ বলে “(S, G) চাই”, আর router সোজা S-এর দিকে Join পাঠায় — RP, Register, shared tree কিছুই নেই (232.0.0.0/8). অন্য কেউ একই দলে পাঠালেও পৌঁছায় না, কারণ গাছটি শুধু S-এর।
ইন্টারনেট-জুড়ে multicast কেন জমল না
Steve Deering-এর কাজ থেকে IP multicast-এর নকশা আসে (RFC 1112, ১৯৮৯), আর ১৯৯২ সালে IETF-এর একটি সভার অডিও multicast-এ সম্প্রচার দিয়ে শুরু হয় পরীক্ষামূলক MBone. তবু ইন্টারনেট-জুড়ে multicast জমেনি। প্রচলিত ব্যাখ্যা: পথের প্রতিটি ISP-কে multicast চালু রাখতে আর RP-র খবর ভাগ করতে হতো, অথচ খরচ কে বহন করবে তার মডেল ছিল না; প্রতিটি দলের state প্রতিটি router-এ; যে কেউ দলে পাঠাতে পারত বলে অপব্যবহারের ঝুঁকি; আর মানুষ “যখন খুশি” দেখতে শুরু করল, যেখানে multicast কাজে আসে না (বিস্তারিত ভাবনার প্রশ্ন ১-এ)।
তাই multicast টিকে আছে এক মালিকের নেটওয়ার্কে — প্রতিষ্ঠানের LAN আর WAN, ISP-র নিজস্ব IPTV, আর্থিক নেটওয়ার্ক, কিছু data center-এর overlay আর link-local নিয়ন্ত্রণ-বার্তায়। ইন্টারনেট-জুড়ে কাজটি নিয়েছে application-layer multicast: CDN-এর সার্ভার বা ব্যবহারকারীরা নিজেরাই কপি বানিয়ে পাঠায় (পর্ব ৩৮)। চালু করা সহজ, কিন্তু একই link-এ কয়েকটি কপি যেতে পারে।
৫ · QoS কেন — best effort যেখানে যথেষ্ট নয়
পর্ব ১৫-এ দেখেছেন, ইন্টারনেট best effort: ভিড়ে delay বাড়ে, buffer ভরলে packet হারায় (tail drop). ফাইল ডাউনলোডে ক্ষতি সামান্য — TCP আবার পাঠাবে। ভয়েস কল আলাদা জিনিস।
| Traffic | Delay | Jitter | Loss | Bandwidth |
|---|---|---|---|---|
| VoIP ভয়েস কল | খুব সংবেদনশীল | খুব সংবেদনশীল | সংবেদনশীল (কিছুটা লুকানো যায়) | কম, স্থির |
| ভিডিও কল | খুব সংবেদনশীল | সংবেদনশীল | সংবেদনশীল | মাঝারি থেকে বেশি, ঝাপটায় |
| চাহিদামতো ভিডিও (stream) | কম (আগে buffer করে) | কম | কম (TCP বা QUIC সামলায়) | বেশি |
| ফাইল, ইমেইল, backup | প্রায় নেই | নেই | নেই (আবার পাঠায়) | যত পায় |
ভয়েসের বাজেট — কত দেরি সহ্য হয়
কথা বলার সময় একদিকের delay বেশি হলে দুজন একসাথে বলে ফেলেন, তারপর দুজনেই থামেন — কথোপকথন জট পাকায়। ITU-T-র G.114 সুপারিশে সাধারণভাবে বলা হয়, একদিকের delay প্রায় ১৫০ ms-এর মধ্যে থাকলে বেশিরভাগ ব্যবহারকারী সন্তুষ্ট থাকেন, আর এর বেশি হলে মান ক্রমে খারাপ হয় (এটি নির্দেশনা, কঠোর সীমা নয়)। Jitter আর loss-এর জন্যও vendor-দের নকশা-নির্দেশিকায় প্রচলিত লক্ষ্য দেখা যায় — যেমন jitter কয়েক দশ ms-এর মধ্যে আর loss এক শতাংশের কম — তবে এগুলো codec আর ব্যবস্থাভেদে বদলায়।
একটি সাধারণ বাজেট, হিসাব করে দেখি (সংখ্যাগুলো উদাহরণ):
| অংশ | সময় | কোথা থেকে |
|---|---|---|
| Codec আর packet ভরা | ২০ ms + কয়েক ms | প্রতি packet-এ ২০ ms-এর কণ্ঠ জমিয়ে তবে পাঠানো |
| প্রচার (propagation) | যেমন ৩০ ms | দূরত্ব ÷ আলোর গতি (fiber-এ মোটামুটি ২ × ১০৮ m/s, পর্ব ০৫) |
| Queuing আর transmission | ০ থেকে শত ms | পথের ভিড় — QoS এই অংশটি নিয়ন্ত্রণ করে |
| Jitter buffer | যেমন ৪০ ms | প্রাপক আগে-পরে আসা packet সাজিয়ে সমান তালে বাজায় |
| মোট (queuing ছাড়া) | প্রায় ৯৫ ms | ১৫০ ms-এর বাজেটে queuing-এর জন্য বাকি মাত্র ~৫৫ ms |
পর্ব ১৫-এর bufferbloat মনে করুন: ১০ Mbps upload-এ ১ MB ভরা buffer মানে ৮০০ ms queuing — বাজেটের পাঁচ গুণ। দরকার অগ্রাধিকার: ভয়েসকে আলাদা লাইনে আগে পাঠানো, আর তার পরিমাণ সীমায় রাখা।
Bandwidth-এর হিসাব: G.711 codec প্রতি ২০ ms-এ ১৬০ byte কণ্ঠ; সাথে RTP (১২), UDP (৮) আর IPv4 (২০) header — ২০০ byte, সেকেন্ডে ৫০টি: ৫০ × ২০০ × ৮ = ৮০ kbps (IP স্তরে)। সামান্য, কিন্তু ভিড়ের মুহূর্তে এটুকুকেই আগে যেতে দিতে হবে।
QoS bandwidth বানায় না — ভিড়ের সময় কার ভাগে কী পড়বে, তা ঠিক করে। ভিড় না থাকলে QoS-এর কোনো কাজ নেই; ভিড় থাকলে সে ঠিক করে কে আগে যাবে (scheduling), কে কতটা পাবে (ভাগ আর সীমা), আর কে আগে বাদ পড়বে (drop). কাউকে আগে পাঠানো মানেই অন্য কাউকে পরে।
৬ · শ্রেণি ঠিক করা আর চিহ্ন দেওয়া — DSCP, 802.1p আর trust boundary
প্রতিটি router প্রতিটি packet গভীরে দেখে “ভয়েস না ফাইল” বুঝতে গেলে ধীর হবে। তাই কাজটি দুই ভাগে:
- Classification (প্রান্তে, একবার): নেটওয়ার্কে ঢোকার মুখে packet দেখে শ্রেণি ঠিক করা — port নম্বর, ঠিকানা, কোন VLAN (যেমন voice VLAN, পর্ব ১৩), বা যন্ত্রটি নিজে কী বলছে।
- Marking: শ্রেণিটি header-এ লিখে দেওয়া, যাতে পরের প্রতিটি যন্ত্র শুধু চিহ্নটুকু দেখেই কাজ করতে পারে। IP-তে DSCP (IPv4-এর পুরোনো TOS byte বা IPv6-এর traffic class-এর প্রথম ৬ bit; ঘরগুলো পর্ব ১৬ আর ২১-এ), Ethernet-এ VLAN tag-এর ৩ bit PCP বা 802.1p (পর্ব ১৩)।
ঠিক যেমন হাসপাতালের জরুরি বিভাগের রিসেপশনে একবার রোগী দেখে কার্ডে লাল, হলুদ বা সবুজ দাগ দেওয়া হয় — এরপর প্রতিটি ডেস্ক শুধু কার্ডের রং দেখে।
পুরোনো IPv4 TOS byte (৮ bit)
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
├───┴───┴───┴───┴───┴───┼───┴───┤
│ DSCP (৬ bit) │ ECN │
└───────────────────────┴───────┘
TOS byte = DSCP × 4 + ECN যেমন EF: 46 × 4 = 184 = 0xB8
প্রচলিত DSCP শ্রেণি
| নাম | DSCP (দশমিক / বাইনারি) | আচরণ (PHB) | প্রচলিত ব্যবহার |
|---|---|---|---|
| Default (CS0) | 0 / 000000 | Best effort | সাধারণ সব traffic |
| EF | 46 / 101110 | কম delay, কম jitter, কম loss — সাধারণত priority queue (RFC 3246) | ভয়েস |
| AFxy | 8x + 2y; যেমন AF11 = 10, AF21 = 18, AF31 = 26, AF41 = 34 | ৪টি শ্রেণি (x = ১–৪), প্রতিটিতে ন্যূনতম bandwidth; y = ১–৩ হলো drop precedence (RFC 2597) | AF4x ভিডিও কল, AF3x streaming, AF2x জরুরি ডেটা |
| CSn | 8 × n; যেমন CS1 = 8, CS6 = 48 | পুরোনো IP Precedence-এর সাথে মিল রাখা | CS6 routing protocol, CS1 প্রায়ই “কম অগ্রাধিকার” (scavenger) |
কোন অ্যাপ কোন শ্রেণি পাবে, তার একটি বহুল ব্যবহৃত নির্দেশিকা RFC 4594 — তবে এটি পরামর্শ; প্রতিটি প্রতিষ্ঠান নিজের নীতি ঠিক করে। DSCP-র মানে বাধ্যতামূলক নয়; প্রতিটি নেটওয়ার্ক (প্রতিটি DiffServ domain) নিজে ঠিক করে কোন চিহ্নে কী আচরণ — একে বলে per-hop behaviour (PHB).
Trust boundary — কার কথা বিশ্বাস করবেন
DSCP যে কেউ বসাতে পারে। সবাই নিজেকে “ভয়েস” বললে priority queue ভরে যায়, আর আসল ভয়েসেরই ক্ষতি। তাই একটি trust boundary টানা হয়, যতটা সম্ভব প্রান্তে (access switch-এর port-এ): ভেতরের চেনা যন্ত্রের (যেমন প্রতিষ্ঠানের IP phone) চিহ্ন বিশ্বাস, বাইরের চিহ্ন মুছে ০ বা নিজের নিয়মে নতুন করে। অনেক ISP-ও অন্য নেটওয়ার্কের DSCP মুছে বা বদলে দেয়।
নিচের simulator কয়েকটি TOS byte decode করে, তারপর একটি access switch-এর trust boundary চালায় — port 1-এ IP phone (trusted), port 2-এ সাধারণ PC (untrusted). লক্ষ করুন re-marking-এর সময় শেষের ২টি ECN bit রাখতে হয় — ECN আলাদা কাজের জিনিস (অংশ ৮)।
// The old IPv4 TOS byte = DSCP (6 bits) + ECN (2 bits). tos = dscp << 2 | ecn
const ECN = ["Not-ECT", "ECT(1)", "ECT(0)", "CE"];
function dscpName(d) {
if (d === 46) return "EF";
if (d === 0) return "default (BE)";
const x = d >> 3, y = (d >> 1) & 3;
if (x >= 1 && x <= 4 && y >= 1 && (d & 1) === 0) return `AF${x}${y}`; // AFxy = 8x + 2y
if (d % 8 === 0) return `CS${d / 8}`;
return "unknown/local";
}
function decode(tos) {
const d = tos >> 2, e = tos & 3;
return `0x${tos.toString(16).padStart(2, "0")} dscp=${String(d).padStart(2)}` +
` (${d.toString(2).padStart(6, "0")}) ${dscpName(d).padEnd(12)} ecn=${ECN[e]}`;
}
console.log("TOS DSCP decimal/binary class ECN");
for (const tos of [0x00, 0xb8, 0x88, 0x28, 0x4a, 0xc0, 0x20, 0xba, 0x03]) console.log(decode(tos));
// Trust boundary on an access switch: only the IP-phone port is trusted.
// Re-marking clears the DSCP of untrusted traffic but must keep the 2 ECN bits.
const ports = { 1: "IP phone (trusted)", 2: "PC (untrusted)" };
const arrivals = [[1, 0xb8], [2, 0xb8], [2, 0x2a], [2, 0x03]];
console.log("\nport in-TOS out-TOS meaning");
for (const [p, tos] of arrivals) {
const out = p === 1 ? tos : tos & 0x03;
console.log(`${p} 0x${tos.toString(16).padStart(2, "0")} 0x${out.toString(16).padStart(2, "0")}` +
` ${ports[p]}: ${dscpName(tos >> 2)} -> ${dscpName(out >> 2)}, ecn ${ECN[out & 3]}`);
}আউটপুট:
TOS DSCP decimal/binary class ECN
0x00 dscp= 0 (000000) default (BE) ecn=Not-ECT
0xb8 dscp=46 (101110) EF ecn=Not-ECT
0x88 dscp=34 (100010) AF41 ecn=Not-ECT
0x28 dscp=10 (001010) AF11 ecn=Not-ECT
0x4a dscp=18 (010010) AF21 ecn=ECT(0)
0xc0 dscp=48 (110000) CS6 ecn=Not-ECT
0x20 dscp= 8 (001000) CS1 ecn=Not-ECT
0xba dscp=46 (101110) EF ecn=ECT(0)
0x03 dscp= 0 (000000) default (BE) ecn=CE
port in-TOS out-TOS meaning
1 0xb8 0xb8 IP phone (trusted): EF -> EF, ecn Not-ECT
2 0xb8 0x00 PC (untrusted): EF -> default (BE), ecn Not-ECT
2 0x2a 0x02 PC (untrusted): AF11 -> default (BE), ecn ECT(0)
2 0x03 0x03 PC (untrusted): default (BE) -> default (BE), ecn CE
Decode: 0xb8 = বাইনারি 101110|00 → DSCP ৪৬, EF. 0x88 → ৩৪ = ৮ × ৪ + ২ × ১ → AF41. 0x28 → ১০ → AF11. 0x4a = 010010|10 → AF21, আর শেষ দুই bit 10 = ECT(0), অর্থাৎ প্রেরক ECN বোঝে। 0xc0 → ৪৮ = CS6, 0x20 → ৮ = CS1. 0xba হলো EF আর ECT(0) একসাথে। আর 0x03: DSCP ০, কিন্তু ECN = CE — পথের কোনো router packet না ফেলে “ভিড় আছে” দাগ দিয়েছে।
Trust boundary: phone-এর EF অক্ষত রইল। PC-র নিজে বসানো EF মুছে 0x00. 0x2a (AF11 + ECT(0)) হলো 0x02 — শ্রেণি মুছল, ECT(0) রইল; 0x03-এর CE দাগও রইল। পুরো byte শূন্য করলে ECN-এর খবর হারাত — re-marking-এর প্রচলিত ভুল। নিজে চেষ্টা করুন: 0x68 আর 0xa0 decode করার আগে খাতায় হিসাব করুন।
Layer 2-তে একই কাজ 802.1p-এর (০–৭); অনেক switch DSCP আর PCP-র মধ্যে রূপান্তরের টেবিল রাখে। Tag থাকে শুধু trunk বা voice VLAN-এ (পর্ব ১৩)।
৭ · Policing, shaping আর token bucket — হার মাপার যন্ত্র
অগ্রাধিকার দিলেই হবে না, পরিমাণও সীমায় রাখতে হয়। ISP আপনার সাথে চুক্তি করেছে ২০ Mbps; ভয়েসের priority queue-কে বলা হয়েছে ১ Mbps পর্যন্ত। কেউ বেশি পাঠালে কী হবে? দুটি উত্তর:
Policing — সীমা ছাড়ালেই শাস্তি
সীমার বাইরের packet সাথে সাথে ফেলে দেওয়া (drop), বা নিচের শ্রেণিতে নামিয়ে চিহ্ন বদলানো (re-mark). কোনো buffer নেই, কোনো অপেক্ষা নেই। সাধারণত ঢোকার মুখে (ingress) — যেমন ISP গ্রাহকের দিক থেকে আসা traffic-এ। ফল: ঝাপটার সময় loss, তাই TCP-র গতি করাতের দাঁতের মতো ওঠানামা করে।
loss বাড়ে · delay বাড়ে নাShaping — সীমা ছাড়ালে লাইনে দাঁড়ান
সীমার বাইরের packet buffer-এ রেখে পরে পাঠানো, যাতে বের হওয়া traffic মসৃণ আর সীমার মধ্যে থাকে। সাধারণত বের হওয়ার মুখে (egress) — যেমন অফিসের router ISP-র policer-এ ধরা পড়ার আগেই নিজের traffic মসৃণ করে। ফল: loss কম, কিন্তু delay বাড়ে; buffer ভরে গেলে তবেই drop.
delay বাড়ে · loss কমেঢাকার ফ্লাইওভারের মুখে দুই ট্রাফিক পুলিশ: একজন বাড়তি গাড়ি ফিরিয়ে দেন (policing), অন্যজন পাশে দাঁড় করিয়ে একটি একটি করে ছাড়েন (shaping).
Token bucket — হার r, বালতি b
দুজনেরই একটি মাপার যন্ত্র লাগে — “এই packet সীমার মধ্যে কি না”. সবচেয়ে প্রচলিতটি token bucket:
- একটি বালতিতে প্রতি সেকেন্ডে rটি token জমে (এখানে ১ token = ১ byte). বালতিতে সর্বোচ্চ bটি token ধরে; ভরা থাকলে নতুন token উপচে নষ্ট হয়।
- L byte-এর packet এলে বালতিতে কমপক্ষে L token থাকলে সে conform — L token তুলে নিয়ে পাঠানো। না থাকলে exceed — policer হলে ফেলে দেয় (token নেয় না), shaper হলে token জমা পর্যন্ত অপেক্ষা করায়।
r হলো দীর্ঘমেয়াদি গড় হার (চুক্তির হার, অনেক সময় CIR বলা হয়), আর b হলো সর্বোচ্চ ঝাপটা — কিছুক্ষণ চুপ থাকলে জমানো token দিয়ে একবারে কতটা পাঠানো যায়।
প্রমাণ: যেকোনো t সময়ে সর্বোচ্চ b + rt
যেকোনো একটি সময়-ব্যবধান [s, s + t] নিন। শুরুর মুহূর্তে বালতিতে সর্বোচ্চ b token থাকতে পারে। এই t সময়ে নতুন token জমে সর্বোচ্চ rt. প্রতিটি পাঠানো byte একটি token খরচ করে, আর token ছাড়া কিছু যায় না। তাই এই সময়ে বের হওয়া মোট byte ≤ শুরুর token + নতুন token ≤ b + rt. এটিই token bucket-এর মূল নিশ্চয়তা — একে বলে (r, b) arrival curve, আর এর ওপর ভিত্তি করে router-এর queue-তে সর্বোচ্চ কত জমবে আর সর্বোচ্চ delay কত হবে, তা হিসাব করা যায় (network calculus).
সর্বোচ্চ ঝাপটার দৈর্ঘ্য: link-এর নিজের গতি R (R > r) হলে, পূর্ণ বালতি নিয়ে প্রেরক R গতিতে কতক্ষণ পাঠাতে পারে? T সময় পরে পাঠানো R·T, আর বালতি অনুমতি দেয় b + r·T. R·T = b + r·T থেকে T = b ÷ (R − r). উদাহরণ: r = ২ Mbps, b = ১০০ KB = ৮০০,০০০ bit, R = ১০ Mbps → T = ৮০০,০০০ ÷ (৮ × ১০৬) = ০.১ সেকেন্ড; এই সময়ে যায় ১০ Mbps × ০.১ s = ১ Mbit = ১২৫,০০০ byte. যাচাই: b + rT = ৮০০,০০০ + ২০০,০০০ = ১০,০০,০০০ bit — মিলেছে।
Leaky bucket — নিচে ছিদ্রওয়ালা বালতি
Leaky bucket-এ packet জমে একটি বালতিতে (queue), আর ছিদ্র দিয়ে বের হয় স্থির হারে — যত ঝাপটাই আসুক; বালতি ভরলে নতুন packet ফেলা হয়। Token bucket b পর্যন্ত ঝাপটা অনুমতি দেয়, leaky bucket (queue হিসেবে) দেয় না। (“মাপার নিয়ম” হিসেবে দুটি একই সীমা দেয় — ATM-এর GCRA তেমন একটি; বইভেদে নামের ব্যবহার আলাদা।)
এবার একটি policer-কে একটি ঝাপটার ওপর চালাই। r = ১০০ byte/ms (= ০.৮ Mbps), b = ৩,০০০ byte, শুরুতে বালতি ভরা। ০, ১, ২, ৩ ms-এ চারটি ১,৫০০ byte-এর packet একসাথে, তারপর ২০, ২১ আর ৪০ ms-এ আরও তিনটি।
| সময় · packet | |
| আগের পর থেকে নতুন token | |
| Packet আসার সময় token | |
| সিদ্ধান্ত | |
| পরে token | |
| এ পর্যন্ত গেল / ফেলা হলো |
- t = 0: পূর্ণ বালতি। ৩,০০০ token, packet ১,৫০০ — conform; বাকি ১,৫০০. চুপ থাকার “সঞ্চয়” ঝাপটায় কাজে লাগছে।
- t = 1: ঝাপটা চলছে। ১ ms-এ মাত্র ১০০ token জমেছে: ১,৬০০ — আবার conform, বাকি ১০০. দুই ms-এ ৩,০০০ byte গেল, কারণ b ঝাপটা অনুমতি দেয়।
- t = 2: বালতি প্রায় খালি। ২০০ token, দরকার ১,৫০০ — exceed. Policer packet ফেলল, token নিল না। (Shaper হলে ১৩ ms অপেক্ষা করাত।)
- t = 3: আবার exceed. ৩০০ token — এবারও ফেলা হলো। TCP হলে প্রেরক এই loss দেখে গতি কমাত (পর্ব ৩২)।
- t = 20: বিরতির পর। ১৭ ms-এ ১,৭০০ token যোগ হয়ে ২,০০০ — conform, বাকি ৫০০. সঞ্চয় কখনো b-এর বেশি নয়।
- t = 21: ছোট packet-ও বাদ। ৬০০ token, packet ১,০০০ byte — exceed. Token bucket packet-এর আকার দেখে।
- t = 40: সারসংক্ষেপ। ২,৫০০ token — conform, বাকি ১,০০০. ৪০ ms-এ গেছে ৬,০০০ byte ≤ b + r·t = ৩,০০০ + ১০০ × ৪০ = ৭,০০০. ৭টির ৩টি বাদ।
একই আগমনে policer আর shaper পাশাপাশি — shaper কোনো packet ফেলে না (buffer যথেষ্ট বড় ধরে), বরং প্রতিটি packet কখন বের হলো আর কত অপেক্ষা করল, তা দেখায়:
// Token bucket: r = 100 bytes/ms (0.8 Mbps), bucket size b = 3000 bytes, starts full.
const r = 100, b = 3000;
const pkts = [[0, 1500], [1, 1500], [2, 1500], [3, 1500], [20, 1500], [21, 1000], [40, 1500]];
console.log("POLICER t(ms) size tokens-before decision tokens-after");
let tok = b, last = 0;
for (const [t, size] of pkts) {
tok = Math.min(b, tok + r * (t - last)); last = t; // refill since last arrival
const before = tok, ok = tok >= size;
if (ok) tok -= size; // exceed: drop, take no tokens
console.log(` ${String(t).padStart(5)} ${String(size).padStart(5)}` +
` ${String(before).padStart(13)} ${(ok ? "conform" : "EXCEED").padEnd(8)} ${tok}`);
}
console.log("\nSHAPER t(ms) size leaves-at(ms) delay(ms)");
tok = b; last = 0;
let free = 0; // FIFO: a packet cannot leave before the one ahead
for (const [t, size] of pkts) {
let go = Math.max(t, free);
tok = Math.min(b, tok + r * (go - last)); last = go;
if (tok < size) { const wait = (size - tok) / r; go += wait; tok = size; last = go; }
tok -= size; free = go;
console.log(` ${String(t).padStart(5)} ${String(size).padStart(5)}` +
` ${String(go).padStart(13)} ${go - t}`);
}
const T = 50;
console.log(`\nbound: in any ${T} ms at most b + r*T = ${b + r * T} bytes leave`);আউটপুট:
POLICER t(ms) size tokens-before decision tokens-after
0 1500 3000 conform 1500
1 1500 1600 conform 100
2 1500 200 EXCEED 200
3 1500 300 EXCEED 300
20 1500 2000 conform 500
21 1000 600 EXCEED 600
40 1500 2500 conform 1000
SHAPER t(ms) size leaves-at(ms) delay(ms)
0 1500 0 0
1 1500 1 0
2 1500 15 13
3 1500 30 27
20 1500 45 25
21 1000 55 34
40 1500 70 30
bound: in any 50 ms at most b + r*T = 8000 bytes leave
Policer-এর টেবিল stepper-এর সাথে হুবহু মেলে: ৭টির মধ্যে ৩টি EXCEED, কারো কোনো delay নেই। Shaper-এ কেউ হারায়নি, কিন্তু দেখুন delay কীভাবে জমে: ২ ms-এর packet বালতি খালি পায়, ১,৩০০ token জমতে ১৩ ms অপেক্ষা করে ১৫ ms-এ বের হয়; তারপর বালতি শূন্য, তাই প্রতিটি ১,৫০০ byte-এর packet-এর জন্য পুরো ১৫ ms লাগে (৩০, ৪৫), আর ১,০০০ byte-এর জন্য ১০ ms (৫৫)। ২১ ms-এর packet অপেক্ষা করে ৩৪ ms. ১৫ ms-এর পর আউটপুট ঠিক r = ১০০ byte/ms — মসৃণ। শেষ লাইন প্রমাণের সূত্র: ০–৫০ ms-এ বের হয়েছে ৫টি packet = ৭,৫০০ byte ≤ ৮,০০০. নিজে চেষ্টা করুন: b = 4500 করলে policer কয়টি packet ফেলবে? (উত্তর অনুশীলনে।)
Linux-এ একই যন্ত্র আছে, tc দিয়ে (root লাগে, তাই এখানে চালানো নয়)। tbf (token bucket filter) একটি shaper; আর অনেক বাসার router-এর firmware-এ থাকা CAKE বা fq_codel একসাথে shaping, শ্রেণি আর AQM করে:
$ sudo tc qdisc add dev eth0 root tbf rate 8mbit burst 32kbit latency 50ms
# rate = r, burst = b; latency = buffer-এ সর্বোচ্চ কতক্ষণ অপেক্ষা, তার বেশি হলে drop
$ sudo tc qdisc replace dev eth0 root cake bandwidth 18mbit diffserv4
# upload-এর আসল গতির একটু নিচে shaping, DSCP দেখে ৪টি শ্রেণি, ভেতরে AQM
$ tc -s qdisc show dev eth0 # কত byte গেল, কত drop — পরিসংখ্যান৮ · সব একসাথে — LLQ, IntServ বনাম DiffServ, ECN আর বাসার Wi-Fi
Scheduling-এর প্রয়োগ — LLQ
পর্ব ১৫-এ priority আর WFQ দেখেছেন, আর কঠোর priority-র বিপদ — নিম্ন শ্রেণি না খেয়ে থাকে। বাস্তবের QoS দুটিকে মেলায়: LLQ (Low Latency Queuing). ভয়েসের জন্য কঠোর priority queue, সাথে একটি policer (অংশ ৭-এর token bucket) যাতে ভয়েস নির্ধারিত হারের বেশি না নেয়; বাকি শ্রেণি WFQ-র মতো ভাগ পায়, আর best effort-এ AQM.
class-map match-any VOICE
match dscp ef
class-map match-any VIDEO
match dscp af41
policy-map WAN-EDGE
class VOICE
priority 512 ! কঠোর priority, ভিড়ের সময় 512 kbps-এর বেশি হলে police
class VIDEO
bandwidth percent 30 ! ভিড়ের সময় ন্যূনতম ৩০%
class class-default
fair-queue ! বাকি সব: flow-ভিত্তিক ন্যায্য ভাগ
interface GigabitEthernet0/1
service-policy output WAN-EDGEএখানে কাজের ক্রমটি লক্ষ করুন: classification (DSCP দেখে class-map) → প্রতিটি শ্রেণির জন্য নীতি (policy-map) → interface-এর বের হওয়ার দিকে প্রয়োগ। QoS কাজ করে শুধু যেখানে ভিড় হয় — সাধারণত দ্রুত LAN থেকে ধীর WAN-এ নামার মুখে। ১০ Gbps-এর ফাঁকা LAN link-এ এই নীতির প্রায় কোনো প্রভাব নেই।
IntServ বনাম DiffServ — প্রতিটি flow, না কয়েকটি শ্রেণি?
১৯৯০-এর দশকে IETF ইন্টারনেটে টেলিফোনের মতো নিশ্চয়তা আনার দুটি পথ চেষ্টা করেছিল।
| বিষয় | IntServ (RFC 1633, ১৯৯৪) | DiffServ (RFC 2474, 2475, ১৯৯৮) |
|---|---|---|
| মূল একক | প্রতিটি flow (একটি কল, একটি ভিডিও) | কয়েকটি শ্রেণি (aggregate) — DSCP দিয়ে চেনা |
| সংকেত | RSVP (RFC 2205): পথের প্রতিটি router-এ সংরক্ষণ চাওয়া, admission control — জায়গা না থাকলে “না” | কোনো সংকেত নেই; প্রান্তে চিহ্ন বসানো, ভেতরে চিহ্ন দেখে আচরণ |
| Router-এ state | প্রতিটি flow-এর জন্য, নিয়মিত refresh (soft state) | শুধু শ্রেণির নিয়ম — flow-এর সংখ্যা যত হোক |
| নিশ্চয়তা | কঠোর — যেমন guaranteed service-এ সর্বোচ্চ delay-এর সীমা (RFC 2212) | আপেক্ষিক — “এই শ্রেণি ওই শ্রেণির চেয়ে ভালো আচরণ পাবে”; পুরো পথে নিশ্চয়তা নয় |
| বড় নেটওয়ার্কে | Backbone-এ লক্ষ লক্ষ flow-এর state আর বার্তা — মানায়নি | মানায়: ভেতরের router-এর কাজ সরল — আজকের বাস্তব QoS |
IntServ টেকেনি মূলত scale-এর জন্য (কারণ বিস্তারিত ভাবনার প্রশ্ন ৩-এ)। DiffServ-এ জটিলতা প্রান্তে, মাঝখান সরল — তবে সেটিও সাধারণত এক প্রতিষ্ঠান বা এক ISP-র ভেতরে কাজ করে; সীমা পেরোলে চিহ্ন সাধারণত মানা হয় না, তাই ইন্টারনেট মোটের ওপর best effort-ই থেকে গেছে।
MPLS-TE (সংক্ষেপে): ISP-র ভেতরে RSVP-TE (RFC 3209) দিয়ে নির্দিষ্ট bandwidth-সহ MPLS-এর পথ বানানো হয় — flow প্রতি নয়, বড় traffic-গুচ্ছ প্রতি। এতে traffic সবচেয়ে ছোট পথের বাইরেও পরিকল্পনামতো ছড়ানো যায়, আর link নষ্ট হলে আগে বানানো বিকল্প পথে দ্রুত সরানো যায়। কিছু নেটওয়ার্ক segment routing-এর মতো নতুন পদ্ধতিও ব্যবহার করে।
ECN আর AQM — packet না ফেলে সতর্ক করা
পর্ব ১৫-এ AQM (RED, CoDel) দেখেছেন — buffer ভরার আগেই কিছু packet ফেলে প্রেরককে ভিড়ের সংকেত দেওয়া। ECN (RFC 3168) একই সংকেত দেয় কোনো packet না হারিয়ে: প্রেরক IP header-এর দুই bit-এ ECT বসায় (“আমি ECN বুঝি”), ভিড়ের router ফেলার বদলে সেখানে CE (Congestion Experienced) লেখে, প্রাপক TCP-তে খবরটি প্রেরককে ফেরত পাঠায়, আর প্রেরক যেন packet হারিয়েছে এমনভাবে গতি কমায় (পর্ব ৩২)। ভয়েস আর ভিডিওর জন্য একটি দাগ একটি হারানো packet-এর চেয়ে অনেক কম ক্ষতিকর। ঘরগুলো পর্ব ১৬-এ।
Net neutrality আর QoS — সংক্ষেপে
অফিস নিজের নেটওয়ার্কে ভয়েসকে আগে রাখলে কারো আপত্তি নেই। কিন্তু ISP টাকার বিনিময়ে বা নিজের স্বার্থে কোনো সাইট বা অ্যাপকে দ্রুত বা ধীর করলে ওঠে net neutrality-র প্রশ্ন। সাধারণত traffic-এর ধরন অনুযায়ী স্বচ্ছ ব্যবস্থাপনা অনেক জায়গায় গ্রহণযোগ্য, আর কে পাঠাচ্ছে বা কে টাকা দিয়েছে অনুযায়ী অগ্রাধিকার বিতর্কিত; দেশভেদে আইন আলাদা (আলোচনা পর্ব ১৫-এর ভাবনার প্রশ্নে)।
বাসার router আর Wi-Fi-তে QoS
বাসায় সবচেয়ে সাধারণ ভিড়ের জায়গা দুটি: ISP-র দিকের upload link আর Wi-Fi-র বাতাস।
- Upload link: অনেক router-এ “QoS”, “SQM” বা “Smart Queue” সেটিং থাকে। সাধারণত গতি ISP-র আসল গতির একটু নিচে বেঁধে দেওয়া হয় (shaping), যাতে queue জমে router-এর fq_codel বা CAKE-এ, মডেমের বড় buffer-এ নয় (পর্ব ১৫)।
- Wi-Fi-তে WMM: সবাই একই বাতাস ভাগ করে (পর্ব ১৪)। 802.11e-র ভিত্তিতে Wi-Fi Alliance-এর WMM চারটি access category রাখে — ভয়েস, ভিডিও, best effort, background — আর ভয়েসকে বাতাসে কম অপেক্ষার সুযোগ দেয় (ছোট contention window). 802.11n আর পরের উচ্চ গতির জন্য WMM সাধারণত চালু রাখতেই হয়।
আরও গভীরে: Token bucket-এর বাস্তব রূপ প্রায়ই তিন রঙের: RFC 2697-এর single-rate three-color marker দুটি বালতি (CBS আর EBS) দিয়ে packet-কে সবুজ, হলুদ বা লাল করে, আর RFC 2698-এর two-rate রূপ চুক্তির হার আর সর্বোচ্চ হার আলাদা মাপে — AF-এর তিনটি drop precedence ঠিক এই তিন রঙের সাথে মেলে। Wi-Fi-তে DSCP থেকে WMM-এর শ্রেণিতে রূপান্তর একটি সূক্ষ্ম জায়গা: পুরোনো সরল নিয়মে DSCP-র প্রথম ৩ bit নিলে EF (৪৬ → ৫) ভিডিও শ্রেণিতে পড়ে, তাই RFC 8325 (২০১৮) EF-কে ভয়েসের user priority ৬-এ পাঠানোর সুপারিশ করে। আর গবেষণার সামনের দিকে আছে L4S (RFC 9330–9332, ২০২৩), যা ECN-এর দাগ আরও সূক্ষ্মভাবে ব্যবহার করে queue-কে প্রায় শূন্য রেখে বেশি throughput পাওয়ার চেষ্টা করে।
পরীক্ষা ও ইন্টারভিউতে এই বিষয়ে প্রায়ই যা জিজ্ঞেস করা হয়:
- 239.1.1.1-এর multicast MAC কী, আর কেন একাধিক দল একই MAC পায়? —
01:00:5e:01:01:01; MAC-এ যায় দলের শুধু শেষ ২৩ bit, ৫ bit হারায়, তাই ৩২টি দল একই MAC. - IGMP snooping না থাকলে কী হয়? — Switch multicast MAC কখনো শেখে না, তাই stream VLAN-এর সব port-এ ছড়ায়; snooping শুধু সদস্যদের port-এ পাঠায়।
- RPF check কী? — উৎস S-এর packet শুধু সেই interface দিয়ে এলে গ্রহণ, যেটি দিয়ে router S-এ unicast পাঠাত; বাকি কপি ফেলে loop আর duplicate ঠেকানো।
- Policing আর shaping-এর পার্থক্য? — Policing সীমার বাইরের packet ফেলে বা re-mark করে (delay নেই, loss আছে); shaping buffer-এ রেখে দেরিতে পাঠায় (loss কম, delay বেশি)।
- IntServ কেন টেকেনি? — প্রতিটি flow-এর জন্য প্রতিটি router-এ RSVP state আর সংকেত বড় নেটওয়ার্কে মানায় না; DiffServ কয়েকটি শ্রেণি আর প্রতি hop-এর আচরণে সরল।
৯ · AI-এর যুগে multicast আর QoS
“IPTV-র জন্য multicast সেটআপ” বা “ভিডিও কলের QoS কনফিগ” চাইলে AI লম্বা, আত্মবিশ্বাসী উত্তর দেয় — কিন্তু কয়েকটি ভুল খুব প্রচলিত:
| AI-এর ভুল | কেন ভুল | কীভাবে ধরবেন |
|---|---|---|
Multicast MAC হিসাবে দলের শেষ ২৪ bit নেওয়া (যেমন 239.129.1.1 → 01:00:5e:81:01:01) | নিয়ম শেষ ২৩ bit; দ্বিতীয় byte-এর প্রথম bit বাদ — ঠিক উত্তর 01:00:5e:01:01:01 | অংশ ২-এর simulator বা হাতে বাইনারি করে মেলান |
| “239.x.x.x দিয়ে ইন্টারনেটে সম্প্রচার করুন” | 239/8 administratively scoped — প্রতিষ্ঠানের ভেতরের জন্য; ইন্টারনেটে multicast সাধারণত চলেই না | RFC 2365 আর ISP-র কাছে জিজ্ঞেস |
| DSCP আর TOS byte গুলিয়ে ফেলা (“EF = 0x2E বসান” বা “DSCP 184”) | EF-এর DSCP ৪৬ = 0x2E, কিন্তু TOS byte-এ তা 0xB8 (৪৬ × ৪); কোন টুল কোনটা চায়, আলাদা | টুলের man page দেখুন; packet capture-এ ঘরটি মিলিয়ে দেখুন |
| “সব traffic-কে EF দিন, সব দ্রুত হবে” | সবাই priority হলে কেউই priority নয়; priority queue policer ছাড়া বাকিদের না খাইয়ে রাখে | ভয়েসের হিসাব (প্রতি কল ~৮০ kbps) করে সীমা বসান |
| “QoS চালু করলে ইন্টারনেট দ্রুত হবে” | QoS bandwidth বাড়ায় না, শুধু ভিড়ের সময় ভাগ ঠিক করে | লোডের সময় আর লোড ছাড়া ping ও throughput মেপে তুলনা |
| Cisco-র কমান্ডকে সর্বজনীন বলা, বা পুরোনো কমান্ড | প্রতিটি vendor আর OS-এর কমান্ড আলাদা; Linux-এ tc, ip maddr | নিজের যন্ত্রের ডকুমেন্টেশন; আগে ল্যাব বা VM-এ চালানো |
| বানানো RFC নম্বর (“IGMP snooping RFC 2236”) | RFC 2236 হলো IGMPv2; snooping-এর নির্দেশিকা RFC 4541 | rfc-editor.org-এ নম্বর খুলে শিরোনাম মেলান |
AI-কে multicast বা QoS-এর প্রশ্ন দিলে নিজের নেটওয়ার্কের তথ্য আর যাচাইয়ের শর্তসহ দিন:
AI-এর উত্তর মানার আগে — চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১IP multicast প্রযুক্তিগতভাবে এত দক্ষ, তবু ইন্টারনেট-জুড়ে রেডিও-টিভির মাধ্যম হয়ে উঠল না কেন? CDN কীভাবে সেই জায়গা নিল?
১৯৮০-এর দশকের শেষে Stanford-এ Steve Deering-এর গবেষণা থেকে IP multicast-এর নকশা আসে (RFC 1112, ১৯৮৯)। ১৯৯২ সালে IETF-এর একটি সভার অডিও multicast-এ সম্প্রচার হয়, শুরু হয় MBone — unicast router-এর ওপর tunnel দিয়ে জোড়া multicast-এর দ্বীপ। অনেকের ধারণা ছিল, একদিন সব টিভি এভাবেই চলবে।
প্রথম বাধা বহু মালিকানা। ইন্টারনেট হাজার হাজার স্বাধীন নেটওয়ার্কের জোড়া (পর্ব ২৫)। Stream পৌঁছাতে পথের প্রতিটি ISP-কে multicast routing চালু রাখতে হয়, RP-র খবর বিনিময় করতে হয় (MSDP-র মতো বাড়তি protocol). অথচ লাভ কার? কপি হয় প্রাপকের ISP-তে, কিন্তু উৎসের কাছ থেকে টাকা নেওয়ার সহজ মডেল ছিল না। দ্বিতীয় বাধা প্রযুক্তিগত: প্রতিটি দলের state প্রতিটি router-এ, ASM-এ যে কেউ পাঠাতে পারে বলে অপব্যবহারের ঝুঁকি, আর NAT ও firewall প্রায়ই multicast আটকায়।
তৃতীয় আর সম্ভবত বড় কারণ: দেখার অভ্যাস বদলাল। Multicast-এর লাভ তখনই, যখন অনেকে একই মুহূর্তে একই জিনিস চায়; মানুষ ক্রমে “যখন খুশি” দেখতে শুরু করল। CDN হাজার জায়গায় কপি রেখে কাছের সার্ভার থেকে unicast-এ পাঠায় — router-এর কাছে কিছু চাইতে হয় না, আর টাকার হিসাব পরিষ্কার। লাইভ খেলাতেও আজ সাধারণত CDN-এর edge সার্ভার, একধরনের application-layer multicast, কাজ চালায়। Multicast সরে গেছে এক মালিকের নেটওয়ার্কে — ISP-র IPTV, শেয়ারবাজার, প্রতিষ্ঠানের LAN আর link-local বার্তায়।
মূল উপলব্ধি: একটি প্রযুক্তি দক্ষ হলেই টেকে না — কে খরচ বহন করবে, কে লাভ পাবে, আর ব্যবহারকারী আসলে কী চান, এই তিন প্রশ্নের উত্তরও লাগে। ইন্টারনেট-জুড়ে multicast প্রথম প্রশ্নে আটকেছিল, আর তৃতীয়টিতে প্রাসঙ্গিকতা হারিয়েছিল।
প্র ০২IPv4 multicast-এর MAC-এ কেন মাত্র ২৩ bit — এই সিদ্ধান্তের দাম কে, কীভাবে দেয়? IPv6-এ কী বদলেছে?
IPv4 দলের ঠিকানায় চলমান bit ২৮টি, অথচ Ethernet MAC-এ দলের জন্য জায়গা মাত্র ২৩ bit. এর পেছনের গল্পটি নেটওয়ার্কিং মহলে প্রচলিত: multicast-এর জন্য একটি OUI-র (MAC-এর প্রথম ৩ byte, পর্ব ১২) পুরো ২৪ bit বা একাধিক OUI কেনার কথা হয়েছিল, কিন্তু খরচের কারণে শেষে একটি OUI-র (01:00:5e) অর্ধেক ব্যবহার হয় — বাকি অর্ধেক অন্য কাজে রাখা হয়েছিল। গল্পের খুঁটিনাটি সূত্রভেদে একটু আলাদা, কিন্তু ফলটি নিশ্চিত: ৫টি bit হারায়, আর প্রতিটি multicast MAC ৩২টি দল ভাগ করে।
এই সিদ্ধান্তের দাম দেয় প্রাপকের যন্ত্র আর switch. একটি host 239.1.1.1-এ যোগ দিলে তার network card-এর hardware filter 01:00:5e:01:01:01-এর সব frame নেয় — 224.1.1.1-এর ভিডিও stream-ও। Kernel IP header দেখে বাড়তি packet ফেলে দেয়, কিন্তু ততক্ষণে CPU আর memory-র কাজ হয়ে গেছে। ব্যস্ত নেটওয়ার্কে এটি সত্যিকারের বোঝা। Switch-এর দিকে আরও সূক্ষ্ম সমস্যা: যে switch snooping-এর টেবিল IP দিয়ে নয়, MAC দিয়ে রাখে, সে এই দুই দলকে আলাদা করতে পারে না — একজনের জন্য stream অন্যজনের port-এ চলে যায়। আরও বিপদ link-local দলের সাথে: 224.0.0.x আর 225.0.0.x বা 239.128.0.x একই MAC পায়, আর অনেক switch 224.0.0.x-এর MAC-কে নিয়ন্ত্রণ-traffic ধরে সব port-এ পাঠায়। তাই 239.0.0.x বা 239.128.0.x-এর মতো দল বাছলে snooping কার্যত অকেজো হয়ে যেতে পারে — নকশার নির্দেশিকাগুলো এ নিয়ে সতর্ক করে।
IPv6 নকশার সময় এই অভিজ্ঞতা ছিল। IPv6 multicast MAC = 33:33 আর দলের ঠিকানার শেষ ৩২ bit (RFC 2464). দলের ঠিকানা ১২৮ bit, তাই এখানেও bit হারায় — তত্ত্বে আরও বেশি দল একই MAC পায় — কিন্তু বাস্তবে দলগুলোর আলাদা অংশ সাধারণত শেষ ৩২ bit-এ থাকে, যেমন solicited-node দল ff02::1:ffXX:XXXX-এর শেষ ২৪ bit unicast ঠিকানা থেকে আসে (পর্ব ২১)। ফলে সংঘর্ষ অনেক কম।
মূল উপলব্ধি: নিম্নস্তরে নেওয়া একটি সস্তা সিদ্ধান্ত বহু দশক ধরে ওপরের স্তরে বাড়তি কাজ চাপিয়ে দিতে পারে। ঠিকানার পরিকল্পনার সময় এই সীমাবদ্ধতাগুলো জানা থাকলে সমস্যাটি এড়ানো যায় — যেমন দলগুলোকে শেষ ২৩ bit-এ আলাদা রাখা।
প্র ০৩IntServ কঠোর নিশ্চয়তা দিত, DiffServ দেয় শুধু আপেক্ষিক অগ্রাধিকার — তবু বাস্তবে DiffServ জিতল কেন? এখানে end-to-end principle-এর ভূমিকা কী?
১৯৯০-এর দশকের শুরুতে ইন্টারনেটে অডিও-ভিডিও আসছিল, আর টেলিফোন কোম্পানিগুলোর ATM নেটওয়ার্ক bandwidth আর delay-এর নিশ্চয়তা দেখাচ্ছিল। IETF-এর উত্তর ছিল Integrated Services (RFC 1633, ১৯৯৪): প্রতিটি অ্যাপ্লিকেশন-flow তার চাহিদা জানাবে (token bucket-এর r আর b দিয়ে — এই পর্বের সেই একই যন্ত্র), RSVP (RFC 2205, ১৯৯৭) সেই চাহিদা পথের প্রতিটি router-এ নিয়ে যাবে, আর প্রতিটি router দেখবে জায়গা আছে কি না (admission control). জায়গা থাকলে সংরক্ষণ, না থাকলে “না”. Guaranteed service-এ গাণিতিকভাবে প্রমাণযোগ্য সর্বোচ্চ delay পর্যন্ত পাওয়া যেত।
সমস্যা ছিল scale. Backbone router-এর ভেতর দিয়ে একসাথে লক্ষ লক্ষ flow যায় — প্রতিটির state, নিয়মিত RSVP refresh আর আলাদা scheduling-এর খরচ বিশাল; RSVP-র প্রয়োগ-নির্দেশিকা (RFC 2208)-ও এ নিয়ে সাবধান করেছিল। তার ওপর পথটি কয়েকটি ISP-র, সবার সাথে সংরক্ষণের চুক্তি কার্যত অসম্ভব।
DiffServ (RFC 2474 আর 2475, ১৯৯৮) প্রশ্নটি উল্টে দিল: flow-এর বদলে কয়েকটি শ্রেণি। Classification, marking, policing হয় প্রান্তে, যেখানে flow কম; ভেতরের router শুধু ৬ bit দেখে queue বাছে — কোনো সংকেত, কোনো flow-state নেই। এটি end-to-end principle-এর মনোভাবের কাছাকাছি (পর্ব ০৩)। দাম: নিশ্চয়তা আপেক্ষিক, তাই প্রান্তের policing আর যথেষ্ট পরিকল্পনা অপরিহার্য, আর ISP-র সীমা পেরোলে চিহ্ন সাধারণত মানা হয় না। RSVP-ও পুরো হারায়নি — RSVP-TE হয়ে MPLS-এ বড় traffic-গুচ্ছের পথ বানায়, যেখানে flow কম।
মূল উপলব্ধি: নিখুঁত নিশ্চয়তার চেয়ে “যথেষ্ট ভালো আর বড় আকারে চালানো যায়” বেশিরভাগ সময় জেতে। প্রতিটি flow-এর state মাঝখানে রাখা যত সুন্দরই হোক, scale আর বহু মালিকানার সামনে টেকে না — একই শিক্ষা ATM বনাম IP-তেও দেখেছেন (পর্ব ১৫)।
প্র ০৪PIM-SM-এ rendezvous point কেন লাগে, আর SSM কীভাবে তাকে বাদ দেয়? কোন পরিস্থিতিতে কোনটি বাছবেন?
Explicit join-এর একটি মৌলিক সমস্যা আছে: প্রাপকের router Join পাঠাবে কোথায়? Source tree বানাতে উৎসের ঠিকানা জানা চাই, কিন্তু প্রথাগত multicast-এ (Any-Source Multicast, ASM) প্রাপক শুধু দলের নাম জানে — “239.1.1.1 চাই”, কে পাঠাচ্ছে জানে না। উৎসও জানে না প্রাপক কারা। দুই পক্ষের দেখা হওয়ার জন্য একটি পূর্বনির্ধারিত জায়গা লাগে — rendezvous point. প্রাপকেরা RP-র দিকে (*,G) Join পাঠায়, উৎসের router RP-কে Register বার্তায় ডেটা পাঠায়, আর RP দুই পক্ষকে মিলিয়ে দেয়। ঘটকের মতো: বর আর কনের পরিবার একে অপরকে চেনে না, কিন্তু দুজনেই ঘটককে চেনে।
দামও স্পষ্ট। প্রতিটি router-কে জানতে হয় কোন দলের RP কে (static, বা BSR-এর মতো স্বয়ংক্রিয় ব্যবস্থা); RP নষ্ট হলে নতুন উৎস খুঁজে পাওয়া যায় না, তাই Anycast RP-র মতো কৌশল লাগে। Shared tree ঘুরপথ হতে পারে, তাই অনেক নেটওয়ার্কে last-hop router প্রথম packet পেয়েই source tree-তে সরে যায়। আর বিভিন্ন ISP-র RP-কে উৎসের খবর দিতে MSDP লাগত — আন্তঃ-ISP multicast-এর জটিলতার বড় অংশ এখান থেকেই।
SSM একটি সরল অনুমানে পুরো সমস্যা এড়ায়: প্রাপক আগে থেকেই উৎস জানে — IPTV-র চ্যানেল তালিকায় (উৎস, দল) লেখা থাকে। Host IGMPv3-এ বলে “(S, G) চাই”, router সরাসরি S-এর দিকে Join পাঠায়; RP, Register, MSDP কিছুই নেই। দুই প্রতিষ্ঠান একই 232.x ঠিকানা নিলেও সংঘর্ষ নেই, আর অনাকাঙ্ক্ষিত উৎস গাছে ঢুকতে পারে না। তাই উৎস জানা আর নির্দিষ্ট হলে (IPTV, শেয়ারবাজারের feed) SSM; উৎস অনেক আর বদলায়, বা পুরোনো অ্যাপ IGMPv3 বোঝে না — PIM-SM-এর ASM.
মূল উপলব্ধি: RP হলো “অজানা উৎস” সমস্যার সমাধান, আর SSM সেই সমস্যাটিকেই বাদ দেয়। নেটওয়ার্ক নকশায় প্রায়ই সবচেয়ে ভালো সমাধান হলো সমস্যার একটি অনুমান বদলে দেওয়া।
প্র ০৫Bandwidth যখন সস্তা আর প্রচুর, তখন QoS-এর দরকার আছে কি? “আরও bandwidth কিনুন” আর “QoS করুন” — এই দুই দর্শনের মধ্যে কোনটি কোথায় ঠিক?
নেটওয়ার্ক প্রকৌশলে একটি পুরোনো বিতর্ক আছে: over-provisioning বনাম QoS. প্রথম দর্শন বলে, link এত বড় রাখুন যে প্রায় কখনো ভিড় না হয় — তাহলে queue ছোট, delay কম, আর জটিল QoS-এর নিয়ম লিখে ভুল করার ঝুঁকিও নেই। অনেক বড় backbone আর data center মূলত এভাবেই চলে: link-এর গড় ব্যবহার কম রাখা হয়, আর ভিড় বাড়লে নতুন link যোগ হয়। DiffServ থাকলেও সেখানে তার কাজ খুব কম সময়েই চোখে পড়ে।
কিন্তু “ভিড় না হওয়া” সব জায়গায় সম্ভব নয়। শেষ মাইল: বাসা বা ছোট অফিসের upload link সবচেয়ে ধীর, একটি cloud backup মুহূর্তেই তা ভরে দেয়, আর bufferbloat-এ (পর্ব ১৫) ভিডিও কলের delay শত শত ms. Wi-Fi: দেয়াল, দূরত্ব বা প্রতিবেশীর নেটওয়ার্কে কার্যকর গতি হঠাৎ কমে। দামি link: দূরের শাখা, স্যাটেলাইট বা মোবাইল backhaul. আর ব্যর্থতার মুহূর্ত: একটি link নষ্ট হলে বাকিটিতে হঠাৎ দ্বিগুণ traffic — কাকে বাঁচাবেন, সেই নীতি আগে লেখা থাকা ভালো।
আধুনিক দৃষ্টিভঙ্গি তাই মিশ্রণ: মূল নেটওয়ার্কে যথেষ্ট bandwidth; ভিড়ের জায়গায় (প্রান্ত, WAN, Wi-Fi) কয়েকটি সরল শ্রেণি, আর সবার নিচে AQM. fq_codel বা CAKE প্রতিটি flow-কে আলাদা ছোট লাইনে রেখে প্রায় কোনো DSCP ছাড়াই ছোট, delay-সংবেদনশীল flow-কে বাঁচায় — “চিহ্ন ছাড়া QoS”; গবেষণায় L4S একই লক্ষ্যে ECN ব্যবহার করছে।
মূল উপলব্ধি: যেখানে bandwidth বাড়ানো সস্তা, সেখানে bandwidth-ই সবচেয়ে ভালো QoS. যেখানে ভিড় অনিবার্য — শেষ মাইল, Wi-Fi, দামি WAN, ব্যর্থতার মুহূর্ত — সেখানে কয়েকটি সরল শ্রেণি আর AQM অনেক বড় পার্থক্য তৈরি করে।
অনুশীলন
খাতা-কলম নিন — bit ভেঙে, ms ধরে ধরে হিসাব করুন।
-
হাতে হিসাব (MAC আর token bucket): (ক) 232.10.200.5 দলের Ethernet MAC কী? 239.138.200.5-এর MAC কি একই হবে? (খ) একটি policer-এ r = ২ Mbps, b = ১০০ KB (১ KB = ১,০০০ byte), আর link-এর গতি R = ১০ Mbps. পূর্ণ বালতি নিয়ে প্রেরক সর্বোচ্চ কতক্ষণ পূর্ণ গতিতে পাঠাতে পারবে, আর সেই সময়ে কত byte যাবে? যেকোনো ২ সেকেন্ডে সর্বোচ্চ কত byte যেতে পারে?
(ক) দ্বিতীয় byte ১০ =
00001010, প্রথম bit ০, শেষ ৭ bit = ১০ =0x0a; তৃতীয় ২০০ =0xc8; চতুর্থ ৫ =0x05. MAC =01:00:5e:0a:c8:05. 239.138.200.5: ১৩৮ =10001010— প্রথম bit ১ বাদ গেলে শেষ ৭ bit =0001010= ১০. তাই একই MAC — প্রথম byte (২৩২ বনাম ২৩৯) আর দ্বিতীয় byte-এর প্রথম bit দুটোই হারানো ৫ bit-এর মধ্যে।(খ) b = ১০০,০০০ byte = ৮,০০,০০০ bit. T = b ÷ (R − r) = ৮,০০,০০০ ÷ (৮ × ১০৬) = ০.১ সেকেন্ড; পাঠানো R × T = ১০ Mbps × ০.১ = ১ Mbit = ১,২৫,০০০ byte (যাচাই: b + rT = ১,০০,০০০ + ২৫,০০০ byte). যেকোনো ২ সেকেন্ডে সর্বোচ্চ b + rt = ১,০০,০০০ + (২,৫০,০০০ × ২) = ৬,০০,০০০ byte (r = ২ Mbps = ২,৫০,০০০ byte/s).
-
আউটপুট অনুমান করুন: অংশ ৭-এর
token_bucket.js-এ শুধুb = 3000বদলেb = 4500করা হলো (শুরুতেও বালতি ভরা, অর্থাৎ ৪,৫০০)। Policer কোন কোন packet ফেলবে? Shaper-এ শেষ packet (৪০ ms-এ আসা) কখন বের হবে? চালানোর আগে হিসাব করুন।Policer: t = ০-এ ৪,৫০০ → ৩,০০০; t = ১-এ ৩,১০০ → ১,৬০০; t = ২-এ ১,৭০০ → conform, ২০০; t = ৩-এ ৩০০ → exceed; t = ২০-এ ২,০০০ → ৫০০; t = ২১-এ ৬০০, দরকার ১,০০০ → exceed; t = ৪০-এ ২,৫০০ → conform. ফেলা হলো দুটি — ৩ ms আর ২১ ms-এর packet. বড় বালতি ঝাপটার আরও একটি packet বাঁচাল।
SHAPER t(ms) size leaves-at(ms) delay(ms) 0 1500 0 0 1 1500 1 0 2 1500 2 0 3 1500 15 12 20 1500 30 10 21 1000 40 19 40 1500 55 15Shaper-এ প্রথম তিনটি সাথে সাথে যায়, তারপর বালতি ২০০-তে; ৩ ms-এর packet ১,৩০০ token-এর জন্য ১২ ms অপেক্ষা করে ১৫-তে বের হয়। এরপর প্রতি ১,৫০০ byte-এ ১৫ ms আর ১,০০০ byte-এ ১০ ms — শেষ packet বের হয় ৫৫ ms-এ (আগে ছিল ৭০)। শিক্ষা: b বাড়ালে ঝাপটা বেশি অনুমতি পায়, loss আর delay দুটোই কমে — কিন্তু পরের router-এ ঝাপটাও বড় পৌঁছায়।
-
কমান্ড লিখুন (Linux): (ক) নিজের কম্পিউটার কোন কোন multicast দলে আছে, দেখার দুটি উপায়। (খ) UDP port 5004-এ পাঠানো নিজের সব packet-এ DSCP EF বসানোর একটি iptables নিয়ম। (গ) eth0-এর বের হওয়া traffic ৮ Mbps-এ shape করা, ৩২ kbit burst-সহ। (ঘ) EF বসানো হলো কি না, কীভাবে যাচাই করবেন?
ip maddr show # (ক) প্রতিটি interface-এর multicast MAC আর দল cat /proc/net/igmp # (ক) kernel-এর IGMP অবস্থা (hex, উল্টো byte ক্রম) sudo iptables -t mangle -A OUTPUT -p udp --dport 5004 -j DSCP --set-dscp-class EF # (খ) sudo tc qdisc add dev eth0 root tbf rate 8mbit burst 32kbit latency 50ms # (গ) sudo tcpdump -lni eth0 -v udp port 5004 | grep -m3 tos # (ঘ)(ঘ)-তে
tcpdump -vদেখাবেtos 0xb8— ৪৬ × ৪ = ১৮৪ (ECN থাকলে 0xb9 বা 0xba). iptables নেয় DSCP, tcpdump দেখায় পুরো TOS byte — গুলিয়ে ফেলাই প্রচলিত ভুল। nftables-এip dscp set ef; Windows-এ সাধারণত Group Policy-র QoS নীতি। শুধু নিজের যন্ত্রে বা ল্যাবে চালান। -
নকশা আর trace: একটি শাখা অফিসের WAN link ১০ Mbps. সেখানে একসাথে সর্বোচ্চ ১২টি G.711 কল (প্রতিটি IP স্তরে ৮০ kbps) হতে পারে, আর ভিডিও কনফারেন্সের জন্য ভিড়ের সময় অন্তত ৩ Mbps চাই। (ক) LLQ-র priority অংশ কত kbps দেবেন, আর কেন সীমা লাগবে? (খ) একটি কলের একদিকের delay: codec ২৫ ms, প্রচার ৩৫ ms, jitter buffer ৪০ ms. G.114-এর ~১৫০ ms নির্দেশনায় queuing-এর জন্য কত বাকি? (গ) কেউ PC থেকে সব packet-এ EF বসিয়ে পাঠাচ্ছে — কোথায় আর কীভাবে ঠেকাবেন?
(ক) ১২ × ৮০ = ৯৬০ kbps; link-layer header ধরে একটু বেশি, যেমন ১,০০০–১,১০০ kbps. সীমা (policer) না থাকলে ভুল চিহ্নের traffic বা অপ্রত্যাশিত বেশি কল priority queue দিয়ে পুরো link দখল করে বাকি শ্রেণিকে না খাইয়ে রাখত। বাকি প্রায় ৯ Mbps থেকে ভিডিও-শ্রেণিকে
bandwidthদিয়ে ৩ Mbps-এর ন্যূনতম ভাগ, বাকিটা default-এ fair queue.(খ) ২৫ + ৩৫ + ৪০ = ১০০ ms; queuing আর transmission-এর জন্য বাকি প্রায় ৫০ ms. ১০ Mbps-এ একটি ১,৫০০ byte-এর packet-এর transmission delay ১.২ ms, তাই ভয়েসের সামনে কয়েকটি বড় packet থাকলেও সমস্যা নেই — কিন্তু FIFO-তে ১ MB-এর ভরা buffer (৮০০ ms) পুরো বাজেট ধ্বংস করত।
(গ) Trust boundary access switch-এ: PC-র port untrusted — সেখান থেকে আসা DSCP ০ করে দেওয়া (ECN bit রেখে), শুধু IP phone-এর port বা voice VLAN trusted. সাথে WAN router-এর priority অংশের policer দ্বিতীয় নিরাপত্তা দেয়।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি অফিসের QoS-যুক্ত নেটওয়ার্কে একটি ভয়েস packet — ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- IP phone packet-এর DSCP ঘরে ৪৬ (EF) বসায়
- Access switch-এর trust boundary দেখে port-টি trusted, তাই চিহ্ন রাখে
- WAN router-এর classifier DSCP দেখে packet-কে voice শ্রেণিতে ফেলে
- Voice শ্রেণির policer দেখে packet নির্ধারিত হারের মধ্যে আছে কি না
- Output-এর priority queue থেকে packet অন্য শ্রেণির আগে WAN link-এ যায়
- পরের router নিজের PHB অনুযায়ী একই DSCP দেখে আবার আগে পাঠায়
IPv4 multicast দল 239.1.1.1-এর Ethernet MAC 01:00:5e:01:01:01. নিচের কোন দলটিও ঠিক একই MAC পায়?
- 239.1.1.2
- 239.1.2.1
- 224.129.1.1
- 239.2.1.1
একটি multicast router-এর unicast table অনুযায়ী উৎস 198.51.100.7-এ পৌঁছানোর পথ interface eth1 দিয়ে। ওই উৎসের একটি multicast packet eth2 দিয়ে এলো। RPF check-এ কী হবে?
- Packet গ্রহণ করে সব interface-এ পাঠানো হবে
- RPF check ব্যর্থ — packet ফেলে দেওয়া হবে
- Router নতুন multicast routing table বানিয়ে আবার পরীক্ষা করবে
- Packet উৎসের কাছে ফেরত পাঠানো হবে
একটি token bucket-এর হার r = ১ Mbps আর বালতির আকার b = ৫০,০০০ byte. যেকোনো ২ সেকেন্ডে সর্বোচ্চ কত byte পাঠানো যায়?
- ২,৫০,০০০ byte
- ৫০,০০০ byte
- ২০,৫০,০০০ byte
- ৩,০০,০০০ byte
একটি IPv4 packet-এর TOS byte 0x88. এর DSCP আর শ্রেণি কী?
- DSCP ৩৪, AF41
- DSCP ১৩৬, EF
- DSCP ৪৬, EF
- DSCP ৩২, CS4
একটি ISP গ্রাহকের ২০ Mbps চুক্তির বেশি traffic সাথে সাথে ফেলে দেয়, আর গ্রাহকের router নিজের বের হওয়া traffic আগেই ১৯ Mbps-এ মসৃণ করে buffer-এ রেখে পাঠায়। দুটি কাজের নাম যথাক্রমে কী?
- Shaping, তারপর policing
- Marking, তারপর classification
- Policing, তারপর shaping
- Admission control, তারপর scheduling
IntServ (RSVP-সহ) বড় ISP backbone-এ ব্যাপকভাবে চালু হয়নি — এর প্রধান কারণ কোনটি?
- এটি কোনো delay-এর নিশ্চয়তা দিতে পারত না
- প্রতিটি flow-এর জন্য প্রতিটি router-এ state আর সংকেত রাখতে হয়
- এটি IP header-এ কোনো জায়গা পায়নি
- RSVP শুধু TCP-র সাথে কাজ করত
একটি switch-এ IGMP snooping বন্ধ। একটি port-এর কম্পিউটার 239.5.5.5 দলে যোগ দিয়ে ১০ Mbps-এর stream নিচ্ছে। একই VLAN-এর অন্য port-গুলোর কী হবে?
- Switch MAC শিখে শুধু সদস্যের port-এ পাঠাবে
- Stream কোনো port-এই যাবে না
- শুধু অন্য VLAN-এর port-গুলো stream পাবে
- একই VLAN-এর সব port-এ stream ছড়াবে (flooding)
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Multicast = একবার পাঠানো, পথ ভাগ হলে কপি: IPv4 দল 224.0.0.0/4 (224.0.0.0/24 link-local, 232/8 SSM, 239/8 প্রতিষ্ঠানের ভেতরে); MAC =
01:00:5e+ শেষ ২৩ bit, তাই ৩২:১ সংঘর্ষ। - IGMP host-এর সদস্যপদ জানায় (v2: Report, Leave, Query; v3: উৎস বাছাই); IGMP snooping switch-কে শুধু সদস্য-port-এ পাঠাতে শেখায় — querier লাগে। IPv6-এ MLD.
- Multicast routing = গাছ: source tree (S,G) বনাম shared tree (*,G) RP-সহ; RPF check উৎসের দিকের interface ছাড়া সব কপি ফেলে; flood-and-prune (DVMRP, PIM-DM) বনাম explicit join (PIM-SM), আর SSM-এ RP নেই।
- QoS = ভিড়ের সময় ভাগ: প্রান্তে classification আর DSCP marking (EF ৪৬, AFxy = 8x + 2y, CSn = 8n), trust boundary; policing ফেলে, shaping দেরি করায়; token bucket-এ যেকোনো t-তে ≤ b + rt, সর্বোচ্চ ঝাপটা b ÷ (R − r).
- বাস্তবের নকশা: LLQ (policer-সহ priority + WFQ), DiffServ (শ্রেণি আর PHB) — IntServ-এর per-flow RSVP মানায়নি; MPLS-TE ভেতরে পথ বানায়; ECN-এর দাগ আর AQM queue ছোট রাখে; বাসায় SQM আর Wi-Fi-তে WMM.
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ২৭ · Transport layer — port, socket আর multiplexingপরবর্তী পর্বমডিউল ৫-এর শুরু: host-এর ভেতরে সঠিক প্রোগ্রামে পৌঁছানো।
- পর্ব ১৫ · Network layer — forwarding, routing আর router-এর ভেতরভিত্তিRouter-এর queue, FIFO, priority, WFQ, RED, CoDel আর bufferbloat — এই পর্বের QoS-এর পটভূমি।
- পর্ব ২৪ · Link state routing — Dijkstra আর OSPFএই মডিউলRPF check যে unicast পথের ওপর দাঁড়িয়ে, তার হিসাব।
- পর্ব ১৩ · VLAN আর trunking — এক switch-এ অনেক নেটওয়ার্কআগের মডিউলPCP (802.1p) আর voice VLAN — layer 2-এর অগ্রাধিকার।
- কম্পিউটার নেটওয়ার্ক · কোর্স হোম৬২টি পর্বCDN (পর্ব ৩৮), real-time আর streaming (পর্ব ৪০) আর TCP congestion control (পর্ব ৩২) পর্যন্ত পুরো রোডম্যাপ।
- DSA · Dijkstraপাশের ট্র্যাকShortest-path tree-র algorithm, যা দিয়ে RPF neighbour ঠিক হয়।
- অপারেটিং সিস্টেম · I/O সিস্টেমপাশের ট্র্যাকBuffer, queue আর scheduling — OS আর router-এর একই ধরনের সমস্যা।