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

কেস স্টাডি: নেটওয়ার্ক সমস্যা ডিবাগ করা

Case study: debugging a network issue
১০ মিনিট পড়া উন্নত · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

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

  • একটি সিস্টেমেটিক, স্তর-অনুযায়ী নেটওয়ার্ক ডিবাগিং পদ্ধতি
  • কোন চেক কোন স্তরের সমস্যা চিহ্নিত করে ও কেন এই নির্দিষ্ট ক্রমে করা হয়
  • কেন DNS সমস্যাকে সাধারণ কানেক্টিভিটি সমস্যা থেকে আলাদাভাবে দেখা জরুরি
  • Python দিয়ে একটি ডায়াগনস্টিক ডিসিশন-ট্রি ফাংশন লেখা ও কয়েকটি দৃশ্যপটে যাচাই

১ · দৃশ্যপট (Scenario)

"ইন্টারনেট কাজ করছে না" — এটি সম্ভবত সবচেয়ে সাধারণ কিন্তু সবচেয়ে অস্পষ্ট অভিযোগ। বাস্তব সমস্যাটি হতে পারে অনেক ভিন্ন স্তরে — একটি ঢিলে থাকা তার থেকে শুরু করে একটি ভুল DNS সেটিং পর্যন্ত। একজন অভিজ্ঞ নেটওয়ার্ক ইঞ্জিনিয়ার এলোমেলোভাবে অনুমান করেন না — তিনি একটি সিস্টেমেটিক, নিচ থেকে উপরের দিকে যাওয়া পদ্ধতি অনুসরণ করেন।

২ · ওয়াকথ্রু (Walkthrough) — বটম-আপ ডায়াগনস্টিক ক্রম

  1. ফিজিক্যাল সংযোগ (M2) — সবচেয়ে সহজ স্তর প্রথমে: কেবল লাগানো আছে? WiFi সংযুক্ত?
  2. IP কনফিগারেশন (M4/L14, M6/L33) — ডিভাইসের একটি বৈধ IP ঠিকানা আছে? DHCP লিজ ঠিকমতো পাওয়া গেছে?
  3. লোকাল reachability (M4/L21 — ICMP) — ডিফল্ট গেটওয়েতে ping করে দেখুন।
  4. দূরবর্তী reachability — একটি পরিচিত বাহ্যিক IP-তে ping করুন (যেমন একটি পাবলিক DNS সার্ভার) — এটি বুঝিয়ে দেয় সমস্যা লোকাল নেটওয়ার্কে নাকি গেটওয়ের বাইরে।
  5. DNS রেজোলিউশন — সংযোগ থেকে আলাদাভাবে (M6/L30) — একটি অত্যন্ত সাধারণ বাস্তব গোচার: "ইন্টারনেট নেই" প্রায়ই আসলে মানে "DNS রেজোলিউশন ব্যর্থ হচ্ছে", যেখানে পরিচিত একটি বাহ্যিক IP-তে raw কানেক্টিভিটি ঠিকই কাজ করে।
  6. পোর্ট-লেভেল ব্লকিং (M10/L46) — যদি একটি নির্দিষ্ট অ্যাপ্লিকেশন ব্যর্থ হয় অথচ বেসিক কানেক্টিভিটি কাজ করছে, তাহলে ফায়ারওয়াল নিয়ম পরীক্ষা করুন।
কেন এই ক্রম — bottom-up-then-isolate

এই পদ্ধতিটি ঠিক OSI স্তরের ক্রম অনুসরণ করে — ফিজিক্যাল → লিংক/নেটওয়ার্ক → এরপর DNS ও অ্যাপ্লিকেশন-নির্দিষ্ট সমস্যায় ফোকাস সংকুচিত করা। প্রথমে সবচেয়ে সহজ ও সস্তা চেকগুলো করলে বেশিরভাগ সাধারণ সমস্যা দ্রুত ধরা পড়ে, এবং প্রতিটি পরের ধাপ আগের ধাপের ফলাফলের উপর নির্ভর করে পরবর্তী সন্দেহভাজন এলাকা নির্ধারণ করে।

Python
def diagnose(physical_up, ip_configured, gateway_reachable,
             external_ip_reachable, dns_resolves):
    """বটম-আপ ডায়াগনস্টিক ক্রম অনুসরণ করে সবচেয়ে সম্ভাব্য সমস্যার স্তর/কারণ ফেরত দেয়।"""
    if not physical_up:
        return "ফিজিক্যাল স্তর সমস্যা (M2) — কেবল/WiFi সংযোগ নেই, প্রথমে এটি ঠিক করুন"
    if not ip_configured:
        return "IP কনফিগারেশন সমস্যা (M4/L14, M6/L33) — বৈধ IP/DHCP লিজ নেই"
    if not gateway_reachable:
        return "লোকাল নেটওয়ার্ক সমস্যা (M4/L21) — ডিফল্ট গেটওয়ে পৌঁছানো যাচ্ছে না"
    if not external_ip_reachable:
        return "গেটওয়ের বাইরের সংযোগ সমস্যা — ISP বা আপস্ট্রিম রাউটিং সমস্যা"
    if not dns_resolves:
        return ("DNS রেজোলিউশন সমস্যা (M6/L30), সাধারণ কানেক্টিভিটি সমস্যা নয় — "
                "IP দিয়ে সংযোগ ঠিকই কাজ করছে, শুধু ডোমেইন নেম রেজোলভ হচ্ছে না")
    return "বেসিক কানেক্টিভিটি ও DNS ঠিক আছে — নির্দিষ্ট অ্যাপ্লিকেশন বা পোর্ট ব্লকিং (M10/L46) পরীক্ষা করুন"


scenarios = [
    {"name": "কেবল খোলা",                "physical_up": False, "ip_configured": True,  "gateway_reachable": True,  "external_ip_reachable": True,  "dns_resolves": True},
    {"name": "DHCP লিজ ব্যর্থ",           "physical_up": True,  "ip_configured": False, "gateway_reachable": False, "external_ip_reachable": False, "dns_resolves": False},
    {"name": "গেটওয়ে ডাউন",              "physical_up": True,  "ip_configured": True,  "gateway_reachable": False, "external_ip_reachable": False, "dns_resolves": False},
    {"name": "\"ইন্টারনেট নেই\" (আসলে DNS)", "physical_up": True,  "ip_configured": True,  "gateway_reachable": True,  "external_ip_reachable": True,  "dns_resolves": False},
    {"name": "সব ঠিক, একটি অ্যাপ ব্যর্থ",  "physical_up": True,  "ip_configured": True,  "gateway_reachable": True,  "external_ip_reachable": True,  "dns_resolves": True},
]

for s in scenarios:
    name = s.pop("name")
    result = diagnose(**s)
    print(f"দৃশ্যপট: {name}")
    print(f"  নির্ণয়: {result}\n")

    
মূল কথা · Key takeaway

নেটওয়ার্ক ডিবাগিং কোনো জাদু নয় — এটি OSI স্তরের ক্রম অনুসরণ করে একটি সিস্টেমেটিক প্রক্রিয়া, যেখানে সবচেয়ে সহজ চেক আগে করা হয় এবং প্রতিটি ফলাফল পরবর্তী সন্দেহভাজন এলাকা সংকুচিত করে। "DNS বনাম সংযোগ" পার্থক্যটি মনে রাখা — বেশিরভাগ "ইন্টারনেট ডাউন" রিপোর্টের প্রকৃত মূল কারণ ধরতে সাহায্য করে।

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

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

প্র ০১ কেন ফিজিক্যাল সংযোগ সবার আগে চেক করা হয়, DNS বা অ্যাপ্লিকেশন-নির্দিষ্ট সমস্যা আগে নয়?

কারণ যদি ফিজিক্যাল সংযোগ না থাকে, তাহলে উপরের কোনো স্তরই (IP, DNS, TCP, অ্যাপ্লিকেশন) কাজ করার কোনো সুযোগই পাবে না — সেগুলো চেক করা সময় নষ্ট হবে। সবচেয়ে সহজ ও মৌলিক নির্ভরতা আগে নিশ্চিত করলে বাকি ধাপগুলোর ফলাফল অর্থপূর্ণ হয়।

প্র ০২ একজন ব্যবহারকারী বলছেন "ব্রাউজারে কিছুই খুলছে না, কিন্তু আমি একটি অনলাইন গেম ঠিকমতো খেলতে পারছি" — এই তথ্য কীভাবে ডায়াগনসিসে সাহায্য করে?

যেহেতু গেম (যা সাধারণত সরাসরি IP দিয়ে সংযোগ করে) কাজ করছে, ফিজিক্যাল, IP ও রাউটিং সবই ঠিক আছে — সমস্যাটি সম্ভবত DNS-নির্দিষ্ট, কারণ ব্রাউজার ডোমেইন নেম রেজোলভ করতে ব্যর্থ হচ্ছে। এই একটি পর্যবেক্ষণই diagnose()-এর কয়েকটি ধাপ এড়িয়ে সরাসরি DNS সন্দেহের দিকে ইঙ্গিত দেয়।

প্র ০৩ কেন গেটওয়ে reachability ও বাহ্যিক IP reachability দুটি আলাদা চেক হিসেবে রাখা হয়েছে, একটি একক চেক নয়?

এই দুটি ভিন্ন সমস্যা এলাকা চিহ্নিত করে — গেটওয়ে পৌঁছানো না গেলে সমস্যা সম্পূর্ণ লোকাল নেটওয়ার্কে (আপনার রাউটার/সুইচ), কিন্তু গেটওয়ে পৌঁছানো গেলেও বাহ্যিক IP-তে ব্যর্থ হলে সমস্যা গেটওয়ের বাইরে (ISP বা আপস্ট্রিম রাউটিং) — এই পার্থক্য না রাখলে "কোথায় ঠিক করতে হবে" তা বোঝা যেত না।

অনুশীলন

  1. চিন্তা করুন: scenarios লিস্টে একটি নতুন দৃশ্যপট যোগ করুন যেখানে সবকিছু ঠিক আছে (সব True) এবং ফলাফল কী আসবে অনুমান করুন, তারপর Run চেপে যাচাই করুন।

    ফলাফল হবে "বেসিক কানেক্টিভিটি ও DNS ঠিক আছে — নির্দিষ্ট অ্যাপ্লিকেশন বা পোর্ট ব্লকিং (M10/L46) পরীক্ষা করুন" — কারণ সব বেসিক চেক পাস করলে, ফাংশনটি ধরে নেয় সমস্যাটি আরও নির্দিষ্ট কোনো অ্যাপ্লিকেশন-স্তরের কারণে, সাধারণ কানেক্টিভিটির সমস্যা নয়।

  2. পরীক্ষা করুন: diagnose() ফাংশনে gateway_reachable=False কিন্তু external_ip_reachable=True — এমন একটি অসম্ভব-শোনা সংমিশ্রণ পরীক্ষা করুন এবং ফলাফল বিশ্লেষণ করুন।

    যেহেতু ফাংশনটি ক্রমান্বয়ে চেক করে ও gateway_reachable=False থেকেই থেমে যায় (early return), এটি "লোকাল নেটওয়ার্ক সমস্যা" রিপোর্ট করবে, external_ip_reachable-এর মান যাই হোক না কেন — বাস্তবে গেটওয়ে পৌঁছানো না গিয়ে বাহ্যিক IP পৌঁছানো অস্বাভাবিক, তাই এই early-return ডিজাইনটি বাস্তবসম্মত অনুমানের উপর ভিত্তি করে তৈরি।

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

আগের পাঠ
কেস স্টাডি: সকেট দিয়ে চ্যাট অ্যাপ্লিকেশন