পাঠ ১৫ · ৫৭-এর মধ্যে · মডিউল ৪
Home / Courses / Computer Networks / সাবনেটিং ও CIDR

সাবনেটিং ও CIDR

Subnetting & CIDR
৯ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • CIDR নোটেশন ও প্রিফিক্স লেংথের অর্থ
  • ব্যবহারযোগ্য হোস্ট সংখ্যা গণনার সূত্র ও কেন ২টি ঠিকানা বাদ যায়
  • /24, /26, /30-এর জন্য মোট ও ব্যবহারযোগ্য ঠিকানা সংখ্যা এবং সাবনেট মাস্ক
  • Python দিয়ে এই সব সংখ্যা লাইভ গণনা করে যাচাই

১ · CIDR নোটেশন — প্রিফিক্স লেংথের অর্থ

CIDRClassless Inter-Domain Routingএকটি নমনীয় ঠিকানা বরাদ্দ পদ্ধতি, যেখানে IP/প্রিফিক্স_লেংথ নোটেশনে প্রিফিক্স লেংথ নেটওয়ার্ক অংশের বিট সংখ্যা নির্দেশ করে — পুরনো কঠোর ক্লাস-ভিত্তিক (L14) স্কিমের প্রতিস্থাপন। নোটেশন লেখা হয় IP/প্রিফিক্স_লেংথ আকারে — যেমন 192.168.1.0/24। এখানে /24 বলছে প্রথম ২৪ বিট হলো নেটওয়ার্ক অংশ (স্থির থাকে), আর বাকি ৩২-২৪ = ৮ বিট হলো হোস্ট অংশ (একটি নেটওয়ার্কের মধ্যে প্রতিটি ডিভাইসের জন্য ভিন্ন)।

এই নমনীয় প্রিফিক্স লেংথই CIDR-কে L14-এর কঠোর ক্লাস-ভিত্তিক স্কিমের চেয়ে ভালো করে তোলে — প্রয়োজন অনুযায়ী /27, /28, বা যেকোনো মধ্যবর্তী আকারের ব্লক বরাদ্দ করা যায়, অপচয় অনেক কম হয়।

২ · ব্যবহারযোগ্য হোস্ট সংখ্যা গণনা

যদি হোস্ট অংশে $h = 32 - p$ বিট থাকে (যেখানে $p$ হলো প্রিফিক্স লেংথ), তাহলে সম্ভাব্য মোট ঠিকানা সংখ্যা $2^h$টি। কিন্তু এর মধ্যে দুটি ঠিকানা বিশেষ কাজে সংরক্ষিত ও ডিভাইসে বরাদ্দ করা যায় না —

  • সবচেয়ে ছোট ঠিকানাটি — নেটওয়ার্ক ঠিকানা (পুরো সাবনেটকে বোঝাতে ব্যবহৃত হয়, কোনো নির্দিষ্ট ডিভাইসকে নয়)।
  • সবচেয়ে বড় ঠিকানাটি — ব্রডকাস্ট ঠিকানা (সাবনেটের সব ডিভাইসকে একসাথে পাঠাতে ব্যবহৃত হয়)।

তাই ব্যবহারযোগ্য হোস্ট সংখ্যার সূত্র —

$$\text{ব্যবহারযোগ্য হোস্ট} = 2^{(32-p)} - 2$$

যাচাইকৃত উদাহরণ

/24: $h=8$, $2^8=256$ মোট ঠিকানা, ব্যবহারযোগ্য $=256-2=254$।
/26: $h=6$, $2^6=64$ মোট ঠিকানা, ব্যবহারযোগ্য $=64-2=62$।
/30: $h=2$, $2^2=4$ মোট ঠিকানা, ব্যবহারযোগ্য $=4-2=2$ — এই ছোট আকারটি সাধারণত দুটি রাউটারের মধ্যে সরাসরি পয়েন্ট-টু-পয়েন্ট লিংকে ব্যবহৃত হয়, যেখানে ঠিক দুটি ডিভাইসের বেশি লাগে না।

৩ · সাবনেট মাস্ক

একটি সাবনেট মাস্কSubnet Maskপ্রিফিক্স লেংথের দশমিক-অক্টেট রূপ — নেটওয়ার্ক বিটের অবস্থানে ১, হোস্ট বিটের অবস্থানে ০ বসিয়ে তৈরি হয়। হলো প্রিফিক্স লেংথের একটি বিকল্প উপস্থাপনা — নেটওয়ার্ক অংশের প্রতিটি বিট ১, হোস্ট অংশের প্রতিটি বিট ০। যেমন /24 = 255.255.255.0 (প্রথম ৩ অক্টেট পুরোপুরি ১, শেষটি পুরোপুরি ০)।

/26-এর জন্য: যেহেতু ২৬ = ২৪ + ২, প্রথম ৩ অক্টেট (২৪ বিট) পুরোপুরি ১ থাকে, আর চতুর্থ অক্টেটের প্রথম ২ বিট-ও ১ হয় (বাকি ৬ বিট ০) — অর্থাৎ 11000000। এই বাইনারিকে দশমিকে রূপান্তর করলে $128+64=192$ — তাই /26-এর সাবনেট মাস্ক হলো 255.255.255.192।

Python
# CIDR প্রিফিক্স লেংথ থেকে মোট ঠিকানা, ব্যবহারযোগ্য হোস্ট ও সাবনেট মাস্ক -- লাইভ গণনা

def subnet_info(prefix_length):
    host_bits = 32 - prefix_length
    total_addresses = 2 ** host_bits
    usable_hosts = total_addresses - 2 if host_bits >= 1 else 0

    # সাবনেট মাস্ক তৈরি -- প্রথম prefix_length বিট ১, বাকিগুলো ০
    mask_bits = ("1" * prefix_length) + ("0" * host_bits)
    octets = [mask_bits[i:i+8] for i in range(0, 32, 8)]
    subnet_mask = ".".join(str(int(o, 2)) for o in octets)

    return total_addresses, usable_hosts, subnet_mask

for prefix in (24, 26, 30):
    total, usable, mask = subnet_info(prefix)
    print(f"/{prefix}  ->  মোট ঠিকানা: {total:4d}   ব্যবহারযোগ্য হোস্ট: {usable:3d}   সাবনেট মাস্ক: {mask}")

# স্পষ্টভাবে প্রত্যাশিত মান যাচাই (self-check)
assert subnet_info(24) == (256, 254, "255.255.255.0")
assert subnet_info(26) == (64, 62, "255.255.255.192")
assert subnet_info(30) == (4, 2, "255.255.255.252")
print("\nসব মান সঠিকভাবে যাচাই হলো (assert পাস করেছে)।")

    
192.168.1.0/24 (২৫৪টি ব্যবহারযোগ্য ঠিকানা) ৪টি /26-এ ভাগ .0/26 (৬২ হোস্ট) .64/26 (৬২ হোস্ট) .128/26 (৬২ হোস্ট) .192/26 (৬২ হোস্ট)
একটি /24 ব্লকের ২৫৬টি ঠিকানা চারটি সমান /26 সাবনেটে ভাগ করলে প্রতিটিতে ৬২টি ব্যবহারযোগ্য হোস্ট থাকে — চারটি ভিন্ন অফিস বিভাগের জন্য উপযুক্ত।
কোড আউটপুটের assert লাইনগুলো লক্ষ্য করুন — এগুলো নিশ্চিত করে যে ফাংশনটি ঠিক সেই মানই দেয় যা আমরা হাতে হিসাব করে যাচাই করেছি (/24 → ২৫৬/২৫৪, /26 → ৬৪/৬২, /30 → ৪/২)। কোনো মান হাতে অনুমান না করে, কোড নিজেই গণনা করে প্রমাণ করছে।
মূল কথা · Key takeaway

সাবনেটিং মূলত একটি বড় ঠিকানা ব্লককে সংগঠনগত বা রাউটিং-দক্ষতার কারণে ছোট ছোট অংশে ভাগ করার কৌশল। প্রিফিক্স লেংথ যত বড় হয়, হোস্ট বিট তত কম থাকে, ফলে প্রতিটি সাবনেট তত ছোট হয় — কিন্তু সূত্র $2^{(32-p)}-2$ সবসময় একই থাকে, শুধু $p$-এর মান বদলায়।

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

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

প্র ০১ কেন ব্যবহারযোগ্য হোস্ট সংখ্যার সূত্রে সবসময় ২ বিয়োগ করা হয়, ১ বা ৩ নয়?

প্রতিটি সাবনেটে ঠিক দুটি ঠিকানা বিশেষ উদ্দেশ্যে সংরক্ষিত — সবচেয়ে ছোট মানটি নেটওয়ার্ক ঠিকানা (পুরো সাবনেটের পরিচয়) এবং সবচেয়ে বড় মানটি ব্রডকাস্ট ঠিকানা (সাবনেটের সবাইকে একসাথে পাঠানোর জন্য)। এই দুটি কখনো কোনো নির্দিষ্ট ডিভাইসকে বরাদ্দ করা যায় না, তাই মোট থেকে ঠিক ২টি বাদ যায়।

প্র ০২ /30-এর মতো ছোট সাবনেট (মাত্র ২টি ব্যবহারযোগ্য ঠিকানা) বাস্তবে কোথায় ব্যবহৃত হয়?

দুটি রাউটারের মধ্যে সরাসরি পয়েন্ট-টু-পয়েন্ট সংযোগে — যেখানে ঠিক দুটি ডিভাইস (দুই প্রান্তের রাউটার ইন্টারফেস) ছাড়া আর কারো ঠিকানা প্রয়োজন নেই। একটি /24 বা /26 বরাদ্দ করলে বাকি প্রায় সব ঠিকানা অপচয় হতো — /30 ঠিক প্রয়োজনীয় আকারে ফিট করে।

প্র ০৩ প্রিফিক্স লেংথ যত বাড়ে (যেমন /24 থেকে /26 থেকে /30), ব্যবহারযোগ্য হোস্ট সংখ্যার কী হয় — এবং কেন?

ব্যবহারযোগ্য হোস্ট সংখ্যা দ্রুত কমে যায় — কারণ প্রিফিক্স লেংথ বাড়া মানে হোস্ট বিট ($h=32-p$) কমে যাওয়া, আর মোট ঠিকানা সংখ্যা $2^h$ অনুযায়ী সূচকীয়ভাবে (exponentially) কমে। /24 → /26-এ প্রিফিক্স মাত্র ২ বিট বাড়লেও মোট ঠিকানা ২৫৬ থেকে ৬৪-তে নেমে আসে — চার ভাগের এক ভাগ, কারণ প্রতিটি অতিরিক্ত বিট মোট ঠিকানা সংখ্যাকে অর্ধেক করে দেয়।

অনুশীলন

  1. চিন্তা করুন: একটি অফিসের ৪টি বিভাগের প্রতিটিতে সর্বোচ্চ ৫০টি ডিভাইস আছে। একটি একক /24 ব্লককে চারটি সমান সাবনেটে ভাগ করলে প্রতিটি বিভাগের জন্য কোন প্রিফিক্স লেংথ যথেষ্ট হবে?

    /26 যথেষ্ট — কারণ এতে ৬২টি ব্যবহারযোগ্য হোস্ট থাকে, যা ৫০টি ডিভাইসের চেয়ে বেশি। একটি /24-কে চারটি সমান /26-এ ভাগ করলে ঠিক চারটি বিভাগের জন্য চারটি স্বতন্ত্র সাবনেট পাওয়া যায় (উপরের ডায়াগ্রামে দেখানো হয়েছে), প্রতিটিতে ৫০টি ডিভাইসের জন্য পর্যাপ্ত জায়গা রেখে।

  2. পরীক্ষা করুন: উপরের কোড সেলে subnet_info(28) কল করে ফলাফল প্রিন্ট করুন এবং হাতে হিসাব করে (২^(৩২-২৮)) যাচাই করুন ফলাফল সঠিক কিনা।

    /28-এ হোস্ট বিট $h=32-28=4$, তাই মোট ঠিকানা $2^4=16$, ব্যবহারযোগ্য হোস্ট $=16-2=14$। সাবনেট মাস্কের শেষ অক্টেটে উপরের ৪ বিট ১ থাকবে (11110000), যা দশমিকে ২৪০ — অর্থাৎ মাস্ক 255.255.255.240। কোডের আউটপুট এই তিনটি মানের সাথে মিলে যাওয়া উচিত।

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

পাঠ ১৪
IP অ্যাড্রেসিং — IPv4 বেসিকস