পাঠ ১৩ · ৫৭-এর মধ্যে · মডিউল ৩

ARP — অ্যাড্রেস রেজোলিউশন প্রোটোকল

ARP — Address Resolution Protocol
৭ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

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

  • কেন IP ঠিকানা যথেষ্ট নয় — ফ্রেম পাঠাতে MAC ঠিকানাও কেন লাগে
  • ARP রিকোয়েস্ট/রিপ্লাই প্রক্রিয়া ধাপে ধাপে
  • ARP ক্যাশ কীভাবে বারবার ব্রডকাস্ট এড়ায়
  • ARP স্পুফিং কী, সংক্ষেপে (বিস্তারিত cybersecurity কোর্সে)

১ · সমস্যা — IP জানি, MAC জানি না

আপনার অ্যাপ্লিকেশন যখন একটি প্যাকেট পাঠাতে চায়, এটি গন্তব্যের IP ঠিকানা জানে (যেমন 192.168.1.10)। কিন্তু L11 থেকে আমরা জানি — ডেটা লিংক লেয়ারে ফ্রেম পাঠাতে হলে গন্তব্যের MAC ঠিকানা লাগে, কারণ Ethernet ফ্রেম হেডারে MAC ঠিকানাই ব্যবহৃত হয়, IP নয়। তাহলে একটি ডিভাইস কীভাবে জানে কোন IP-র পেছনে কোন MAC আছে?

উত্তর: ARPAddress Resolution Protocolএকটি প্রোটোকল যা একই LAN-এ একটি IP ঠিকানাকে তার সাথে যুক্ত MAC ঠিকানায় রূপান্তর করে, ব্রডকাস্ট রিকোয়েস্ট ও ইউনিকাস্ট রিপ্লাইয়ের মাধ্যমে। — অ্যাড্রেস রেজোলিউশন প্রোটোকল, যা ঠিক এই কাজটি করে: IP → MAC রূপান্তর।

২ · প্রক্রিয়া — রিকোয়েস্ট, রিপ্লাই, ক্যাশ

  • ব্রডকাস্ট রিকোয়েস্ট — ডিভাইসটি পুরো লোকাল নেটওয়ার্কে একটি প্রশ্ন পাঠায়: "192.168.1.10 এই IP-র মালিক কে? আমাকে তোমার MAC জানাও।"
  • ইউনিকাস্ট রিপ্লাই — শুধু সেই IP-র প্রকৃত মালিক ডিভাইসটি সরাসরি (ব্রডকাস্ট নয়) উত্তর দেয়, তার নিজের MAC ঠিকানা জানিয়ে।
  • ক্যাশিং — রিকোয়েস্টকারী ডিভাইস এই IP → MAC ম্যাপিং সীমিত সময়ের জন্য নিজের ARP ক্যাশ-এ সংরক্ষণ করে — একই IP-র জন্য প্রতিটি প্যাকেটে বারবার ব্রডকাস্ট করার দরকার নেই।
মূল অন্তর্দৃষ্টি

ARP শুধু একই LAN সেগমেন্টে কাজ করে — ব্রডকাস্ট কখনো রাউটার পার হয় না। অন্য নেটওয়ার্কে পাঠানোর সময় ডিভাইসটি চূড়ান্ত গন্তব্যের MAC-এর জন্য ARP করে না; বরং নিজের ডিফল্ট গেটওয়ে-এর MAC-এর জন্য ARP করে, আর গেটওয়ে (রাউটার) বাকি পথের দায়িত্ব নেয় (M4/L17-এ রাউটিং বিস্তারিত)।

Python
# ARP রিকোয়েস্ট/রিপ্লাই/ক্যাশ প্রক্রিয়ার একটি সরলীকৃত সিমুলেশন

# নেটওয়ার্কের "গ্রাউন্ড ট্রুথ" -- বাস্তবে প্রতিটি ডিভাইস নিজেই এটি জানে না,
# শুধু ব্রডকাস্ট রিকোয়েস্টের মাধ্যমে জিজ্ঞেস করে জানতে হয়
network = {
    "192.168.1.10": "AA:BB:CC:00:00:01",
    "192.168.1.20": "AA:BB:CC:00:00:02",
    "192.168.1.30": "AA:BB:CC:00:00:03",
}

arp_cache = {}  # রিকোয়েস্টকারীর নিজের ক্যাশ, শুরুতে খালি

def arp_resolve(target_ip, network, cache):
    if target_ip in cache:
        print(f"  [ক্যাশ হিট] {target_ip} -> {cache[target_ip]}  (কোনো ব্রডকাস্ট লাগেনি)")
        return cache[target_ip]

    print(f"  [ব্রডকাস্ট] কে '{target_ip}'-র মালিক? MAC জানাও...")
    mac = network.get(target_ip)
    if mac is None:
        print(f"  কোনো উত্তর আসেনি -- {target_ip} এই নেটওয়ার্কে নেই।")
        return None

    print(f"  [ইউনিকাস্ট রিপ্লাই] {target_ip} বলল, আমার MAC হলো {mac}")
    cache[target_ip] = mac  # ফলাফল ক্যাশে সংরক্ষণ
    return mac

print("প্রথমবার resolve করার চেষ্টা:")
mac1 = arp_resolve("192.168.1.20", network, arp_cache)
print("ফলাফল MAC:", mac1)

print("\nদ্বিতীয়বার একই IP-র জন্য resolve করার চেষ্টা:")
mac2 = arp_resolve("192.168.1.20", network, arp_cache)
print("ফলাফল MAC:", mac2)

print("\nবর্তমান ARP ক্যাশ:", arp_cache)

    
IP পরিচিত, MAC অজানা -- ARP ক্যাশে খোঁজা হলো, পাওয়া যায়নি ব্রডকাস্ট: "কে এই IP-র মালিক?" (পুরো LAN-এ পাঠানো হয়) ইউনিকাস্ট রিপ্লাই: মালিক ডিভাইস নিজের MAC জানায় ARP ক্যাশে (IP → MAC) সংরক্ষণ করা হলো
প্রথমবার ব্রডকাস্ট প্রয়োজন হয়, কিন্তু ক্যাশে সংরক্ষণের পর একই IP-র জন্য পরবর্তী প্রতিটি অনুরোধ তাৎক্ষণিক।
কোড আউটপুটে লক্ষ্য করুন — প্রথমবার 192.168.1.20 resolve করতে ব্রডকাস্ট ও রিপ্লাই দুটোই দেখানো হয়েছে, কিন্তু দ্বিতীয়বার শুধু "ক্যাশ হিট" — কোনো ব্রডকাস্ট ছাড়াই তাৎক্ষণিক ফলাফল। বাস্তব ARP ক্যাশ এন্ট্রিও একইভাবে কাজ করে, তবে কিছু সময় পর (সাধারণত কয়েক মিনিট) মেয়াদ শেষ হয়ে যায় এবং আবার রিফ্রেশ করতে হয়।

৩ · ARP স্পুফিং — একটি সংক্ষিপ্ত সতর্কতা

ডিফল্টভাবে ARP রিপ্লাই প্রমাণীকৃত (authenticated) নয় — কোনো ডিভাইস যাচাই ছাড়াই দাবি করতে পারে "আমিই এই IP-র মালিক", এমনকি সেটি সত্যি না হলেও। একে ARP স্পুফিং বলা হয় — একটি সুপরিচিত, বাস্তব আক্রমণ কৌশল যা ট্রাফিক পুনর্নির্দেশ করতে ব্যবহৃত হয়। এর প্রক্রিয়া ও প্রতিরক্ষা বিস্তারিতভাবে cybersecurity কোর্সের নেটওয়ার্ক অ্যাটাক পাঠে কভার করা হয়েছে — এখানে শুধু সচেতনতার জন্য উল্লেখ করা হলো।

মূল কথা · Key takeaway

ARP হলো নেটওয়ার্ক লেয়ার (IP) ও ডেটা লিংক লেয়ার (MAC)-এর মধ্যে সেতুবন্ধন — যতবারই একটি ডিভাইস প্রথমবার কোনো লোকাল IP-র সাথে কথা বলতে চায়, ঠিক এই ব্রডকাস্ট-রিপ্লাই-ক্যাশ চক্রটিই নীরবে পর্দার পেছনে ঘটে চলে।

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

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

প্র ০১ ARP রিকোয়েস্ট ব্রডকাস্ট হয়, কিন্তু রিপ্লাই কেন ইউনিকাস্ট হয়?

রিকোয়েস্টের সময় প্রেরক জানে না কোন ডিভাইসের কাছে লক্ষ্য IP আছে — তাই সবাইকে জিজ্ঞেস করতে হয় (ব্রডকাস্ট)। কিন্তু রিপ্লাই পাঠানোর সময় মালিক ডিভাইস ইতিমধ্যেই রিকোয়েস্টকারীর MAC ও IP উভয়ই জানে (রিকোয়েস্ট ফ্রেম থেকে) — তাই সরাসরি তার কাছে (ইউনিকাস্ট) উত্তর পাঠানোই যথেষ্ট, বাকি সবাইকে বিরক্ত করার দরকার নেই।

প্র ০২ ARP কেন অন্য নেটওয়ার্কে (রাউটারের ওপারে) কাজ করে না?

ARP ব্রডকাস্টের ওপর নির্ভর করে, আর রাউটার ডিফল্টভাবে ব্রডকাস্ট ফ্রেম এক LAN থেকে আরেক LAN-এ পাঠায় না (এটি রাউটারের একটি মৌলিক কাজ — ব্রডকাস্ট ডোমেইনগুলোকে বিচ্ছিন্ন রাখা)। তাই একটি ডিভাইস অন্য নেটওয়ার্কের কোনো IP-র জন্য সরাসরি ARP করতে পারে না — বরং নিজের ডিফল্ট গেটওয়ের MAC-এর জন্য ARP করে, ডেটা গেটওয়ে পর্যন্ত পাঠায়, আর গেটওয়ে রাউটিং টেবিল (M4/L17) ব্যবহার করে বাকি পথ ঠিক করে।

প্র ০৩ ARP ক্যাশ এন্ট্রির একটি মেয়াদ (timeout) থাকে কেন — কেন এন্ট্রিগুলো স্থায়ীভাবে সংরক্ষণ করা হয় না?

একটি ডিভাইসের নেটওয়ার্ক ইন্টারফেস কার্ড বদলাতে পারে, বা IP ঠিকানা পুনর্বিন্যাস হতে পারে (DHCP-এর মাধ্যমে, M6/L33) — এক্ষেত্রে পুরনো IP-MAC ম্যাপিং আর সঠিক থাকে না। মেয়াদ শেষ হওয়া নিশ্চিত করে ক্যাশ স্থবির (stale) তথ্য ধরে না রেখে পর্যায়ক্রমে রিফ্রেশ হয়, যা নেটওয়ার্কের পরিবর্তনশীল বাস্তবতার সাথে মানানসই।

অনুশীলন

  1. চিন্তা করুন: আপনার নিজের কম্পিউটারে (উইন্ডোজে arp -a, লিনাক্সে ip neigh) কমান্ড চালালে কী দেখতে পাবেন বলে মনে করেন?

    আপনি আপনার লোকাল নেটওয়ার্কের সেই ডিভাইসগুলোর IP → MAC ম্যাপিংয়ের একটি তালিকা দেখতে পাবেন, যাদের সাথে সম্প্রতি যোগাযোগ হয়েছে (যেমন আপনার রাউটার/গেটওয়ে) — এটিই আপনার ডিভাইসের বর্তমান ARP ক্যাশ।

  2. পরীক্ষা করুন: উপরের কোড সেলে এমন একটি IP দিয়ে arp_resolve কল করুন যা network ডিকশনারিতে নেই — ফলাফল কী হয় দেখুন এবং কেন তা যুক্তিসঙ্গত তা ব্যাখ্যা করুন।

    ফলাফল হবে None, এবং "কোনো উত্তর আসেনি" বার্তা প্রিন্ট হবে — বাস্তব জীবনে এর মানে হলো ARP রিকোয়েস্টের কোনো উত্তর আসেনি (হয়তো সেই IP-র কোনো ডিভাইস নেটওয়ার্কে নেই, বা অফলাইনে আছে) — এই পরিস্থিতিতে প্যাকেট পাঠানো সম্ভব হয় না।

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

পাঠ ১২
সুইচ ও ব্রিজ — ফ্রেম ফরওয়ার্ডিং