Foundationপ্রথম নীতি থেকে
LEVEL 7লেসন ৩/২২কঠিন৪৫ মিনিট

Switch ও ARP — MAC address কে কোথায় পাঠাব জানা

Switches and ARP

Frame-টা গেল gateway-র দিকে — কিন্তু switch জানল কোন port-এ? আর laptop জানল gateway-র MAC? MAC-learning আর ARP-এর দুই-স্তরের 'কে কোথায়' সমাধান।

এই লেসন শেষে আপনি পারবেন

  • Switch-এর MAC learning table-এর নিয়ম — source-MAC দেখে শেখা, unknown-destination flood, aging timeout — একটা scripted scenario-তে table-এর evolution trace করতে পারবেন
  • Broadcast domain আর collision domain-এর পার্থক্য দিয়ে বলতে পারবেন switch/router ঠিক কোনটার সীমা ভাঙে
  • ARP-এর request-broadcast → reply-unicast flow, cache entry-র জীবনচক্র (REACHABLE→STALE→PROBE) আর gratuitous ARP-এর কাজ — packet-by-packet ব্যাখ্যা করতে পারবেন
  • ARP spoofing কীভাবে MITM খোলে আর Dynamic ARP Inspection/static-entry কীভাবে বন্ধ করে — defensive framing-এ বলতে পারবেন
  • কোন মুহূর্তে dst-MAC-এ সিদ্ধান্ত (L2) আর কোন মুহূর্তে dst-IP-এ (L3) — host আর router দুই দৃষ্টিতেই forwarding decision-টা হাতে trace করতে পারবেন

আগে যা বোঝা থাকা দরকার

আগে এটা বুঝি

আগের লেসনে frame-টা তারে উঠল DST-MAC b8:27:eb:44:9c:10 লিখে। দুটো প্রশ্ন ঝুলে ছিল:

প্রশ্ন ১: ঘরের switch-frame-টা পেল চার port-এর কোনটা দিয়ে পাঠাবে? Laptop port-1-এ, router port-4-এ, TV port-2-এ, phone port-3-এ — সঠিক উত্তর port-4। Switch জানে কীভাবে?

প্রশ্ন ২: Laptop-ও তো frame লিখেছিল কারো বলে না — gateway- র MAC লিখেছিল। সে MAC address টা শিখল কোথা থেকে? IP-তে তো শুধু 192.168.1.1 জানা ছিল!

উত্তর দুটো দুই স্তরে: switch-এর MAC learning (নিঃশব্দ, passive observation), আর host-দের ARP (জোরে চিৎকার করে জিজ্ঞা)। দুটোই ইন্টারনেটের সবচেয়ে সফল অলস-বুদ্ধির নমুনা — কেউ কোনো central registry maintain করে না, সবাই শুধু দেখে-শোনে- মনে রাখে।

আজকের journey-অবস্থান: আমাদের packet এখনো ঘরের ভেতরে — প্রথম hop-এর দরজা খুলছি।

মূল ধারণা

Switch-এর একটাই মন্ত্র

Switch প্রতিটা incoming-frame-এ তিনটা-কাজ:

১. Source-MAC + arrival-port নোট করো     ← LEARNING (নতুন হলে)
২. Destination-MAC টেবিলে খোঁজো:
   found  → শুধু ওই এক port-এ পাঠাও      ← FORWARDING (filtering)
   miss   → সব port-এ (arrival-port বাদে)← FLOODING
৩. Entry-র age refresh করো; পুরনো (~300s নিঃশব্দে) মুছে দাও  ← AGING

Table-টার নাম CAM table / FDB (Forwarding Database):

VLAN  MAC                 TYPE       AGE   PORT
  1   a4:5e:60:d2:1f:83   DYNAMIC     12   eth1   ← laptop
  1   b8:27:eb:44:9c:10   DYNAMIC   240    eth4   ← router/gateway
  1   3c:22:fb:09:aa:71   DYNAMIC     5    eth2   ← TV

Flood-দুই-মুখ — ভালো: first-contact-delivery; খারাপ: broadcast/multicast সবসময় flood (group-destination শেখা-যায়-না) → বড়-L2 = broadcast-storm-ঝুঁকি।

Broadcast domain বনাম collision domain — চূড়ান্ত হিসাব

DeviceCollision domainBroadcast domain
Hubসব port একএক
Switchপ্রতি port আলাদাসব port এক
Routerপ্রতি interface আলাদাপ্রতি interface আলাদা

সূত্র: switch collision-কে মারে, router broadcast-কে মারে। আজকের full-duplex যুগে collision-domain প্রায় academic — কিন্তু exam আর interview-তে এই টেবিল চিরকাল ফেরে।

ARP — IP থেকে MAC-এ সেতু

Host-এর forwarding logic (গতকালের শেষ প্রশ্নের উত্তর):

dst-IP আমার subnet-এ? (dst & mask == net)
 ├─ হ্যাঁ → frame-এ dst-MAC = dst-IP-এর MAC   ← ARP লাগবে
 └─ না    → frame-এ dst-MAC = gateway-র MAC   ← এটাও ARP লাগবে!

দুই পথেই দরকার ‘IP → MAC’ dictionary। ARP (RFC 826, 1982) তার উত্তর — দুই packet:

Request (broadcast ff:ff:ff:ff:ff:ff):
  Who has 192.168.1.1? Tell 192.168.1.20
  (sender MAC/IP field-ও ভরা — কারণ সবাই এটা দেখে শিখে নেয়!)

Reply (unicast, শুধু জিজ্ঞাসকের কাছে):
  192.168.1.1 is-at b8:27:eb:44:9c:10

Reply unicast — কারণ requester-এর MAC request-এই জানা ছিল। আর LAN-এর বাকিরা reply না দেখলেও ক্ষতি নেই: তারা requester-এর mapping request-থেকেই নোট করেছে (opportunistic learning)।

Cache-এর জীবন

প্রতি lookup-এ wire-noise অযৌক্তিক, তাই OS রাখে ARP cache:

$ ip neigh show
192.168.1.1 dev wlan0 lladdr b8:27:eb:44:9c:10 REACHABLE
192.168.1.34 dev wlan0  <incomplete>          ← মৃত/অনুপস্থিত

Linux-এ state-machine: REACHABLE (সদ্য-প্রমাণিত) → STALE (সময় গড়াল, তবু ব্যবহারযোগ্য) → PROBE/DELAY (নতুন traffic-এ re-confirm) → REACHABLE। macOS-এ simpler timeout (~20 min)। Entry expire হলে পরের packet-এ আবার ARP — silent-failover-friendly: gateway swap হলে stale-cache কয়েক সেকেন্ডে ঠিক হয়ে যায়।

Gratuitous ARP — না-জিজ্ঞেস-করে-ঘোষণা

কেউ জিজ্ঞা না করেই device broadcast করে: ‘আমি X.X.X.X, MAC আমার!’ ব্যবহার: NIC failover (HA-pair swap), IP change, VM migration, DHCP-assign-এর পর duplicate-detection। সবার cache pre-refresh — convergence সেকেন্ড থেকে instant।

L2 বনাম L3 — সিদ্ধান্তের সীমারেখা

Switch (L2)Router (L3)
দেখেdst MACdst IP
জানেMAC↔port (learning)route table (protocol/config)
বদলায়frame-header rewrite করে না — শুধু copyTTL—, নতুন frame
ভাষাEthernetIP
সীমাএক subnet/broadcast-domainsubnet-দের মধ্যে

Router আসলে L2-ও বোঝে (প্রতিটা interface-এ frame receive করে), কিন্তু সিদ্ধান্ত IP দেখে। Switch-এর চোখে পৃথিবী = flat MAC-space; router-এর চোখে = hierarchical prefix-space — পরের লেসনগুলোর foundation।

ভেতরে কী ঘটছে

Flood-এর ভেতরে: store-and-forward বনাম cut-through

Store-and-forward: পুরো-frame-buffer, FCS-verify, forward — latency এক-frame-time, corrupted-মরে-পথেই। Cut-through: DST-MAC (৬৪ bit!)-পড়া- মাত্র forward — ultra-low-latency-fabric-প্রিয়, error-propagation-দাম। Hybrid fragment-free: প্রথম 64-byte পড়ে — CSMA/CD-minimum-size-র প্রতিধ্বনি।

Aging timer কেন ~300 সেকেন্ড

খুব-ছোট হলে churn: idle-host entry বারবার-মরে, flood-বন্যা। খুব-বড় হলে ghost-port: device-সরে-গেলে stale-mapping traffic-অন্ধ-দিকে। 300 s sweet-spot; datacenter-mobility-তে কম, campus-এ বেশি। Same-MAC- দুই-port (VM-migration): নতুন-জিতে, flap হলে loop-suspect-alarm।

ARP-এর ৪০+ বছর, এক-RFC, শূন্য-revision

Plummer-এর RFC 826 এত-সংক্ষিপ্ত-সঠিক যে IPv6-পর্যন্ত চলল — v6-তে ARP ND-তে-প্রত্যাহার (broadcast-নেই, multicast-replace; ipv6 lesson)। কিন্তু প্রতি-LAN-এ ‘who-has’ আজও-শোনা-যায় — minimalism-স্মৃতিস্তম্ভ।

Proxy ARP — জাদুকরী-উত্তরদাতা

Router-নিজেই-উত্তর: ‘192.168.2.5? আমি!’ (proxy-ARP) — mask-misconfig- লুকানো ৮০-এর-hack, আজ NAT-hairpin/mobile-network-এ জীবন্ত। ক্ষতি: topology-অদৃশ্য, debug-কঠিন। tcpdump-এ reply-sender router-না-হলে proxy-suspect।

উদাহরণ

Scripted scenario — একটা ঘরের জন্ম থেকে পূর্ণ নেটওয়ার্ক

চার device, fresh switch (table খালি):

T0  laptop boot → DHCP discover (broadcast!)
    switch: src=laptop@p1 শিখল        table: {laptop:p1}
    flood → সবাই পেল (router DHCP-server উত্তর দেবে)

T1  laptop → gateway ICMP (gateway-র MAC জানা না)
    laptop: ARP who-has 192.168.1.1 (broadcast)
    switch: flood; সবাই শিখল laptop@p1
    gateway: reply is-at b8:27:…:10 (unicast)
    switch: src=gateway@p4 শিখল        table: {laptop:p1, gw:p4}

T2  laptop → server.example.com (via gateway)
    frame: dst-MAC=gateway → switch FORWARD p1→p4 only ✓
    (TV@p2, phone@p3 কিছুই দেখল না — filtering-এর জয়)

T3  TV YouTube stream শুরু (gateway-র MAC cache-এ ছিল না)
    TV: ARP broadcast → flood; gateway reply → switch শিখল tv@p2
    table complete: {laptop:p1, gw:p4, tv:p2}

T4  gateway → laptop response
    forward p4→p1 single-port ✓ — zero flooding

লক্ষ্য করুন: প্রথম কয়েক সেকেন্ডে flood-heavy, তারপর নেটওয়ার্ক ‘nibhrito’ — steady-state-এ প্রতি frame ঠিক এক port। Broadcast- traffic শুধু ARP-refresh-এ ফেরে (aging ~300 s পরপর)।

একই scenario-তে ARP cache-দের জীবন

laptop cache:                    gateway cache:
192.168.1.1  → b8:27:…:10        192.168.1.20 → a4:5e:…:83
(REACHABLE, T1-জন্ম)              (request-field থেকে T1-এই)

T0-DHCP-broadcast-এ gateway laptop-MAC-জানত — T1-request তার-কাছে
শুধু formal-confirm। Opportunistic-learning: প্রতি-exchange দুই-
দিকেই cache-ভরে।

ছবিতে

Time  Event                     Switch table after        Ports hit
────  ────────────────────────  ────────────────────────  ─────────
 T0   laptop DHCP-disc (bcast)  laptop→p1                 p1→all
 T1   ARP req (bcast)           laptop→p1                 p1→all
      ARP rep                   laptop→p1, gw→p4          p4→p1
 T2   ICMP to gw                (no change)               p1→p4 ★
 T3   TV ARP req (bcast)        …, tv→p2                  p2→all
      ARP rep                   complete                  p4→p2
 T4   steady-state streaming    (aging refresh only)      point-to-point

★ filtering: জানা destination = ঠিক এক port — switch-এর পুরো মূল্য
Learning-table-এর evolution — প্রতিটা frame একটা নতুন fact যোগ করে; flood-এর হার সময়ের সাথে পড়ে যায়।
laptop                                gateway
  │─── ARP req (BROADCAST) ───────────▶│
  │    who-has 192.168.1.1             │
  │    tell 192.168.1.20 @a4:5e:…:83   │
  │         [laptop-MAC সবাই নোট করল]  │
  │◀─── ARP rep (UNICAST) ─────────────│
  │    192.168.1.1 is-at b8:27:…:10    │
  [gateway-MAC laptop-এ cache]         [কিছুই না — already known]

after: both caches REACHABLE → STALE → PROBE → REACHABLE …
ARP-এর দুই-packet dance আর দুই দিকের cache-জন্ম — এক exchange, চারটা fact।

নিজে চালিয়ে দেখুন

EXPERIMENT

Cache-এর আগে-পরে, bridge FDB, আর জীবন্ত ARP-capture

macOS / Linux (tcpdump-এ sudo)· ২০ মিনিট

ধাপ ১ — cache-এর আগে-পরে:

# Linux:
ip neigh show                      # আগে — target-এর entry নেই?
ping -c 1 <LAN-এর নতুন IP>          # যেমন printer/NAS
ip neigh show                      # পরে — REACHABLE এসেছে!

# macOS:
arp -a                             # সব entry
arp -d <IP>                        # একটা মুছুন (sudo হতে পারে)
ping -c 1 <IP> && arp <IP>

incomplete দেখলে সে host মৃত বা অনুপস্থিত — negative-cache-ও তথ্য।

ধাপ ২ — switch-এর চোখ (Linux bridge হলে):

bridge fdb show br br0 | grep -v permanent | head
# আপনার own-MAC খুঁজুন — কোন port-এ শেখা?

Managed switch হলে web-UI-র MAC-table page একই জিনিস। Home-router firmware-এ ‘attached devices’-ও আসলে এই FDB-ই।

ধাপ ৩ — জীবন্ত exchange capture (sudo):

sudo tcpdump -e -n -i any -c 4 'arp'
# আরেক terminal-ে cache-flush + fresh ping:
sudo ip neigh flush all ; ping -c 1 192.168.1.1
# (macOS: sudo arp -a -d ; ping -c 1 192.168.1.1)

Annotated pattern:

a4:5e:60:d2:1f:83 > ff:ff:ff:ff:ff:ff, ethertype ARP:
    who-has 192.168.1.1 tell 192.168.1.20      ← DST=সব-f: BROADCAST
b8:27:eb:44:9c:10 > a4:5e:60:d2:1f:83, ethertype ARP:
    reply 192.168.1.1 is-at b8:27:eb:44:9c:10  ← UNICAST reply

ধাপ ৪ — gratuitous-ARP-শিকার (ঐচ্ছিক): WiFi-reconnect/VPN-toggle capture-চালু-রেখে — অনেক-stack unsolicited-announce পাঠায় (no-request ‘reply … is-at’)। পেলে HA/failover-র প্রথম-দৃশ্য।

সতর্কতা: নিজের-LAN-এ খেলুন; অপরিচিত-network-এ ARP-tooling আইনি- নৈতিক-সীমা-ছোঁয়ে।

এটা কী প্রমাণ করে

Fresh ping-এর আগে-পরে ARP-cache-এ entry জন্ম নেয়, switch-এর FDB-তে আপনার MAC নিজেই ঢোকে, আর capture-এ request-broadcast/reply-unicast ঠিক textbook-এর মতো — তিনটা observation-ই আজকের দুই mechanism-এর direct evidence।

নিজে বানান

BUILD IT

ARP Simulator — hosts, switch, queue: পুরো LAN-এর মস্তিষ্ক নিজের হাতে

Python · ●●○○○
  1. Host class: ip, mac, arp_cache, send()-এ gateway-decision
  2. Switch class: mac_table, learn(), forward() — miss হলে flood
  3. Event queue: প্রতিটা frame (src,dst,payload) time-ordered process হয়
  4. ARP-exchange model: broadcast-request সব host-এ cache ভরে
  5. Scenario runner প্রতি event-এ switch-table আর cache-এর snapshot ছাপে

লক্ষ্য: example-section-এর T0–T4-scenario executable — table-evolution নিজের-চোখে, নিজের-engine-এ।

#!/usr/bin/env python3
"""arp_sim.py — একটা LAN-এ switch-learning + ARP-এর miniature simulation।"""

class Host:
    def __init__(self, name, ip, mac, port):
        self.name, self.ip, self.mac, self.port = name, ip, mac, port
        self.cache = {}                       # ip -> mac

    def want_send(self, net, dst_ip, payload):
        """Gateway-decision + (দরকার হলে) ARP — event yield করে।"""
        if net.is_local(dst_ip):
            target_ip = dst_ip
        else:
            target_ip = net.gateway_ip        # off-subnet → gateway
        if target_ip not in self.cache:
            print(f"[{self.name}] ARP? {target_ip} এর MAC জানি না")
            yield from net.arp_exchange(self, target_ip)
        dst_mac = self.cache[target_ip]
        yield ("frame", self, dst_mac, payload)

class Switch:
    def __init__(self):
        self.table = {}                       # mac -> port
        self.hosts_by_port = {}

    def learn(self, mac, port):
        if self.table.get(mac) != port:
            self.table[mac] = port
            print(f"  switch learns {mac} -> p{port}")

    def forward(self, frame):
        _, src_host, dst_mac, _ = frame
        self.learn(src_host.mac, src_host.port)
        out = self.table.get(dst_mac)
        if out is None:
            ports = [p for p in self.hosts_by_port if p != src_host.port]
            action = f"FLOOD {ports}"
        else:
            action = f"FORWARD p{out}"
        print(f"  switch: {src_host.name} -> {dst_mac[:8]}… : {action}")

class Network:
    def __init__(self, cidr, gateway_ip):
        self.prefix = cidr
        self.gateway_ip = gateway_ip
        self.switch = Switch()
        self.hosts = []

    def add(self, host):
        self.hosts.append(host)
        self.switch.hosts_by_port[host.port] = host

    def is_local(self, ip):
        return ip.rsplit(".", 1)[0] == self.prefix

    def arp_exchange(self, asker, target_ip):
        print(f"[{asker.name}] ARP who-has {target_ip}? (broadcast)")
        self.switch.learn(asker.mac, asker.port)
        for h in self.hosts:                  # broadcast: সবাই শোনে
            h.cache.setdefault(asker.ip, asker.mac)
        target = next(h for h in self.hosts if h.ip == target_ip)
        asker.cache[target_ip] = target.mac
        print(f"[{target.name}] ARP reply {target_ip} is-at {target.mac}")
        yield ("arp", asker, target.mac, None)

net = Network("192.168.1", gateway_ip="192.168.1.1")
laptop = Host("laptop", "192.168.1.20", "a4:5e:60:d2:1f:83", 1)
tv     = Host("tv",     "192.168.1.30", "3c:22:fb:09:aa:71", 2)
gw     = Host("gw",     "192.168.1.1",  "b8:27:eb:44:9c:10", 4)
for h in (laptop, tv, gw): net.add(h)
net.switch.hosts_by_port[3] = None              # খালি port p3

print("== T1: laptop → gateway ping ==")
for ev in laptop.want_send(net, "192.168.1.1", "ICMP echo"):
    if ev[0] == "frame": net.switch.forward(ev)

print("== T2: laptop → internet (off-subnet, via gw) ==")
for ev in laptop.want_send(net, "93.184.216.34", "HTTP GET"):
    if ev[0] == "frame":
        print(f"  frame dst-MAC={ev[2]} (gw! not the server)")
        net.switch.forward(ev)

print("== final switch table ==")
for m, p in sorted(net.switch.table.items()):
    print(f"  p{p}: {m}")

প্রত্যাশিত output (সংক্ষেপে):

== T1 ==
[laptop] ARP? 192.168.1.1 এর MAC জানি না
[laptop] ARP who-has 192.168.1.1? (broadcast)
[gw] ARP reply 192.168.1.1 is-at b8:27:eb:44:9c:10
  switch learns a4:5e:60:d2:1f:83 -> p1
  switch: laptop -> b8:27:eb… : FORWARD p4
== T2 ==
  frame dst-MAC=b8:27:eb:44:9c:10 (gw! not the server)
  switch: laptop -> b8:27:eb… : FORWARD p4
== final switch table ==
  p1: a4:5e:60:d2:1f:83
  p4: b8:27:eb:44:9c:10

T2-র সেই print-line-ই লেসনের heart: internet-bound frame-ও L2-তে শুধু gateway-কে চেনে।

নিজে বাড়ান:

  1. Aging-timer: timestamp+300 s expire → forced-re-flood
  2. Attacker-host fake-gratuitous-announce → cache-poison-animation
  3. Duplicate-MAC-migration: নতুন-port overwrite + flap-log

বাস্তব সিস্টেমে

Datacenter-এ ARP storm

Cloud-provider-এ হাজার VM live-migrate হয় — প্রতি migration-এ gratuitous-ARP burst। Top-of-rack switch-গুলোর CPU এই control-plane traffic-এ rate-limit রাখে, নাহলে one bad hypervisor = whole-rack ARP-storm = management-plane outage।

EVPN/VXLAN — MAC learning-এর BGP-রূপ

Modern cloud L2 multi-rack/site stretch — flood-and-learn scale করে-না; MAC-reachability BGP-EVPN-control-plane-এ (routing-bgp lesson সংযোগ) — learning→signaling, পুরনো-concept-নতুন-পোশাক।

DHCP snooping + DAI enterprise-এ standard

Campus access-switch-এ Dynamic-ARP-Inspection default-on: untrusted-port reply শুধু DHCP-snooping-binding মিললে accept — static-IP-spoofing instant-block; গতকালের attack-তাৎপর্যের production-উত্তর।

Neighbor Discovery — IPv6-এর ARP-পুনর্জন্ম

IPv6-তে ARP নেই; ND multicast-solicited-node-address দিয়ে একই-কাজ — broadcast-noise-ছাড়া, reachability-confirm + DAD built-in (ipv6 lesson)।

যে ভুলগুলো সবাই করে

“Switch-এর টেবিলে MAC ঢোকে destination দেখে।”

উল্টো — শেখা-হয় source-দেখে: কে-পাঠাচ্ছে, কোন-port-এ। Destination শুধু-lookup-এ। কোনো-host একবারও-না-পাঠালে switch-চেনে-না → flood।

“ARP শুধু প্রথমবার দরকার, তারপর সব মনে থাকে।”

Cache-volatile-by-design: timeout/STALE-cycle re-verify — NIC-swap, DHCP-renew, VM-migration, failover-এ static-forever-cache নীরব-blackhole। Volatility feature, bug-নয়।

“Router আর switch একই কাজ, শুধু দামে পার্থক্য।”

সিদ্ধান্তের-ভিত্তি-ভিন্ন: switch dst-MAC (flat, per-link), router dst-IP (hierarchical, end-to-end)। Switch broadcast-domain-এ- সবাই-একসাথে; router সীমা-টানে। Home-‘WiFi-router’ = switch+AP+router+ DHCP+NAT এক-box — concept-আলাদা-রাখুন।

“ARP-spoofing শুধু পুরনো threat, switched-network-এ অসম্ভব।”

Switch traffic-isolate-করে, trust-করে-না — যে-কোনো-LAN-host spoofed-reply পাঠাতে-পারে, switch স্বাভাবিক-frame-ভেবে forward-ই-করবে। DAI-ছাড়া home/public-LAN-এ আজও-trivially-সম্ভব — HTTPS/VPN non-negotiable।

বুঝেছেন কি না দেখুন

1

Switch-এর তিনটা স্থায়ী কাজ কী কী? প্রতিটার এক-লাইনে নিয়ম।

স্মরণ

Learning: source-MAC+ingress-port টেবিলে। Forwarding: dst-MAC-lookup — hit=single-port, miss=flood (ingress-বাদে)। Aging: idle-entry ~300 s নিঃশব্দ-delete।

2

24-port switch-এ collision domain কয়টা, broadcast domain কয়টা? ওই switch-এর মাঝখানে এক router-interface ঢুকলে দুটো কী হয়?

প্রয়োগ

Collision: 24 (per-port), broadcast: 1। Router-interface ঢুকলে দুই-পাশে broadcast-split → 2; collision-সংখ্যা-অপরিবর্তিত (আগেই- per-port)।

3

ARP request কেন broadcast, reply কেন unicast? Request-এর sender- field থেকে অন্য host-রা কী লাভ করে?

যুক্তি

Requester target-MAC-জানে-না → broadcast; target-উত্তর-দেবে জেনে requester-MAC (sender-field) → unicast-যথেষ্ট। Onlookers sender-ip→mac নোট-করে cache-fill — ভবিষ্যৎ-ARP-বাঁচে।

4

ip neigh-এ এক entry REACHABLE, আরেকটা STALE — দুটোর মধ্যে functional difference কী? STALE-এর দিকে packet পাঠালে কী হয়?

প্রয়োগ

REACHABLE = সদ্য-confirmed; STALE = সময়-গড়িয়েছে, তবু-valid — packet সরাসরি-যাবে, kernel-পাশাপাশি DELAY→PROBE নীরব-re-confirm। STALE ≠ broken, ‘verify-pending’।

5

Attacker gratuitous-ARP দিয়ে gateway-র IP-র জন্য নিজের MAC ঘোষণা করল আপনার cache-এ। আপনার internet-traffic কী হবে, আর TLS সেটা কতটা বাঁচাবে?

যুক্তি

Traffic attacker-MAC-এ ঘুরে-আসবে — MITM-position। TLS confidentiality- integrity দেয় (decrypt/tamper-না), কিন্তু metadata (SNI/DNS) দেখবে, connection-block-করতে-পারবে। Password-safe-ish, privacy-not — defense L2-level (DAI/static) বা VPN।

6

500-user campus-এ broadcast-domain এক রাখার ঝুঁকি কী, আর VLAN- partition কী বদলে দেয়? Inter-VLAN-communication কোথায় যেতে বাধ্য?

ডিজাইন

এক-domain-এ ৫০০-host-এর ARP/DHCP/multicast সবাইকে-পৌঁছায় — CPU/noise scale-linearly, এক-storm = সবাই-down। VLAN-ভাগ broadcast-isolate; cross-VLAN router/L3-gateway-তে-ই — যেখানে ACL/policy: isolation-dividend।

এরপর কী

এরপর কী

Frame এবার সত্যিই ঘরের বাইরে — gateway-দিকে। ওপারে internet-যেতে চুক্তি: কে delivery-guarantee, কে-না। সেই-চুক্তির-নাম IP।

পরের লেসনে:

  • IPv4 header field-by-field — version/IHL → checksum, hexdump-হাতে
  • Best-effort semantics — IP কী promise-করে-না
  • Fragmentation mechanics + modern-world-avoidance-যুক্তি
  • TTL loop-containment; protocol-numbers TCP/UDP-demux

আজ শিখলাম প্রথম hop কীভাবে cross হয়; পরের লেসনে শিখব continent- crossing-এর চুক্তিপত্র নিজে কেমন।

আরও পড়ুন

  • RFC 826 — An Ethernet Address Resolution Protocol — David C. Plummer · ARP-র মূল ১৯৮২ spec — চল্লিশ বছর পরেও word-by-word কার্যকর
  • TCP/IP Illustrated, Volume 1: The Protocols — Chapter 4 (ARP) — W. Richard Stevens · ARP cache behavior আর proxy-ARP-সহ wire-level উদাহরণ
  • Computer Networking: A Top-Down Approach — Link Layer chapter (switches section) — Kurose & Ross · Self-learning switch-এর algorithmic আলোচনা আর broadcast/collision domain analysis